1、Redis Lazy Free 诞生背景

众所周知,Redis在处理客户端命令时是以单线程形式运行,虽然处理速度很快,但是命令执行期间不会响应其他客户端请求。随着互联网的发展,海量数据存储在Redis里面,如果客户端向Redis发送一条耗时较长的命令,比如删除一个含有上百万对象的set键,或者执行flushdb、flushall等操作,将会导致服务器卡顿好几秒,这将是一个巨大的灾难。毕竟,只有高负载的Redis才能有海量的数据,而针对海量数据的任何操作稍有不慎,将会在高负载的情况下被极端放大,从而造成灾难。为了解决这个问题,在Redis 4.0版本引入了Lazy Free,顾名思义,惰性释放。

需要提醒的一点是,对于大多数开发人员来说,使用Redis的程度并不深,了解Lazy Free特性即可,毕竟Lazy Free性能更像是运维人员的“专属”,不要越俎代庖,得不偿失。开发人员要明确自己的竞争力是什么,要有的放矢。

2、Redis Lazy Free参数设置

Redis 4.0新加了4个参数用来控制lazy free的行为

lazyfree-lazy-eviction:是否异步清除过期key。当内存达到上限,分配失败后,Redis就开始清除过期key。
lazyfree-lazy-expire:是否异步进行key过期事件的处理。
lazyfree-lazy-server-del:del命令是否异步执行删除操作,类似unlink。
replica-lazy-flush:replica client做全同步的时候,是否异步flush本地redis。

3、unlink命令的底层实现原理:Lazy Free

unlink命令为Redis4.0新加的命令,对一个key进行unlink操作,Redis主进程会将此key交给子线程去异步删。

后记:学习技术一定要做到取舍,如同本文所介绍的lazy free,它是运维人员的“专属”而非开发人员的核心竞争力。在互联网上和各家公众号上有无数的精品内容,但是没有人告诉你这些东西不需要学。很多人不懂取舍,人云己云,致使提升很慢,对此情况,站长收徒有明确的说明,欢迎大家的关注。

标签: none

[站长收徒]-[Java架构师学习指导]-[最后一次]


添加新评论