我是靠谱客的博主 虚拟夕阳,最近开发中收集的这篇文章主要介绍【Redis热点数据缓存】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我是????廖志伟????,一名????Java开发工程师????、????Java领域优质创作者????、????CSDN博客专家????、????幕后大佬社区创始人????。拥有多年一线研发经验,研究过各种常见框架中间件的底层源码,对于大型分布式微服务、三高架构(高性能高并发高可用)有过实践架构经验。

????博主:java_wxid
????博主:Java廖志伟
????社区:幕后大佬


文章目录

      • 互斥锁(mutex)
      • 永远不过期

本文内容:


redis

热点数据缓存

当前key是一个热点key(例如一个热门的娱乐新闻),并发量非常大重建缓存不能在短时间完成,可能是一个复杂计算,例如复杂的SQL、多次IO、多个依赖等在缓存失效的瞬间,有大量线程来重建缓存,造成后端负载加大,甚至可能会让应用崩溃。

互斥锁(mutex)

解决方案一:互斥锁(mutex)

只允许一个线程重建缓存,其他线程等待重建缓存的线程执行完,重新从缓存获取数据。

    1)从Redis获取数据,如果值不为空,则直接返回值;否则执行下面的2.1)和2.2)步骤
    2.1)如果set(nx和ex)结果为true,说明此时没有其他线程重建缓存, 那么当前线程执行缓存构建逻辑
    2.2)如果set(nx和ex)结果为false,说明此时已经有其他线程正在执 行构建缓存的工作,那么当前线程将休息指定时间(例如这里是50毫秒,取决于构建缓存的速度)后,重新执行函数,直到获取到数据。

优缺点:如果构建缓存过程出现问题或者时间较长,可能会存在死锁和线程池阻塞的风险,但是这种方法能够较好地降低后端存储负载,并在一致性上做得比较好。

永远不过期

解决方案二:永远不过期

从缓存层面来看,确实没有设置过期时间,所以不会出现热点key过期 后产生的问题,也就是“物理”不过期。

从功能层面来看,为每个value设置一个逻辑过期时间,当发现超过逻 辑过期时间后,会使用单独的线程去构建缓存。

优缺点:由于没有设置真正的过期时间,实际上已经不存在热点key产生的一系列危害,但是会存在数据不一致的情况,同时代码复杂度会增大。

问题:怎么知道哪些数据是热点数据?因为本地缓存资源有限,不可能把所有的商品数据进行缓存,它只会缓存热点的数据。那怎么知道数据是热点数据呢?

利用redis4.x自身特性,LFU机制发现热点数据。实现很简单,只要把redis内存淘汰机制设置为allkeys-lfu或者volatile-lfu方式,再执行./redis-cli --hotkeys会返回访问频率高的key,并从高到底的排序,在设置key时,需要把商品id带上,这样就是知道是哪些商品了。


总结

以上就是今天要讲的内容,还希望各位读者大大能够在评论区积极参与讨论,给文章提出一些宝贵的意见或者建议????,合理的内容,我会采纳更新博文,重新分享给大家。

????四连 关注????点赞????收藏⭐️留言????

感谢大家的支持,用心写博文分享给大家,你的支持(????点赞????收藏⭐️留言????)是对我创作的最大帮助。
????微信公众号:南北踏尘
????主页地址:java_wxid
????社区地址:幕后大佬

给读者大大的话

我本身是一个很普通的程序员,放在人堆里,除了与生俱来的????盛世美颜????、所剩不多的发量,就剩下180的大高个了。就是我这样的一个人,默默坚持写博文也有好多年了,有句老话说的好,????牛逼之前都是傻逼式的坚持????。希望自己可以通过大量的作品,时间的积累,个人魅力、运气和时机,可以打造属于自己的????技术影响力????。同时也希望自己可以成为一个????懂技术????,????懂业务????,????懂管理????的综合型人才,作为项目架构路线的总设计师,掌控全局的????团队大脑????,技术团队中的????绝对核心????是我未来几年不断前进的目标。


提示:以下都是资源分享,求个一键三连。

面试资料

福利大放送,????欢迎关注????点赞????收藏⭐️留言????,拜托了????,这对我真的很重要。
点击:面试资料
提取码:2021

200套PPT模板

福利大放送,????欢迎关注????点赞????收藏⭐️留言????,拜托了????,这对我真的很重要。
点击:200套PPT模板
提取码:2021

提问的智慧

福利大放送,????欢迎关注????点赞????收藏⭐️留言????,拜托了????,这对我真的很重要。
点击:提问的智慧
提取码:2021

Java开发学习路线

名称链接
JavaSE点击: JavaSE
MySQL专栏点击: MySQL专栏
JDBC专栏点击: JDBC专栏
MyBatis专栏点击: MyBatis专栏
Web专栏点击: Web专栏
Spring专栏点击: Spring专栏
SpringMVC专栏点击: SpringMVC专栏
SpringBoot专栏点击: SpringBoot专栏
SpringCould专栏点击: SpringCould专栏
Redis专栏点击: Redis专栏
Linux专栏点击: Linux专栏
Maven3专栏点击: Maven3专栏
Spring Security5专栏点击: Spring Security5专栏
更多专栏更多专栏,请到 java_wxid主页 查看

P5学习路线图
p5学习路线图P6学习路线图
P6学习路线图P7学习路线图
P7学习路线图P8学习路线图
P8学习路线图

以上四张图详细介绍了作为Java开发工作者所需要具备的知识技能,同学们学废了嘛,有想法系统学习的同学可以私聊我,????欢迎关注????点赞????收藏⭐️留言????。
????博主:java_wxid
????博主:Java廖志伟
????社区:幕后大佬

最后

以上就是虚拟夕阳为你收集整理的【Redis热点数据缓存】的全部内容,希望文章能够帮你解决【Redis热点数据缓存】所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(79)

评论列表共有 0 条评论

立即
投稿
返回
顶部