Redis缓存

缓存数据存储于代码中,而代码运行在内存中,内存的读写性能远高于磁盘,缓存可以大大降低用户访问并发量带来的服务器读写压力

但是缓存也会增加代码复杂度和运营的成本:

image-20220523214414123

缓存的使用

实际开发中,会构筑多级缓存来使系统运行速度进一步提升,例如:本地缓存与redis中的缓存并发使用:

image-20220728155124988

常用的缓存更新策略

缓存更新是redis为了节约内存而设计出来的一个东西,主要是因为内存数据宝贵,当我们向redis插入太多数据,此时就可能会导致缓存中的数据过多,所以redis会对部分数据进行更新,或者把他叫为淘汰更合适。

内存淘汰:redis自动进行,当redis内存达到咱们设定的max-memery的时候,会自动触发淘汰机制,淘汰掉一些不重要的数据(可以自己设置策略方式)

超时剔除:当我们给redis设置了过期时间ttl之后,redis会将超时的数据进行删除,方便咱们继续使用缓存

主动更新:我们可以手动调用方法把缓存删掉,通常用于解决缓存和数据库不一致问题

  • 主动更新的策略:
    • 人工编码方式:缓存调用者在更新完数据库后再去更新缓存,也称之为双写方案(常用)
    • 由系统本身完成,数据库与缓存的问题交由系统本身去处理
    • 调用者只操作缓存,其他线程去异步处理数据库,实现最终一致

最佳的缓存更新策略:

  1. 低一致性需求:使用Redis自带的内存淘汰机制
  2. 高一致性需求:主动更新,并以超时剔除作为兜底方案
    • 读操作:缓存命中则直接返回,缓存未命中则查询数据库,并写入缓存,设定超时时间
    • 写操作:先写数据库,然后再删除缓存要确保数据库与缓存操作的原子性