Redis

关注公众号 jb51net

关闭
首页 > 数据库 > Redis > Redis大Key与热Key

Redis中大Key与热Key的解决方案

作者:醉鱼Java

在工作中Redis已经成为必备的一款高性能的缓存数据库,但是在实际的使用过程中,我们常常会遇到两个常见的问题,也就是文章标题所说的大 key与热 key,本文给大家介绍了Redis中大Key与热Key的解决方案,需要的朋友可以参考下

一、定义

1.1、什么是大key

1.2、什么是热key

key 的大与不大,热与不热要根据自己的业务,从实际情况进行评估。

二、影响

2.1、大 key 的影响

2.2、热 key 的影响

2.3、小结

大key热key 都会给 Redis 实例造成一系列的影响,如内存占用过高,CPU 负载增加,持久化时间变长,性能下降等。

三、原因分析

3.1、大 key 产生的原因

产生 大key 的原因有很多种,下面咱就一起看一下工作中经常遇到的这几种。

3.1.1、存储大量数据

存储了大量数据也是我们经常遇到 大key 的最多的原因了。

比如 String 类型直接保存了一个大的文本或者二进制数据;Hash 结构中存储大量的键值对

SET zuiyu_large_text_key "very large text content..."
HMSET zuiyu_large_hash_key field1 value1 field2 value2 ... fieldN valueN

3.1.2、缓存时间设置不合理

缓存时间设置不合理这个造成 大key 的原因大概是个隐藏挺深的老 bug,有的业务场景,使用 Redis 缓存数据,业务是定时往该 key 上写数据,由于该 key 是没有设置缓存时间的造成这个 key 随着时间的流逝,占用的内存越来越多,对于该点,只需要设置一个合理的过期时间即可。

前提是多次写入不是覆盖,而是追加才会有该问题。

SETEX zuiyu_key_with_expiry value 3600  # 设置过期时间为3600秒

3.1.3、数据结构使用不当

在使用 List 数据结构存储数据时,重复的添加数据,造成该 key 越来越大,实际上业务是不需要有重复的数据存在的。

LPUSH zuiyu_large_list_key value

3.1.4、小结

大key 的产生根本原因就是在一个 key 下面存储的数据多了。

3.2、热 key 产生的原因

3.2.1、热门数据

热key 的产生一般意味着系统访问火爆了,但是火爆的只是其中一个点或者n个点。类似微博中某个明星的瓜,当上头条的时候,大量的人去访问,造成了该明星所对应的 key 成为 热key

3.2.2、频繁的更新

某些业务场景,单位时间内一直频繁的对 key 进行更新,该 key 也会成为 热key

3.2.3、热门搜索

类似于第一中的热门数据,产生了热门数据,该数据对应的热门关键词也被大量的用户去搜索,造成该关键词被频繁访问,最终导致该 key 也称为 热key

3.2.4、小结

热key 的产生无外乎热门数据,热门数据产生的热门关键词以及对同一个 key 在某段时间内的频繁访问。

四、解决方案

4.1、大key的解决方案

4.2、热key的解决方案

将热点数据分散到不同的Redis实例,提升系统的吞吐量。

在系统启动或者活动高峰开启之前进行缓存预热,提前将需要的数据加载到缓存,减少热点数据首次访问的时间。

避免大量的key同一时间批量失效,造成缓存雪崩与缓存穿透。

使用布隆过滤器进行缓存请求过滤,防止无效请求进入到缓存层。

五、总结

针对 大key 我们要尽可能的避免同一个 key 下大量的数据。 针对 热key 我们要合理设置过期时间,增加布隆过滤器等技术实现无效请求过滤,对即将到来的数据进行缓存预热、热点数据分片处理。

以上就是Redis中大Key与热Key的解决方案的详细内容,更多关于Redis大Key与热Key的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文