[镜像] 练习-Redis 缓存击穿解决方案

镜像 海牛博士 ⋅ 于 2024-12-31 11:35:54 ⋅ 35 阅读

镜像详情地址:https://cloud.hainiubl.com/#/excellentImageDetail?id=24929&imageType=excellent

点击镜像详情页面最下方的“添加到实验配置”按钮可直接运行该实战镜像

一、需求说明

在开发中,热点缓存失效问题确实是一个常见且棘手的挑战。特别是在高并发的情况下,当热点商品地址数据的缓存失效时,所有请求都会直接到数据库,可能导致性能下降甚至宕机。该案例使用 JDHotKey 计算出热点商品并将热点商品缓存到jvm中,从jvm中获取缓存数据来解决缓存击穿问题。

二、环境介绍

机器介绍

  • 缓存击穿镜像:共需要4台机器
    1. 一台12核16GB内存的机器:Idea、Etcd、Work、Dashboard
    2. 一台1核1G内存的机器:Mysql
    3. 一台1核1GB内存的机器:Redis
    4. 一台2核2GB内存的机器:Jmeter

流程介绍

  • 解决缓存击穿问题

file

组件介绍

  • 该案例采用SpringBoot+MyBatis+Redis+数据库(MySQL)来演示设置缓存TTL的方式来还原热点数据在过期场景

  • 采用SpringBoot+MyBatis+Redis+JDHotKey+数据库(MySQL)来演示解决热点缓存失效问题

  • etcd:存放规则配置和各work的ip地址

  • work:定期上报⾃⼰的ip信息到etcd,供client端获取地址并进⾏⻓连接。对各个client发来的待测key进⾏累加计算,当达到etcd⾥设定的rule阈值后,将热key推送各个client。

  • dashboard:是⼀个带可视化界⾯的Java程序,连接到etcd,之后在控制台设置各个APP的key规则。当work探测出来热key后,会将key发往etcd,dashboard也会监听热key信息,进⾏⼊库保存记录。

  • JDHotKey:对任意突发性的无法预先感知的热点请求,包括并不限于热点数据(如突发大量请求同一个商品)、热用户(如爬虫、刷子)、热接口(突发海量请求同一个接口)等,进行毫秒级精准探测到。然后对这些热数据、热用户等,推送到该应用部署的所有机器JVM内存中,以大幅减轻对后端数据存储层的冲击,并可以由客户端决定如何使用这些热key(譬如对热商品做本地缓存、对热用户进行拒绝访问、对热接口进行熔断或返回默认值)。这些热key在整个应用集群内保持一致性。
  • jmeter:是一款压力测试软件,模拟高并发请求
您没有该镜像的运行权限,所以无权查看该笔记

版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海汼部落-海牛博士,http://hainiubl.com/topics/76601
点赞
成为第一个点赞的人吧 :bowtie:
回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter