Redis常用的5种数据类型及缓存操作策略说
1.五种数据类型
String:是一种最简单的数据结构
Hash:是基于Hash槽做的一个内部的key、vaule对的这样的数据结构
List:是一个链表式的链表数据结构
Set:是元素不重复的集合
zSet:是基于跳表去做一个有序不重复的集合,并且可以自定义score打分项做一个排名
2.使用场景
String : ID递增、计数器功能、比如视频播放的次数,点赞次数、缓存
Hash :用一个对象来存储用户信息,比如商品信息,订单信息等
List :加好友列表,消息队列,最新消息排行榜等
Set :投票技术、共同好友,好友推荐、分类标签【redis提供多个几个的交集,并集,差集,元素唯一,无序】
zSet :排行榜,例如视频网站对用户上传的视频做排行榜等
3.持久化方式
RDB:优点:持久化文件小
缺点:很有可能造成数据丢失、不便数据库的重构,因为它只记录结果
AOF:优点:数据库很难丢失,记录整个数据库的变化过程
缺点:持久化文件大,而且只会越来越大
4.缓存操作策略说
一、缓存击穿: 某一热点key失效,大量的请求击穿数据库
解决方案一:构设置热点key永不过期,定期更新
二、缓存雪崩: 在某一瞬间,缓存全部失败,导致所有的请求全部穿过缓存落到数据库上,从而导致整个系统的一个瘫痪
解决方案一:设置随机的一个过期时间,不让所有的缓存的key失效
解决方案二:限制访问数据的流量
三、缓存穿透: 在任何时刻缓存都是失效的,就像是被穿透一样,所有的数据请求都还是会发送在数据库上,导致数据库瘫痪
解决方案一:构造一种默认的“不存在”的标示位,以使得不存在的value也可以进入到redis缓存中,这样就可以避免缓存穿透
四、缓存预热: 解决方案一:根据一定的策略,例如热点试题,提前从数据库中取出对应的试题并且放到redis中
五、缓存更新: 淘汰策略:更新完数据库直接淘汰redis的key,这样在下一次读操作的时候就会有一次回源查询数据库的操作
更新策略:更新完数据库顺便更新redis,这样缓存中就直接是新的数据了
缓存更新并不能保证数据库和缓存数据的一致性,因此缓存必须得要有超时数据,同时我们也需要定义清楚对应缓存的业务是允许脏读的