这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战
昨天又翻了源码,把缓存类型看的明明白白,大家以后遇到类似的需要问题后,也可以参考这个代码,进行业务完成,那我们今天讨论的是Redis的其它玩法。
RedisProperties
我们挑主要的看,这是redis的基本配置,比如url,host和port
然后是集群、哨兵和超时的配置
然后是池子配置,指定了最大空闲和最小空闲,还有最大活跃的数量。
集群的配置,可以配置节点和重定向次数
主从节点的配置
ok,那让我们配置一下
搞配置
spring.redis.host=localhost
spring.redis.lettuce.pool.maxActive=5
spring.redis.lettuce.pool.maxIdle=5
RedisTemplate
jedis是redis官方提供的操作redis的类,而RedisTemplate是Spring框架给我们提供的Redis操作的模板,所以我们前面铺垫的目的都是为了更好的操作这个模板。
首先要生成一个RedisTemplate模板,代码如下:
这个Bean注解会把生成的对象交给Spring管理,然后我们就有了这个对象。
@Autowired
private RedisTemplate<String, Coffee> redisTemplate;
这个对象的String是代表放入的key的类型,用啥放就用啥类型取。 我们注入这个对象,然后先获取它这个操作
HashOperations<String, String, Coffee> hashOperations = redisTemplate.opsForHash();
然后根据这个操作,我们来查询个数据试试
if (redisTemplate.hasKey(CACHE) && hashOperations.hasKey(CACHE, name)) {
log.info("Get coffee {} from Redis.", name);
return Optional.of(hashOperations.get(CACHE, name));
}
如果没有获取到,那我们就得放入数据,放入之前先去数据库查询,查询代码前面讲过,就不演示了。
放入数据的时候用put方法,然后指定一个过期时间就行,代码比较简单就不演示了。
if (coffee.isPresent()) {
log.info("Put coffee {} to Redis.", name);
hashOperations.put(CACHE, name, coffee.get());
redisTemplate.expire(CACHE, 1, TimeUnit.MINUTES);
}