Redis big key

1、什么是 big key?

对于不同的数据类型,big key 定义不同:

  • 字符串类型:它的big体现在单个value值很大,一般认为超过10KB就是bigkey。
  • 非字符串类型:哈希、列表、集合、有序集合,它们的big体现在元素个数太多。建议把集合类型的元素个数控制在1万个以下。

2、 big key 的危害:

  • 影响性能,容易产生阻塞。
    • 在 Redis 基本 IO 模型中,主要是主线程在执行操作,任何耗时的操作,例如 bigkey、全量返回等操作,都是潜在的性能瓶颈。
    • AOF 重写过程中:主进程 fork 出后台的子进程会阻塞住子进程,阻塞时间取决于整个实例的内存大小。当主线程收到新写或修改的操作时,主线程会申请新的内存空间,用来保存新写或修改的数据,如果操作的是 bigkey,也就是数据量大的集合类型数据,那么主线程会因为申请大空间而面临阻塞风险。因为操作系统在分配内存空间时,有查找和锁的开销,这就会导致阻塞。
  • 造成网络拥塞:读取 bigkey 意味着需要消耗更多的网络流量,可能会对 Redis 服务器造成影响。
  • 过期删除:过期删除时,容易产生阻塞。
  • 迁移困难
  • 内存空间不均匀:比如在 Redis cluster 或者 codis 中,会造成节点的内存使用不均匀。

总结就是:bigkey 的读写操作会阻塞线程,降低 Redis 的处理效率 ​

阿里云建议:

当一个简单Key的Value过大或List、Hash等类型的数据中存储了大量的元素时,读取、删除这些数据的操作可能会花费过多的时间,阻塞单线程的Redis服务。此时您需要对内存结构进行优化,找出大Key并进行调整。

3、哪些场景下容易产生big key?

生产环境中遇到的几种不设置过期时间的情况:

  • 多个服务共享相同的配置,把配置存储到Redis中。

你可能感兴趣的:(Redis,redis)