Redis防阻塞小知识

Redis在现在的互联网公司中广泛运用,要说有哪些公司再用的话,我想可以反问一句,还有那个公司没有用Redis吗?

之前Redis相关的知识有:
Redis Cluster集群快速搭建
基于Codis的Redis集群
Redis基本数据类型与使用场景

好吧,在生产环境上有时候数据量太大的话会导致Redis暂时阻塞,因为它是单线程的,这段时间会没有响应。
比如说使用Keys命令,在某一时间有大量的key过期。那么如何解决呢?

办法

  1. 假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如果将它们全部找出来?
    使用Scan命令,scan命令的时间复杂度虽然也是O(N),但它是分次进行的,不会阻塞线程。scan命令提供了limit参数,可以控制每次返回结果的最大条数。不过scan命令返回的结果有可能重复,因此需要客户端去重。


    Redis防阻塞小知识_第1张图片
    image.png

使用Scan命令就不会一下子返回大量的结果了。

  1. 如果有大量的key需要设置同一时间过期,一般需要注意什么?
    如果大量的key过期时间设置的过于集中,到过期的那个时间点,redis可能会出现短暂的卡顿现象。一般需要在时间上加一个随机值,使得过期时间分散一些。

最后

两个小知识点,记录一下

参考

  • 深入理解Scan命令
  • Scan命令官方解释

你可能感兴趣的:(Redis防阻塞小知识)