分享几个实际项目中的redis缓存使用案例,从中我们可以看到redis作为一种nosql型数据库,它本身具有的优越性
案例一:
使用场景描述:验证码登录,获取手机验证码,使用验证码登录系统
如图先将随机生成的6位验证码,先放到redis缓存中,设置这个验证码的失效时间为1分钟,然后登录的时候,直接从缓存中取值验证即可
案例二:
使用场景描述:客户反馈调用接口返回太慢,需要优化 经过代码排查,发现有两个原因造成接口返回数据速度慢
问题一、sql语句太复杂 看下图 这么复杂的sql查询四五秒实属正常,一般人很快就会联想到优化sql,但考虑到SQL语句的复杂程度,尽量避免改sql,否则会带来不必要的麻烦。
问题二、业务逻辑中对一二级分类进行了嵌套循环查询,一条sql查询就那么耗时那么长,循环查询查询多次,导致了接口返回速度缓慢
解决方案:
考虑到redis支持的数据类型丰富,速度快,可以直接把返回的list放到redis缓存中,当用户来调用接口是先判断redis中有没有对应的数据,如果有直接返回redis中的数据
如图将查询的数据先查询一遍,然后放到redis中,设置redis的失效时间为一天,这里可以定义一个定时器,在每天的规定时间查询一次放入redis。
接口设计如下:
当调用接口的时候,先查询一下redis中是否有对应的数据,如果有之间返回redis中的数据,如果没有在查询,然后此时将查询的结果保存到redis中,当再次调用这个接口时就会快速返回数据。
以上是我所经历的redis在实际项目中的应用,使用redis解决这类问题,能够大幅度提高服务器的性能,减轻服务器的压力,给用户最好的体验。redis作为当下做流行的nosql数据库,有着它本身的优势,redis的特点如下:
redis的特点:
1.内存数据库,速度快,也支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
2.Redis支持的数据类型丰富,Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset
3.Redis支持数据的备份,即master-slave模式的数据备份。
4.支持事务 Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行
5.丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性