redis热点数据

热点数据的存放

  • 场景:
    数据库中有2000w数据,而redis中只有100w数据,如何保证redis中存放的都是热点数据?
  • 方案:
    限定redis占用的内存,redis会根据自身数据淘汰策略,留下热数据到内存。所以可以计算100w数据大约占用的内存,然后设置一下redis内存限制即可,并将淘汰策略设置为allkeys-lru或者volatile-lru.
  • 设置redis最大占用内存:
        打开redis配置文件,设置maxmemory参数,maxmemory是bytes字节类型哦!
        maxmemory 268435456

  • 设置过期策略:
        maxmemory-policy volatile-lru

实际场景:

redis用作缓存

提供一种简单实现缓存失效的思路: LRU(最近少用的淘汰)
redis的缓存每命中一次,就给命中的缓存增加一定ttl(过期时间)(根据具体情况来设定, 比如10分钟).
一段时间后, 热数据的ttl都会较大, 不会自动失效, 而冷数据基本上过了设定的ttl就马上失效了.

统计过去24h活跃用户(zset)

比如用户数据。数据库有2000w条。使用 redis sortSet里 放两天内(为方便取一天内活跃用户)登录过的用户,登录一次ZADD一次,如set已存在则覆盖其分数(登录时间)。键:login:users,值:分数 时间戳、value userid。设置一个周期任务,比如每天03:00:00点删除sort set中前一天3点前的数据(保证set不无序增长、留近一天内活跃用户)。
取时,拿到当前时间戳(int 10位),再减1天就可按分数范围取过去24h活跃用户。

怎么发现热key

方法一:凭借业务经验,进行预估哪些是热key
其实这个方法还是挺有可行性的。比如某商品在做秒杀,那这个商品的key就可以判断出是热key。缺点很明显,并非所有业务都能预估出哪些key是热key。
方法二:在客户端进行收集
这个方式就是在操作redis之前,加入一行代码进行数据统计

高频访问热key的解决方案

如何解决?
目前业内的方案有两种.

利用二级缓存

利用guavacache作为二级缓存。
存在问题,guavacache二级缓存可能撑爆了,此时也可以对guavacache设置淘汰策略,
1.基于存储数目,最大能存储多少条值。超过后按照LRU算法清楚
2.基于数据访问,设置过期时间,多久没访问就过期
3.基于数据更新,设置过期时间,多久没更新就过期
4.将key设置为软引用,当内存不足,发生gc的时候,会回收

备份热key

将数据存储在多个redis节点,查询之后从多个redis节点查询。比如当我采用redis cluster集群时候,在代码层面,将key后面加上机器的ip,然后经过hash,对16384取模运算之后,再加入到redis的槽中,就比较均匀,此时可以再次取数据。

  • 7
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EmineWang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值