SpringBoot整合Redis
1. SpringBoot整合Redis
1. 导入依赖
<!-- !redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
2. 在application.propertis 或者application.yml中配置 Redis连接词
#=======redis连接池配置==============
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-active=20
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.jedis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=10
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0
3. 配置类将对象序列化为JSON字符型存入Redis,如果不需要序列化,则不用配置类
@Configuration @EnableCaching // 启用缓存,使用 Lettuce,自动注入配置的方式 @AutoConfigureAfter(RedisAutoConfiguration.class) public class RedisConfig extends CachingConfigurerSupport { //缓存管理器 @Bean @SuppressWarnings("all") public CacheManager cacheManager(LettuceConnectionFactory factory) { RedisCacheWriter writer = RedisCacheWriter.lockingRedisCacheWriter(factory); RedisSerializationContext.SerializationPair pair = RedisSerializationContext.SerializationPair.fromSerializer( new Jackson2JsonRedisSerializer(Object.class)); RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); return new RedisCacheManager(writer, config); } @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(connectionFactory); // String 序列化方式 StringRedisSerializer stringSerializer = new StringRedisSerializer(); // 使用Jackson2JsonRedisSerialize替换默认序列化 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); // 设置key的序列化规则 redisTemplate.setKeySerializer(stringSerializer); redisTemplate.setHashKeySerializer(stringSerializer); // 设置value的序列化规则 redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); return redisTemplate; } // 重新定义缓存 key 的生成策略 @Bean @Override 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(); }}; } }
4. redisTemplate常用方法
字符串:
redisTemplate.boundValueOps( K key ).set(Object value ); 设置值
redisTemplate.boundValueOps( K key ).set(Object value,long timeout TimeUnit uint); 设置值,和存储时间
redisTemplate.boundValueOps(K key).get(); 获取值
redisTemplat.getExpire(Key,TimeUnit) 获得失效时间
redisTemplat.opsForValue().increment(key, new Double(1)) 自增加1
Hash 散列
redisTemplate.boundHashOps(K key ).put(HK hashkey, HV value); 设置值
Set<HK> redisTemplate.boundHashOps(Key k).keys(); 获得当前键值对于的散列域
List<HV> redisTemplate.boundHashOps(Key k).values(); 获取所有散列的值
Object redisTemplate.boundHashOps(Key k).get(Strint name); 获取对应的键值
List 列表
redisTemplate.boundListOps(Key k).leftPush("b"); 左插入
redisTemplate.boundListOps(Key k).rightPush("a"); 右插入
redisTemplate.boundListOps(Key k).leftPop(); 左弹出
redisTemplate.boundListOps(Key k).rightPop(); 右弹出
List redisTemplate.boundListOps(Key k).range(0, -1); 获取从开始到结束的值
Set 无序集合
redisTemplate.boundSetOps(Key k).add(Objcet ...); 设置值
Set redisTemplate.boundSetOps(Key k).members(); 获得所有的值
sorted set有序集合
redisTemplate.boundZSetOps(Key k).add(Objcet 分数); 添加值
Set redisTemplate.boundZSetOps(Key k.range(开始值,结束值); 获得从开始到结束的值

浙公网安备 33010602011771号