Redis在峰值负载时的表现如何?

bihw5rsg  于 2023-01-12  发布在  Redis
关注(0)|答案(1)|浏览(187)

似乎找不到答案,基准测试确实很有说服力。
Redis在高峰负载/使用量时如何处理?
这个问题来自于知道CPU使用率可能达到其逻辑核心的100%,或者内存可能过度使用。
在这些情况下会发生什么?

h79rfbju

h79rfbju1#

一般来说,Redis的CPU占用率并不高,当CPU占用率很高时,它会像其他应用程序一样运行,但这在很大程度上取决于您的Redis版本。
在Redis4.0之前,它完全是单线程的,长时间运行的操作会阻塞(比如后台保存,大对象的DEL等)从4.0开始,这些类型的操作大部分都被推到后台。使用bgsave命令保存到磁盘,Redis现在会自己分叉,并在子目录中进行保存。6.0做了一些改变,比如del命令现在可以作为unlink,并将实际的删除操作推送到一个线程。Redis 7.0版曾计划增加更多的多线程功能,但似乎这一功能被推到了7.2版。
然而最大的问题是达到最大系统内存,或者是Redis配置中的maxmemory指令。当这种情况发生时,Redis的回收策略开始发挥作用(由maxmemory-policy指令设置)。
以下是可用的驱逐策略及其作用:

  • noeviction:达到内存限制时不保存新值。当数据库使用复制时,这适用于主数据库
  • allkeys-lru:保留最近使用的密钥;删除最近最少使用(LRU)键
  • allkeys-lfu:保留常用键;删除最不常用(LFU)键
  • volatile-lru:删除过期字段设置为true的最近最少使用的密钥。
  • volatile-lfu:删除过期字段设置为true的最不常用密钥。
  • allkeys-random:随机删除键,为添加的新数据腾出空间。
  • volatile-random:随机删除过期字段设置为true的密钥。
  • volatile-ttl:删除过期字段设置为true且剩余生存时间(TTL)值最短的最不常用密钥。

从Redis 3.0到7.0版本,默认的maxmemory-policynoeviction。在2.8及更早版本中,默认值是volatile-lru
您可以阅读Key Eviction docs了解更多信息。

相关问题