• redis内存淘汰策略


    Redis key的过期时间和永久有效分别怎么设置?
    EXPIRE和PERSIST命令。

    EXPIRE:到期的意思;用于设置过期时间的。
    PERSIST:继续存在的意思;用于设置永久有效的。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    即没有配置的话,默认是我们主机的最大内存。
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    通过命令来配置redis占用的内存大小:

    config set maxmemory 大小
    config get maxmemory

    在这里插入图片描述
    查看内存使用情况:info memory
    在这里插入图片描述

    redis内存打满的情况:如:
    在这里插入图片描述
    在这里插入图片描述

    缓存过期淘汰策略:
    在这里插入图片描述

    三种不同的过期键的删除策略:

    我们都知道,Redis是key-value数据库,我们可以设置Redis中缓存的key的过期时间。Redis的过期策略就是指当Redis中缓存的key过期了,Redis如何处理。

    在这里插入图片描述

    过期策略通常有以下三种:

    注意;Redis中同时使用了惰性删除和定期删除两种过期策略

    第一种:定时删除

    定时删除即到期立即清除

    定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除

    该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。

    在这里插入图片描述
    定时删除总结:

    在这里插入图片描述

    第二种:惰性删除

    惰性删除:用的时候判读是否过期,过期则删除,不过期则使用

    原理:惰性删除不在是redis去主动删除,而是在你要获取某个key 的时候,redis会先去检测一下这个key是否已经过期,如果没有过期则返回给你,如果已经过期了,那么redis会删除这个key,不会返回给你。

    该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。

    在这里插入图片描述
    在这里插入图片描述

    第三种:定期删除:

    redis 会将每个设置了过期时间的 key 放入到一个独立的字典中,以后会定期遍历这个字典来删除到期的 key

    Redis 默认会每秒进行十次过期扫描(100ms一次),过期扫描不会遍历过期字典中所有的 key,而是采用了一种简单的贪心策略。

    1.从过期字典中随机 20 个 key;

    2.删除这 20 个 key 中已经过期的 key;

    3.如果过期的 key 比率超过 1/4,那就重复步骤 1;

    redis默认是每隔 100ms就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除。注意这里是随机抽取的。为什么要随机呢?假如 redis 存了几十万个 key ,每隔100ms就遍历所有的设置过期时间的 key 的话,就会给 CPU 带来很大的负载。

    Redis中同时使用了惰性删除和定期删除两种过期策略

    在这里插入图片描述

    在这里插入图片描述

    2.为什么需要淘汰策略

    有了以上过期策略的说明后,就很容易理解为什么需要淘汰策略了,因为不管是定期采样删除还是惰性删除都不是一种完全精准的删除,就还是会存在key没有被删除掉的场景,所以就需要内存淘汰策略进行补充。

    内存淘汰策略:
    在这里插入图片描述

    在这里插入图片描述

    生产上常用的是:
    在这里插入图片描述

    配置:
    方式一:
    在这里插入图片描述

    方式二:
    在这里插入图片描述

  • 相关阅读:
    数据库迁移之liquibase-CLI
    Oracle到PostgreSQL的不停机数据库迁移
    OFDM同步--符号定时偏差STO
    数据库学习之B-树
    修复微信小程序不能获取头像和昵称的bug,微信小程序新版头像昵称API使用
    使用vs2022编译assimp,并基于OpenGL加载模型
    记一次To B开发普通的性能优化历程......报表优化
    二叉树的中序遍历三种解法(递归+迭代+线索化)
    SpringBoot面试
    centos部署nginx集群
  • 原文地址:https://blog.csdn.net/weixin_38568503/article/details/125429132