问题一:为什么集中过期大量 key 可能导致 Redis 延迟?
为什么集中过期大量 key 可能导致 Redis 延迟?
参考回答:
如果大量 key 在某个时间点集中过期,Redis 在执行主动过期任务时可能需要删除大量 key,尤其是当存在 bigkey 时,删除操作可能非常耗时。这会导致 Redis 主线程阻塞,从而延迟响应其他客户端请求。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/639450?spm=a2c6h.13148508.setting.17.5dce4f0ecB7Kky
问题二:Redis 主动过期任务是在哪个线程执行的?
Redis 主动过期任务是在哪个线程执行的?
参考回答:
Redis 主动过期任务是在主线程中执行的。这意味着在执行过期任务时,Redis 无法处理其他客户端请求,可能导致延迟。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/639451
问题三:当Redis作为纯缓存使用时,通常会如何设置其内存上限?
当Redis作为纯缓存使用时,通常会如何设置其内存上限?
参考回答:
当Redis作为纯缓存使用时,通常会设置一个内存上限maxmemory,然后配置一个数据淘汰策略来决定当内存达到上限时如何淘汰旧数据。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/639452
问题四:Redis有哪些数据淘汰策略?
Redis有哪些数据淘汰策略?
参考回答:
Redis的数据淘汰策略包括:
allkeys-lru:不管key是否设置了过期,淘汰最近最少访问的key。
volatile-lru:只淘汰最近最少访问、并设置了过期时间的key。
allkeys-random:不管key是否设置了过期,随机淘汰key。
volatile-random:只随机淘汰设置了过期时间的key。
allkeys-ttl:不管key是否设置了过期,淘汰即将过期的key。
noeviction:不淘汰任何key,实例内存达到maxmemory后,再写入新数据直接返回错误。
allkeys-lfu(4.0+版本支持):不管key是否设置了过期,淘汰访问频率最低的key。
volatile-lfu(4.0+版本支持):只淘汰访问频率最低、并设置了过期时间的key。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/639453
问题五:当Redis内存达到maxmemory后,淘汰数据的逻辑是怎样的?
当Redis内存达到maxmemory后,淘汰数据的逻辑是怎样的?
参考回答:
当Redis内存达到maxmemory后,淘汰数据的逻辑取决于配置的淘汰策略。以allkeys-lru和volatile-lru为例,Redis会每次从实例中随机取出一批key,然后淘汰一个最少访问的key,之后把剩下的key暂存到一个池子中,继续随机取一批key,并与之前池子中的key比较,再淘汰一个最少访问的key。以此往复,直到实例内存降到maxmemory之下。
关于本问题的更多回答可点击原文查看: