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

***首先明确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数据,为产生的新数据腾出数据空间。***

刚开始写这玩意,知识有所欠缺,希望大家共同学习,共同进步

你可能感兴趣的:(Redis学习)