码迷,mamicode.com
首页 > 其他好文 > 详细

redis使用时需要注意的问题

时间:2020-05-30 21:53:33      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:this   完成   内存数据库   依赖   nfa   ***   turn   数据   object   

redis在现在的项目中经常出现,但是伴随着一波又一波的新人进入这个行业,一些问题被一次又一次的暴露。

说明在使用一个东西之前,充分了解到会带来什么影响,是十分重要的。

众所周知,redis是一个内存数据库,相较于磁盘数据库,其读取速度之快,让宅男们自惭形秽。

redis的应用场景,主要就是为了减轻对后端服务的压力,最终提高一定的性能。但若使用不当,出现问题时,即使拍断大腿,不照样造成一定的后果了吗。

刚好最近在使用redis,就简单聊聊:

大家都知道redis支持多种数据结构的存储,但是只了解这些是不够的。

场景一:我需要存一个数组对象的结构进redis,直接set是不行的,我使用的是spring-data-redis这个依赖,

技术图片

 在RedisTemplate类的源码里,有这样一段描述:

Note that while the template is generified, it is up to the serializers/deserializers to properly convert the given
Objects to and from binary data.
大意是:当需要自定义Redis对象时:需要指定序列化和反序列化的类型。上代码:
@Configuration
public class RedisConfig{
    @Bean
    public RedisTemplate<String,ResultList> redisTemplateList(RedisConnectionFactory factory){
        RedisTemplate<String,ResultList>template=new RedisTemplate<>();
        //关联
        template.setConnectionFactory(factory);
        //设置key的序列化器
        template.setKeySerializer(new StringRedisSerializer());
        //设置value的序列化器
        template.setValueSerializer(new Jackson2JsonRedisSerializer<>(ResultList.class));
        return template;
    }
}

public class ResultList implements Serializable {

private List<Result> resultList;
private String id;
  //构造就省略了,贴这个代码是体现,redis里面set的值是自定义的结构。方便业务中用,其中Result是一个实体对象
}
 
上伪代码,看如何使用:
ResultList zx  = new ResultList();
Sring cacheKey = "keyId";//根据业务场景自定义的唯一key
if (this.redisTemplateList.opsForList().range(cacheKey, 0, -1).size() == 0) {   /**业务查询代码*/ zx = new ResultList(***); this.redisTemplateList.opsForList().rightPush(cacheKey, zx); log.info("当前查询不走缓存,结果存入缓存,key:" + cacheKey); /** 动态维护 redis 超时时间*/ this.redisTemplateList.expire(cacheKey, 30L, TimeUnit.MINUTES); } else {   log.info("当前查询结果在缓存中存在,key:" + cacheKey); zx = redisTemplateList.opsForList().range(cacheKey, 0, -1).get(0);   }
这就完成了一个自定义的类型在redis中的存储,方便取用。如果你也想自定义一个结构,就把上面代码里的RedisTemplate中,设置value的序列化器自行更改即可。
还要注意一个点,如果存的是对象结构
this.redisTemplate.opsForValue().get(key)
this.redisTemplate.opsForValue().set(key,value);

需要这么来存取。自行体会吧
待补充。。。

redis使用时需要注意的问题

标签:this   完成   内存数据库   依赖   nfa   ***   turn   数据   object   

原文地址:https://www.cnblogs.com/justtodo/p/12994933.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!