参考地址:https://spring.io/guides/gs/messaging-redis/
==============================================================================================================================
1.pom.xml关于redis的依赖
spring boot 1.4版本之前的关于redis的依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency>
上面依赖如果在高版本使用,会出现下面的情况:
已经被弃用
而spring boot 1.4版本之后的关于redis的依赖 【如下,使用时去掉<version>即可】
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>1.5.8.RELEASE</version> </dependency>
2.application.properties配置
spring boot2.0之前的配置
#redis
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=localhost
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=398023
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0
spring boot2.0 以后的配置
#redis配置 # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=localhost # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password=398023 # 连接池最大连接数(使用负值表示没有限制) spring.redis.jedis.pool.max-active=8 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.jedi.pool.max-wait=-1 # 连接池中的最大空闲连接 spring.redis.jedi.pool.max-idle=8 # 连接池中的最小空闲连接 spring.redis.jedi.pool.min-idle=0 # 连接超时时间(毫秒) spring.redis.jedi.timeout=0
3.RedisConfig.java
【Redis的key生成策略、缓存管理、序列化】
【配置以后,就可以单独使用注解的方式使用redis了】
package com.sxd.redis; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; @Configuration @EnableCaching public class RedisConfig extends CachingConfigurerSupport { /** * 生成key的策略【默认第一种】 * 如果不指定,则按照本方法的key生成策略去拼接key * 例如:com.sxd.service.UserServiceImpl.save:com.sxd.entity.User@7c9359ec * @return */ @Bean public KeyGenerator keyGenerator() { return new KeyGenerator() { @Override public Object generate(Object target, Method method, Object... params) { StringBuilder sb = new StringBuilder(); sb.append(target.getClass().getName()+"."); sb.append(method.getName()); for (Object obj : params) { sb.append(":"+obj.toString()); } return sb.toString(); } }; } /** * 生成key的策略【自定义第二种】 * 使用时在注解@Cacheable(value = "12s",keyGenerator = "listkeyGenerator")中指定 * @return */ @Bean(name = "listkeyGenerator") public KeyGenerator listkeyGenerator(){ return new KeyGenerator() { @Override public Object generate(Object target, Method method, Object... params) { StringBuilder sb = new StringBuilder(); sb.append(method.getName()); return sb.toString(); } }; } /** * 缓存管理 */ @Bean public CacheManager cacheManager(RedisTemplate redisTemplate) { RedisCacheManager rcm =new RedisCacheManager(redisTemplate); //按需求设置自己需要的 缓存名字 和 对应的失效时间 //可以不要 Map<String,Long> map = new HashMap<>(); map.put("12h",3600*12L); map.put("12m",60*12L); map.put("12s",12L); rcm.setExpires(map); return rcm; } /** * RedisTemplate配置 * Redis序列化 */ @Bean public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) { StringRedisTemplate template = new StringRedisTemplate(factory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } }