• 处理redis过期数据


    可以采用三种方法:

    定时删除、定期删除、惰性删除

    一、定时删除

    写一个定时器,将key的过期时间到达时,立刻将键删除

    优点:节约内存

    缺点:增加CPU压力,影响redis服务器响应时间和吞吐量

    二、定期删除

    activeExpireCycle()函数对每个expires(数据库)逐一进行检测
    对每个数据库检测时,随机挑选W个key检测
    1.如果key超时,删除key
    2.如果一轮中删除key的数量>W*25%,循环该过程(继续挑选w个key检测)
    3.如果一轮中删除key的数量<=W*25%,检查下一个数据库,一直这样循环
    4.W取值=ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP属性值
    参数current_db用于记录activeExpireCyle()进入哪个数据库执行,如果activeExpireCycle()执行时间到期,下次从current_db继续向下执行

    特点:随机抽查、重点抽查

    优点;检测频度可以自定义,内存占用不是很大

    缺点:清理不彻底

    三、惰性删除

    数据过期之后不处理,等下次查询的时候在删除

    优点:CPU占用不大

    缺点:内存占用很大,过期数据一直存在

    四、数据逐出策略

    执行所有命令的时候,都会检测内存是否充足

    不满足最低存储要求的时候,就会清理数据,清理数据的算法叫逐出算法

    如果逐出算法不能清理出足够的空间就会反复执行。当依然无法清理出空间的时候就会报错:

    (error)OOM command not allowed when used memory>'maxmemory'

    相关的配置:

    设置最大可使用内存     
    maxmemory      #占用物理内存的比例,默认值为0,表示不限制。生产环境中根据需求设定,通常设置在50%以上。
    
    每次随机选取待删除数据的个数
    maxmemory-samples    #选取数据时并不会全库扫描,导致严重的性能消耗,降低读写性能。因此采用随机获取数据的方式作为待检测删除数据
    
    选择删除策略
    maxmemory-policy     #达到最大内存后,对被挑选出来的数据进行删除的方式

    删除方式:

    检测易失数据(可能会过期的数据集server.db[i].expires)
    1.volatile-lru:挑选最近最早使用的数据淘汰
    2.volatile-lfu:挑选最近使用次数最少的数据淘汰
    3.volatile-ttl:挑选将要过期的数据淘汰
    4.volatile-random:任意选择数据淘汰
    
    检测全库数据(所有数据server.db[i].dict)
    5.allkeys-lru:挑选最近最早使用的数据淘汰
    6.allkeys-lfu:挑选最近使用次数最少的数据淘汰
    7.allkeys-random:任意选择数据淘汰
    
    放弃数据驱逐
    8.no-enviction(驱逐):禁止驱逐数据(redis4.0中默认策略),会引发错误OOM
    
    maxmemory-policy  volatile-lru
    记录编程的点滴,体会学习的乐趣
  • 相关阅读:
    学生信息录入(学号 姓名 成绩),并按学号查找。
    char、signed char、unsigned char的区别
    C语言-数组
    如何选取网站主要内容(转)
    git pull和git fetch的区别(转)
    yolov3训练
    Docker容器图形界面显示(运行GUI软件)的配置方法
    切换Ubuntu默认python版本的两种方法
    多用户远程linux+内网穿透工具frp使用详解
    pycharm远程调试docker containers
  • 原文地址:https://www.cnblogs.com/AduBlog/p/14411960.html
Copyright © 2020-2023  润新知