数据结构类型
String
setnx //设置key不存在,则添加成功
setex name 10 jack // key 10s失效,自动删除
hash
hset
hget
list
按添加数据排序
lpush //左侧插入
rpush //右侧插入
set
不重复
sadd //添加
srem //移除
zset(SortedSet)
可排序、元素不重复
zadd stu 60 jack //
缓存
更新策略:
- 内存淘汰:内存不足时自动淘汰;
- 超时剔除:添加TTL;
- 主动更新:
业务场景:
- 低一致性需求
- 高一致性需求
持久化
RDB
AOF
面试题
缓存穿透
原因:请求的数据在缓存和数据库都不存在,这样缓存永远不会生效。
解决方案:
- 缓存空对象(null):实现简单,维护方便,但是会有额外内存消耗
- 布隆过滤:在redis前面加布隆过滤器,不存在直接拒绝
- ...
缓存雪崩
原因:同一时段大量的缓存key同时失效或者redis宕机,大量的请求到数据库。
解决方案:
- 给不同的key的TTL添加随机值
- redis集群提高服务的高可用
- 业务添加多级缓存
缓存击穿
原因:(热点key问题)高并发访问并且缓存重建业务较复杂的key突然失效。
解决方案:
- 互斥锁
- 逻辑过期:不过期的key,在没有跟新缓存前先返回旧数据;