• Redis之懒惰删除


    【懒惰删除】
    Redis内部利用单线程处理了绝大部分指令,但对于一些耗时的操作,还有几个异步线程在做支撑。对于大部分key来说,del指令非常快,但如果key的value是一个很大的对象,那么del就会造成卡顿,所以Redis4.0引入了unlink指令,可以对删除操作进行懒处理,即不立即进行删除操作,而是交给一个异步线程处理并回收内存。

    当执行unlink指令后,主线程不会再访问这个key,交给异步线程处理。
    【flush】
    Redis中的flushdb和flushall指令是极其缓慢的动作,Redis4.0后,在这两个指令后增加async操作,整个key集合即交给后台线程慢慢处理。
    【异步队列-LazyFree】
    主线程将对象的引用从key结构中摘除后,会将这个key的内存回收操作包装成一个任务,塞进异步任务队列中,后台线程会从这个异步队列中取任务。任务队列被主线程和异步线程同时操作,所以必须保证这个队列的线程安全。
    如果key所占用的内存很小,延后处理就没有必要了,此时Redis会直接回收。
    【异步队列-AOF Sync】
    Redis每1秒需要将AOF日志存到磁盘,确保尽量不丢消息,这个操作是比较耗时的,所以Redis也将这个操作移到异步线程来完成。执行AOF Sync操作的线程是一个独立的异步线程,和前面的LazyFree线程不一样,同样也有一个属于自己的任务队列,队列里只存放AOF Sync任务。
    【更多的异步删除处理】
    除了del指令和flush操作之外,Redis在key过期,LRU淘汰,rename指令过程也会实施回收内存。此外,还有一种特殊的flush操作,其发生于正在进行全量同步的从节点中,在接受完整的rdb文件后,也需要将当前的内存一次性清空,以加载整个rdb文件的内容到内存。
    打开这些点需要额外进行设置:
    slave-lazy-flush:从节点接收完rdb后的flush操作
    lazyfree-lazy-eviction:内存达到maxmemory时进行淘汰
    lazyfree-lazy-expire key:过期删除
    lazyfree-lazy-server-del rename:指令删除destKey

     
  • 相关阅读:
    Domino+Qucikplace+Sametime构建企业办公平台图文攻略(一)
    GridPanel如果不设宽度,在IE下会变得很宽问题解决
    Domino+Qucikplace+Sametime构建企业办公平台图文攻略(二)
    extjs可视化开发工具
    JSON
    Domino的命名空间
    封装的ExtGrid 实现增、删、改、查等功能
    lotus 附件的存、 取 、删
    asp.net DateTime的使用
    SQL Server里面可能经常会用到的日期格式转换方法
  • 原文地址:https://www.cnblogs.com/bruceChan0018/p/15772969.html
Copyright © 2020-2023  润新知