Redis缓存数据库热点数据处理

该博客探讨了如何在Redis中管理热点数据。当用户请求数据时,若Redis中不存在,会从Mysql获取并存入Redis。当Redis达到预设的1W数据上限时,会触发淘汰策略,如volatile-lru、volatile-ttl等。为了确定热点数据,作者建议使用zset数据类型存储点击次数作为score,并通过另一zset记录时间戳来考虑时效性。后台任务定期清理未点击的数据,保持缓存空间给新的热门数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

***首先明确Redis数据缓存的作用以及大致流程***

当用户请求到达时,首先用户访问的是Redis缓存数据库(读操作),当Redis中无用户查询数据时,会进行数据库的访问(我使用的是Mysql数据库)。
那么疑问来了,很多时候,大家都在说Redis中存放的数据为热点数据,只是一种缓存技术,并不能充当数据库使用,那么是如何,判别,Redis中数据为热点数据。
首先当用户进行(读操作)请求的时候,数据会存放至Redis中,比如Redis存放数据上限为1W数据,当数据达到上线,会触发Redis中的淘汰策略,具体为
*****这就是六种淘汰策略*****
voltile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
no-enviction(驱逐):禁止驱逐数据

***但是我认为有欠缺,进行查找资料  这样更适合小白理解

热点数据排序(点击次数)
既然热门数据,那么就需要有排序,使用redis中的zset数据类型是很自然的想法。数据中的某个唯一字段作为zset中的value,而点击次数作为score,记为click_zset。这样就可选出最热门的数据。而数据,则直接用HashMap存储。
热点数据时间(近期访问)
既然只能存1w条数据且需要是热门数据,那么,点击次数是一方面,时效性也是一方面,如何保证?可以另起一个zset,数据的字段为value,而每次点击时更新当前时间戳为其score,记为time_zset这样,就可以记录时间。在后台跑一个任务,间隔一定时间段删除两个zset中长时间没有发生点击事件的键,并删除hash数据,为产生的新数据腾出数据空间。***

刚开始写这玩意,知识有所欠缺,希望大家共同学习,共同进步
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值