Redis - 扩展 - 懒惰删除

Redis内部并不是只有一个主线程,他还有几个异步线程专门用来处理一些耗时的操作。

1、Redis使用懒惰删除

删除指令del会直接释放对象的内存,如果删除的key是一个非常的对象,那么删除操作旧会导致单线程卡顿,为了解决卡顿的问题,Redis在4.0中引入unlink指令,对删除指令懒处理,让后台线程来处理。

2、flush

Redis提供了flushdb和flushall指令,来清空数据库,Redis4.0同样给这俩个指令带来了异步处理,只要在指令的后面增加async参数

3、异步队列

    主线程将对象的引用摘除后,会将这个key的内存回收操作包装成一个任务,放入异步任务队列,后台线程从这个异步队列中取任务,不是所有的unlink操作都会延后处理,如果对应的key所占用的内存很小,Redis会将对应的key内存立刻回收,和del指令一样。

4、AOF Sync

Redis需要定时同步AOF日志到磁盘,确保消息尽量不丢失,需要调用sync函数,执行AOF Sync的操作线程也是一个独立的异步线程,他有一个属于自己的任务队列,队列中只存放AOF Sync的任务。

5、其他一些异步操作

Redis4.0通过配置选项,可以对下面的操作进行异步操作。

1)slave-lazy-flush 从库接受完 rdb 文件后的 flush 操作

2)lazyfree-lazy-eviction 内存达到 maxmemory 时进行淘汰

3)lazyfree-lazy-expire key 过期删除

4)lazyfree-lazy-server-del  rename 指令删除 destKey

你可能感兴趣的:(java基础,缓冲)