关于Redis会回收超时key的存储空间的问题?

这里有一个问题需要讨论:如果key超时了,Redis会回收key的存储空间吗?

答案是不会。Redis的key超时不会被其自动回收,它只会标识哪些键值对超时了。
这样做的一个好处在于,如果一个很大的键值对超时,比如一个列表或者哈希结构,存在数以百万个元素,要对其回收需要很长的时间。如果采用超时回收,则可能产生停顿。坏处也很明显,这些超时的键值对会浪费比较多的空间。

Redis提供两个方式回收这些超时键值对,他们是定时回收惰性回收

  • 定时回收是指在确定的某个时间触发一段代码,回收超时的键值对
  • 惰性回收则是当一个超时的键,被再次用get命令访问时,将触发Redis将其从内存中清空

定时回收可以完全回收那些超时的键值对,但是缺点也很明显,如果这些键值对比较多,则Redis需要运行较长的时间,从而导致停顿。所以系统设计者一般会选择在没有业务发生的时刻触发Redis的定时回收,以便清理超时的键值对。

对于惰性回收而言,它的优势是可以指定回收超时的键值对,它的缺点是要执行一个莫名其妙的get操作,或者在某些时候,我们也难以判断哪些键值对已经超时。

猜你喜欢

转载自blog.csdn.net/u013435893/article/details/80658028
今日推荐