Redis技术指南-7-缓存设计

Redis技术指南-7-缓存设计

上一节:
Redis技术指南-6-哨兵和集群

上一节聊了Redis的哨兵和集群,这一节我们来理解一下Redis的缓存设计。

缓存设计

引入缓存
好处: 加速读写,降低后端负载
坏处: 缓存和Db的不一致性保证,复杂度很大。

Redis 过期策略
几个:
过期删除: 定时删除(定时任务扫描字典(有过期的key))、惰性删除(零散处理)
因为只有过期删除,其实还不能满足需求或者不是一种精准的删除策略。

内存淘汰策略:

  • noeviction: 内存上限后,不会删除,拒绝写入
  • allkeys-lru: 写入的时候,上限了,淘汰最久没有使用的键
  • volatile-lru: 写入的时候,上限了,从设置过期时间中的最久没有使用键淘汰,直到没有可用空间,退回到noeviction
  • allkeys-random: … 随机删除
  • volatile-random: … 随机删除过期时间,只到有可用空间
  • volatile-ttl: 根据ttl属性,删除最近即将要过期的数据。如果没有,退到noeviction
  • allkeys-lfu: 所有键中使用频率最少的键
  • volatile-lfu: 所有设置过期时间中驱逐使用频率最少的键

实践:
低一致性业务建议配置最大内存和淘汰策略使用
高一致性业务可以结合使用超时剔除和主动更新,即使主动更新出现问题,但是数据过期时间后删除数据。

穿透优化

含义: 穿透代表查询一个根本不存在的数据。缓存miss、DBmiss,返回空结果。

优化方式
1、 缓存空结果
在DBmiss后,写入缓存中一个空对象,下次再访问的时候,命中缓存。
注意: 1、过多的不存在访问,注意加过期时间
2、先不存在,过期时间内存在,注意消息系统更新。
2、布隆过滤器拦截
访问缓存前,将存在的key用布隆过滤器提前保存,做第一层拦截。
如果不存在的key访问,这个时候布隆过滤器就会拦截住。
适用于: 数据命中不高、数据相对固定、实时性低(数据集很大)的场景,但是代码维护复杂,但是cache space 少一些。
image.png

无底洞

更多的机器并不带表更好的性能,因为有水平扩容后,各个槽和数据迁移。
如果一次mget横跨多个机器,这个时候网络IO会增多,从而会很慢

雪崩危险

含义: 由于某些原因,缓存不能提供服务了,流量全部hit存储层。会把DB层打崩的。

优化方案:
1、 保证缓存层服务高可用。 Redis-sentinal 和 RedisCluster
2、设置隔离组件为后端限流并降级
3、提前演练

热key优化
设置了过期时间的key,可能会有很大的流量访问,那么在重建缓存期间,流量就会打在DB上
1、 互斥,setnx : 单线程重建缓存,其他线程等待
2、永不过期


连载中。。后续有多线程、事件、事务、其他特性补充。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

下次遇见说你好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值