Redis-实战

缓存:

  数据交换的缓冲区,是存储数据的临时地方,一般读写性能较高。

作用:

降低后端负载 

提高读写效率,降低相应时间。

 

成本:

数据一致性和代码维护成本

 

缓存更新策略:

1.内存淘汰:

   解决内存不足问题,默认开启。一致性较差,维护成本无。

2.超时剔除:

   给缓存添加TTL时间,到期自动删除缓存,下次查询自动更新缓存。一致性一般,维护成本低。

3.主动更行:

   每当修改数据库的同时,更新缓存。一致性好,维护成本高。

 主动更新策略

 1.删除缓存还是更新缓存

 一般会选择删除缓存。更新数据库时让缓存失效。查询时再更新缓存。

2,如何保证缓存和数据库的同时成功或失败?

单体系统:运用事务

分布式系统:利用TTC等分布式事务方案。

3.先操作缓存还是先操作数据库?(多线程并发)

考虑线程安全,两者都有数据错误的情况。后者发生概率较低。 

 

缓存穿透:

 解决方案 : 缓存空对象(实现简单,维护方便/额外的内存消耗,可能造成短期的不一致);

      布隆过滤:占用内存少,没有多余Key\实现起来相对复杂,存在误判可能。、

产生原因:

用户请求的数据在缓存和数据库中都不存在,不断发起会给数据库带来巨大压力。

缓存雪崩:

同一时间段有大量的缓存Key同时失效或者Redis服务宕机,导致大量请求到达数据库。

解决方案:设置不同过期时间。 利用Redis集群。给缓存业务添加降级限流。给业务添加多级缓存。

 

缓存击穿:热点Key问题  ,就是一个被高并发访问且缓存重建业务较复杂的Key失效了,无数的请求访问会瞬间给数据库带来巨大的冲击。

解决方案:

互斥锁:没有额外的内存消耗,保持一致性。实现简单||||||线程需要等待,可能有死锁

逻辑过期:线程无需等待,性能好//不保证一致性,有额外内存需求。实现复杂

posted on 2023-03-17 21:54  常乐°  阅读(16)  评论(0编辑  收藏  举报