redis优化(bigkey、hotkey)

bigkey优化

什么是bigkey

bigkey是指某个key的value太大,分成两种情况

  • 字符串类型:它的big体现在单个value值很大,一般认为超过10KB就是bigkey。比如说把文章正文甚至小说全文都缓存进redis了。
  • 非字符串类型:哈希、列表、集合、有序集合,它们的big体现在元素个数太多。比如通过hash的方式来存储每一天用户订单次数。其中key = 日期,field = 用户id,value = 用户订单数。那么如果一天有上千万个用户下订单,那么field就会非常多,存储空间也很大,造成所谓的大key。

redis本身已经提供了查找bigkey的命令。

bigkey的危害

读写bigkey可能会导致超时,而redis是单线程操作数据,严重的会导致阻塞整个redis服务。而且一个key只会被分片到一个节点,无法分摊读写压力。

bigkey优化方法

  • 对于string类型,应该避免存入过大的字符串,比如不要把文章正文放入redis之类的。
  • 对于其他类型,应该尽量减少成员数,可以对元素集合进行分割。比如在hash的field过多的情况下,可以对field进行rehash,并且对1000取模,然后作为原key的后缀,生成1000个新的key,这些key还可以被分片到其他节点,分摊读写压力。

hotkey优化

hotkey的危害

hotkey就是访问量大的key,由于一个key只能被分片到一个节点,因此短时间集中访问hotkey会压垮该redis节点,而接下来的请求会打到数据库上,压垮整个服务。

发现hotkey的方法

  1. 业务经验,比如明星、大V相关的key基本都是hotkey。
  2. 在redis的proxy层做统计,缺点是有的redis集群可能没有proxy。
  3. redis自带命令,比如redis-cli –hotkeys命令,会扫描所有key来找出hotkey,缺点是当key比较多时执行比较慢。

hotkey优化方法

优化的关键点在于减轻hotkey所在节点的压力。

  1. 服务器本地缓存:服务器把hotkey缓存在内存中,当用户请求hotkey时不需要访问redis,直接从内存查找、返回即可。
  2. 备份hotkey:在所有节点上都备份这个hotkey,各自加上一个序号后缀作为key,用户请求hotkey时随机生一个后缀数字,然后访问对应的节点。而且某个节点的hotkey过期后可以不读数据库,而是读其他节点以重建缓存。
  3. 过期时间:设置hotkey永不过期,或者设置每个hotkey的备份的过期时间不同,这样可以防止集中过期导致大量请求打到数据库上。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值