关于redis:redis优化bigkeyhotkey

48次阅读

共计 1061 个字符,预计需要花费 3 分钟才能阅读完成。

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 的办法

业务教训,比方明星、大 V 相干的 key 根本都是 hotkey。
在 redis 的 proxy 层做统计,毛病是有的 redis 集群可能没有 proxy。
redis 自带命令,比方 redis-cli –hotkeys 命令,会扫描所有 key 来找出 hotkey,毛病是当 key 比拟多时执行比较慢。
hotkey 优化办法

优化的关键点在于加重 hotkey 所在节点的压力。

服务器本地缓存:服务器把 hotkey 缓存在内存中,当用户申请 hotkey 时不须要拜访 redis,间接从内存查找、返回即可。
备份 hotkey:在所有节点上都备份这个 hotkey,各自加上一个序号后缀作为 key,用户申请 hotkey 时随机生一个后缀数字,而后拜访对应的节点。而且某个节点的 hotkey 过期后能够不读数据库,而是读其余节点以重建缓存。
过期工夫:设置 hotkey 永不过期,或者设置每个 hotkey 的备份的过期工夫不同,这样能够避免集中过期导致大量申请打到数据库上。

正文完
 0