资讯专栏INFORMATION COLUMN

redis相关问题

mist14 / 3142人阅读

摘要:若其他线程发现获取锁失败,则睡眠后重试。容易造成死锁问题布隆过滤器,迅速判断一个元素是否在一个集合中。将已存在的缓存放到布隆过滤器中,当黑客访问不存在的缓存时迅速返回避免缓存及挂掉。

redis理解

A.执行流程

缓存雪崩

A. 触发缓存雪崩的两种情况

    redis挂了,请求全走数据库

    对缓存数据设置了相同的过期时间,导致某段时间,缓存全部同时失效,请求全走数据库

B. 解决方案

    缓存的过期时间加上一个随机值,就可以减少缓存在同一时间过期。

    假如redis真的挂啦,可以设置本地缓存+限流,避免redis挂了。假如挂了,redis持久化,重启后自动从磁盘上加载数据,快速恢复缓存数据。

缓存穿透

A. 触发缓存穿透情况

    请求的数据在缓存大量不命中【负数】,导致请求走数据库。

B. 解决方案

    因为请求参数是不合法,我们可以用过滤器进行拦截,不合法就不让这个请求到数据库层!

    当数据库找不到,我们可以将空对象设置到缓存里面,下次请求从缓存中获取。【这个缓存时间可以设短一点】

缓存击穿

A. 触发缓存击穿情况

    缓存在某个时间点过期的时候,恰好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。

B. 解决方案

    使用互斥锁。在根据key获得的value值为空时,先锁上,再从数据库加载,加载完毕,释放锁。若其他线程发现获取锁失败,则睡眠50ms后重试。【容易造成死锁问题】

    布隆过滤器,迅速判断一个元素是否在一个集合中。【将已存在的缓存放到布隆过滤器中,当黑客访问不存在的缓存时迅速返回避免缓存及DB挂掉。】

未完待续

参考掘金大佬博客

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/7238.html

相关文章

  • SegmentFault 技术周刊 Vol.37 - 分布式缓存利器:Redis

    摘要:持久化到中反向代理的负载均衡基于的集群搭建如何实现从中订阅消息转发到客户端的扩展是阻塞式,使用订阅发布模式时,会导致整个进程进入阻塞。缓存是用于解决高并发场景下系统的性能及稳定性问题的银弹。 showImg(https://segmentfault.com/img/bVYE6k?w=900&h=385); Redis 是由意大利程序员 Salvatore Sanfilippo(昵称:a...

    binaryTree 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<