懒惰删除和redis中的特殊线程

 ̄綄美尐妖づ 提交于 2019-11-29 18:23:09

懒惰删除和redis中的特殊线程

懒惰删除

删除key的指令是del,如果key非常大,这个指令就会卡顿,此时可以用unlink,它会将删除丢给后台进程异步回收内存,在执行的一瞬间,其他客户端就无法访问到该key了。(如果key很小就会立刻删除)

删除任务会塞进异步任务队列(主线程操作这个队列时会有加锁和解锁操作,如果异步线程在休眠的话还会唤醒),后台线程会依次处理这些任务。

异步清空数据库

flushdb和flushall命令用来清空数据库,但是也很耗时,可以用async来代替异步删除。

AOF刷磁盘

在进行AOF时,将内存中的数据刷新到磁盘的sync函数也是很耗时的,会导致主线程效率下降,所以redis也会使用一个异步线程来操作这个过程,它也有一个属于自己的任务队列。

其他异步操作

还有很多的删除:淘汰时、过期时、rename时这些都可以通过配置来异步完成。

异步删除方案在最初设计时并没有考虑到,是后来才改造的,因为redis的对象共享机制,导致懒惰删除不干净,为了支持懒惰删除,redis将这种机制抛弃,改用了无共享设计。

其他异步操作:主从同步的增量同步

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!