Redis 缓存过期及删除

一、Redis缓存过期策略

物理内存达到上限后,像磁盘空间申请虚拟内存(硬盘与内存的swap),甚至崩溃。

内存与硬盘交换 (swap) 虚拟内存,频繁I0 性能急剧下降,会造成redis内存急剧下降;

一般设置物理内存的3/4,在redis.conf中

maxmemory 1024mb

二、过期时间

2.1 数据结构原理

声明数据expires来存储过期时间,redis使用c语言开发,dict是字典,存储key-value结构,类似于map

1、dict 用来维护一个Redis 数据库中包含的所有 Key-Value 键值对。

2、expires则用于维护一个 Redis 数据库中设置了失效时间的键(即key与失效时间的映射)。

3、执行过程:当我们使用 expire命令设置一个key的失效时间时,Redis 首先到dict这个字典表中查找要设置的key是否存在,如果存在就将这个key和失效时间添加到expires这个字典表

当我们使用 setex命令向系统插入数据时,Redis 首先将 Key 和 Value 添加到dict这个字典表中,然后将Key和失效时间添加到expires这个字典表中。
4、设置了失效时间的key和具体的失效时间全部都维护在expires这个字典表中。

2.2 设置超时时间

设置超时时间:

set name:2 111 PX 3000

三、过期key的删除策略

3.1 惰性删除

在key被访问时如果发现它已经失效,那么就删除它,调用expirelfNeeded函数,该函数的意义是: 读取数据之前先检查一下它有没有失效,如果失效了就删除它。

3.2 主动删除

3.2.1 删除策略介绍

触发时机:当内存超过maxmemory限定时,触发主动清理策略,该策略由启动参数的配置决定。

策略种类:主动删除策略LRU,LFU,random,ttl,noenviction。

在redis.conf文件中可以配置主动删除策略,默认是no-enviction (不删除)

maxmemory-policy alTkeys-Tru

3.2.2 LRU

LRU(Least recently used)最近最少使用(类似java的linkedHashMap),删除不经常被访问的数据。最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:

1.新数据插入到链表头部;

2.每当缓存命中 (即缓存数据被访问) ,则将数据移到链表头部

3.当链表满的时候,将链表尾部的数据丢弃。

3.2.3 LFU

从已设置过期时间的数据集挑选使用频率最低的数据淘汰。

3.2.4 ttl

从已设置过期时间的数据集中挑选将要过期的数据淘汰。

3.2.5 volatile-random

从已设置过期时间的数据集中任意选择数据淘汰。

3.2.6 noenviction

Redis 的默认策略。在内存超过阀值后,Redis 不做任何清理工作,然后对所有写操作返回错误,但对读请求正常处理。

3.2.7 可参考连接

面试官,请不要再问我 Redis 的淘汰策略了!_杨同学technotes的博客-CSDN博客

相关推荐
轻刀快马几秒前
Redis 架构进阶:全景解析 RDB、AOF 与混合持久化机制
redis
zuYM4g7Dp1 小时前
NoSql数据库设计心得
数据库·nosql
睡不醒男孩0308233 小时前
第七篇:揭秘 PostgreSQL 数据库内核级管控:CLup 深度架构设计与高可用底座技术白皮书
数据库·postgresql·clup
cmes_love3 小时前
Level 2逐笔成交历史数据下载方法笔记
数据库·笔记·oracle
swordbob4 小时前
MySQL字符集陷阱:从Oracle迁移踩坑到utf8mb4强制规范
数据库·sql
牛油果子哥q4 小时前
【C++ STL string 】C++ STL string 终极精讲:底层原理、内存机制、全套API、深浅拷贝、易错坑点与工程实战规范
数据库·c++
十五年专注C++开发4 小时前
MySql中各种功能用sql语句实现总结
数据库·sql·mysql
数据库小学妹4 小时前
AI时代数据库怎么选?多模融合、数据统一存储与选型实战指南
数据库·人工智能·经验分享·ai
Albert Edison4 小时前
【Redis】Centos7.9 安装 Redis 5 教程
数据库·redis·缓存
云计算磊哥@5 小时前
运维开发宝典026-MySQL02数据库表操作
运维·数据库·运维开发