1. pom.xml添加依赖
<dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <dependency> <groupid>org.projectlombok</groupid> <artifactid>lombok</artifactid> <optional>true</optional> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-test</artifactid> <scope>test</scope> </dependency> <!--集成redis--> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-data-redis</artifactid> </dependency></dependencies>
2. application-dev.xml配置
#单机模式spring: redis: host: 192.168.56.101 # redis服务器地址 database: 0 # redis数据库索引(默认为0) port: 6379 # redis服务器连接端口 password: redis # redis服务器连接密码(默认为空) timeout: 300ms # 连接超时时间(毫秒)
# 哨兵模式
spring: redis: sentinel: master: mymaster nodes: 192.168.56.101:26379,192.168.56.102:26379,192.168.56.103:26379 password: redis
3. java config配置(单节点)
package com.powertrade.redis.common.config;import com.fasterxml.jackson.annotation.jsonautodetect;import com.fasterxml.jackson.annotation.propertyaccessor;import com.fasterxml.jackson.databind.objectmapper;import com.fasterxml.jackson.databind.jsontype.impl.laissezfairesubtypevalidator;import org.springframework.cache.annotation.enablecaching;import org.springframework.context.annotation.bean;import org.springframework.context.annotation.configuration;import org.springframework.data.redis.cache.rediscacheconfiguration;import org.springframework.data.redis.cache.rediscachemanager;import org.springframework.data.redis.cache.rediscachewriter;import org.springframework.data.redis.connection.redisconnectionfactory;import org.springframework.data.redis.core.redistemplate;import org.springframework.data.redis.serializer.jackson2jsonredisserializer;import org.springframework.data.redis.serializer.redisserializationcontext;import org.springframework.data.redis.serializer.redisserializer;import org.springframework.data.redis.serializer.stringredisserializer;import java.time.duration;/** * redis单机配置 */@enablecaching@configurationpublic class baseredisconfig { @bean public redistemplate<string, object> redistemplate(redisconnectionfactory redisconnectionfactory) { redisserializer<object> serializer = redisserializer(); redistemplate<string, object> redistemplate = new redistemplate<>(); redistemplate.setconnectionfactory(redisconnectionfactory); redistemplate.setkeyserializer(new stringredisserializer()); redistemplate.setvalueserializer(serializer); redistemplate.sethashkeyserializer(new stringredisserializer()); redistemplate.sethashvalueserializer(serializer); redistemplate.afterpropertiesset(); return redistemplate; } @bean public redisserializer<object> redisserializer() { //创建json序列化器 jackson2jsonredisserializer<object> serializer = new jackson2jsonredisserializer<>(object.class); objectmapper objectmapper = new objectmapper(); objectmapper.setvisibility(propertyaccessor.all, jsonautodetect.visibility.any); //必须设置,否则无法将json转化为对象,会转化成map类型 objectmapper.activatedefaulttyping(laissezfairesubtypevalidator.instance,objectmapper.defaulttyping.non_final); serializer.setobjectmapper(objectmapper); return serializer; } @bean public rediscachemanager rediscachemanager(redisconnectionfactory redisconnectionfactory) { rediscachewriter rediscachewriter = rediscachewriter.nonlockingrediscachewriter(redisconnectionfactory); //设置redis缓存有效期为1天 rediscacheconfiguration rediscacheconfiguration = rediscacheconfiguration.defaultcacheconfig() .serializevalueswith(redisserializationcontext.serializationpair.fromserializer(redisserializer())).entryttl(duration.ofdays(1)); return new rediscachemanager(rediscachewriter, rediscacheconfiguration); }}
4. 哨兵机制 (多节点配置)
package com.powertrade.redis.common.config;import com.fasterxml.jackson.annotation.jsonautodetect;import com.fasterxml.jackson.annotation.propertyaccessor;import com.fasterxml.jackson.databind.objectmapper;import com.fasterxml.jackson.databind.jsontype.impl.laissezfairesubtypevalidator;import org.springframework.beans.factory.annotation.value;import org.springframework.cache.annotation.enablecaching;import org.springframework.context.annotation.bean;import org.springframework.context.annotation.configuration;import org.springframework.data.redis.cache.rediscacheconfiguration;import org.springframework.data.redis.cache.rediscachemanager;import org.springframework.data.redis.cache.rediscachewriter;import org.springframework.data.redis.connection.redisconnectionfactory;import org.springframework.data.redis.connection.redisnode;import org.springframework.data.redis.connection.redispassword;import org.springframework.data.redis.connection.redissentinelconfiguration;import org.springframework.data.redis.core.redistemplate;import org.springframework.data.redis.serializer.jackson2jsonredisserializer;import org.springframework.data.redis.serializer.redisserializationcontext;import org.springframework.data.redis.serializer.redisserializer;import org.springframework.data.redis.serializer.stringredisserializer;import java.time.duration;/** * redis哨兵机制配置 */@enablecaching@configurationpublic class baseredisconfig { @value("${spring.redis.sentinel.nodes}") private string redisnodes; @value("${spring.redis.sentinel.master}") private string master; @value("${spring.redis.sentinel.password}") private string password; /** * redis哨兵配置 */ @bean public redissentinelconfiguration redissentinelconfiguration(){ redissentinelconfiguration configuration = new redissentinelconfiguration(); string[] host = redisnodes.split(","); for(string redishost : host){ string[] item = redishost.split(":"); string ip = item[0]; string port = item[1]; configuration.addsentinel(new redisnode(ip, integer.parseint(port))); } configuration.setpassword(redispassword.of(password)); configuration.setmaster(master); return configuration; } @bean public redistemplate<string, object> redistemplate(redisconnectionfactory redisconnectionfactory) { redisserializer<object> serializer = redisserializer(); redistemplate<string, object> redistemplate = new redistemplate<>(); redistemplate.setconnectionfactory(redisconnectionfactory); redistemplate.setkeyserializer(new stringredisserializer()); redistemplate.setvalueserializer(serializer); redistemplate.sethashkeyserializer(new stringredisserializer()); redistemplate.sethashvalueserializer(serializer); redistemplate.afterpropertiesset(); return redistemplate; } @bean public redisserializer<object> redisserializer() { //创建json序列化器 jackson2jsonredisserializer<object> serializer = new jackson2jsonredisserializer<>(object.class); objectmapper objectmapper = new objectmapper(); objectmapper.setvisibility(propertyaccessor.all, jsonautodetect.visibility.any); //必须设置,否则无法将json转化为对象,会转化成map类型 objectmapper.activatedefaulttyping(laissezfairesubtypevalidator.instance,objectmapper.defaulttyping.non_final); serializer.setobjectmapper(objectmapper); return serializer; } @bean public rediscachemanager rediscachemanager(redisconnectionfactory redisconnectionfactory) { rediscachewriter rediscachewriter = rediscachewriter.nonlockingrediscachewriter(redisconnectionfactory); //设置redis缓存有效期为1天 rediscacheconfiguration rediscacheconfiguration = rediscacheconfiguration.defaultcacheconfig() .serializevalueswith(redisserializationcontext.serializationpair.fromserializer(redisserializer())).entryttl(duration.ofdays(1)); return new rediscachemanager(rediscachewriter, rediscacheconfiguration); } }
5. redis工具类
package com.powertrade.redis.common.utils;import lombok.requiredargsconstructor;import org.springframework.data.redis.core.boundsetoperations;import org.springframework.data.redis.core.hashoperations;import org.springframework.data.redis.core.redistemplate;import org.springframework.data.redis.core.valueoperations;import org.springframework.stereotype.component;import java.util.collection;import java.util.iterator;import java.util.list;import java.util.map;import java.util.set;import java.util.concurrent.timeunit;@component@requiredargsconstructorpublic class rediscache{ public final redistemplate redistemplate; /** * 缓存基本的对象,integer、string、实体类等 * * @param key 缓存的键值 * @param value 缓存的值 */ public <t> void setcacheobject(final string key, final t value) { redistemplate.opsforvalue().set(key, value); } /** * 缓存基本的对象,integer、string、实体类等 * * @param key 缓存的键值 * @param value 缓存的值 * @param timeout 时间 * @param timeunit 时间颗粒度 */ public <t> void setcacheobject(final string key, final t value, final integer timeout, final timeunit timeunit) { redistemplate.opsforvalue().set(key, value, timeout, timeunit); } /** * 设置有效时间 * * @param key redis键 * @param timeout 超时时间 * @return true=设置成功;false=设置失败 */ public boolean expire(final string key, final long timeout) { return expire(key, timeout, timeunit.seconds); } /** * 设置有效时间 * * @param key redis键 * @param timeout 超时时间 * @param unit 时间单位 * @return true=设置成功;false=设置失败 */ public boolean expire(final string key, final long timeout, final timeunit unit) { return redistemplate.expire(key, timeout, unit); } /** * 获得缓存的基本对象。 * * @param key 缓存键值 * @return 缓存键值对应的数据 */ public <t> t getcacheobject(final string key) { valueoperations<string, t> operation = redistemplate.opsforvalue(); return operation.get(key); } /** * 删除单个对象 * * @param key */ public boolean deleteobject(final string key) { return redistemplate.delete(key); } /** * 删除集合对象 * * @param collection 多个对象 * @return */ public long deleteobject(final collection collection) { return redistemplate.delete(collection); } /** * 缓存list数据 * * @param key 缓存的键值 * @param datalist 待缓存的list数据 * @return 缓存的对象 */ public <t> long setcachelist(final string key, final list<t> datalist) { long count = redistemplate.opsforlist().rightpushall(key, datalist); return count == null ? 0 : count; } /** * 获得缓存的list对象 * * @param key 缓存的键值 * @return 缓存键值对应的数据 */ public <t> list<t> getcachelist(final string key) { return redistemplate.opsforlist().range(key, 0, -1); } /** * 缓存set * * @param key 缓存键值 * @param dataset 缓存的数据 * @return 缓存数据的对象 */ public <t> boundsetoperations<string, t> setcacheset(final string key, final set<t> dataset) { boundsetoperations<string, t> setoperation = redistemplate.boundsetops(key); iterator<t> it = dataset.iterator(); while (it.hasnext()) { setoperation.add(it.next()); } return setoperation; } /** * 获得缓存的set * * @param key * @return */ public <t> set<t> getcacheset(final string key) { return redistemplate.opsforset().members(key); } /** * 缓存map * * @param key * @param datamap */ public <t> void setcachemap(final string key, final map<string, t> datamap) { if (datamap != null) { redistemplate.opsforhash().putall(key, datamap); } } /** * 获得缓存的map * * @param key * @return */ public <t> map<string, t> getcachemap(final string key) { return redistemplate.opsforhash().entries(key); } /** * 往hash中存入数据 * * @param key redis键 * @param hkey hash键 * @param value 值 */ public <t> void setcachemapvalue(final string key, final string hkey, final t value) { redistemplate.opsforhash().put(key, hkey, value); } /** * 获取hash中的数据 * * @param key redis键 * @param hkey hash键 * @return hash中的对象 */ public <t> t getcachemapvalue(final string key, final string hkey) { hashoperations<string, string, t> opsforhash = redistemplate.opsforhash(); return opsforhash.get(key, hkey); } /** * 获取多个hash中的数据 * * @param key redis键 * @param hkeys hash键集合 * @return hash对象集合 */ public <t> list<t> getmulticachemapvalue(final string key, final collection<object> hkeys) { return redistemplate.opsforhash().multiget(key, hkeys); } /** * 获得缓存的基本对象列表 * * @param pattern 字符串前缀 * @return 对象列表 */ public collection<string> keys(final string pattern) { return redistemplate.keys(pattern); }}
以上就是springboot集成redis的方法的详细内容。