简单认识redis - 8 redis淘汰和过期策略

过期策略

  • 设置过期时间
    • 在 Redis 中,可以为键设置过期时间。当设置了过期时间的键到期时,它会被自动删除。可以使用EXPIRE命令(以秒为单位设置过期时间)或PEXPIRE命令(以毫秒为单位设置过期时间)。例如:
      • SET key value
      • EXPIRE key 60:表示键key将在 60 秒后过期。
  • 过期检查方式
    • 定期删除 :Redis 会定期检查设置了过期时间的键。默认情况下,Redis 每秒会进行 10 次过期检查(可以通过配置文件中的hz参数调整检查频率,但不建议修改)。在每次检查时,Redis 会随机抽取一定数量的设置了过期时间的键,然后检查这些键是否已经过期,如果过期则删除。这种方式是一种近似的、随机的过期检查方式,不能保证所有过期的键会被立即删除。
    • 惰性删除:当客户端尝试访问一个键时,Redis 会先检查这个键是否已经过期,如果已经过期则直接删除该键,然后返回空值给客户端。这种方式确保只有当键被访问时才会检查其是否过期,避免了不必要的检查开销,但可能会导致一些过期的键仍然留在内存中一段时间,直到被访问。

淘汰策略

  • 淘汰策略类型

    • noeviction:这是默认的策略。当内存使用达到设置的上限时,Redis 不允许写入新数据,会返回错误信息。这种策略保证了数据不会因为内存不足而丢失,但可能会导致应用程序无法写入新数据。
    • volatile - lru:在设置了过期时间的键中,使用最近最少使用(LRU,Least Recently Used)算法进行淘汰。当内存不够时,会淘汰最近最少使用的设置了过期时间的键,以腾出空间给新的数据。
    • volatile - ttl:在设置了过期时间的键中,按照剩余存活时间(TTL,Time - To - Live)进行淘汰。优先淘汰那些剩余存活时间最短的设置了过期时间的键。
    • volatile - random:在设置了过期时间的键中,随机选择键进行淘汰。当内存不足时,随机选择一个设置了过期时间的键并将其删除。
    • allkeys - lru:使用 LRU 算法在所有的键(不管是否设置了过期时间)中进行淘汰。当内存不够时,会淘汰所有键中最近最少使用的键。
    • allkeys - random:在所有的键(不管是否设置了过期时间)中随机选择键进行淘汰。当内存不足时,随机选择一个键并将其删除。
  • 设置淘汰策略

    • 可以通过修改 Redis 的配置文件(redis.conf)来设置淘汰策略。例如,要设置为allkeys - lru策略,可以在配置文件中找到maxmemory - policy这一配置项,将其值修改为allkeys - lru。也可以在启动 Redis 时通过命令行参数来设置,如redis - server --maxmemory - policy allkeys - lru。

Redis 的过期和淘汰策略可以帮助有效地管理内存,确保在有限的内存资源下,既能满足数据的存储需求,又能保证系统的正常运行。

相关推荐
KIDULT°4 小时前
MySQL系列 (1):数据库原理
运维·数据库·mysql·云计算
我不是程序员三三4 小时前
透明加密软件偶发解密异常排错实录:文件时能打开时乱码
数据库·域智盾
snhna4 小时前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
天行健,君子而铎5 小时前
数据分类分级的范式转换:从规则匹配到场景化高准确率一键部署
网络·数据库·安全
牛战士coding5 小时前
MySQL 读写分离完整链路:主从复制、多数据源与 @DS 路由
数据库·mysql
goehou6 小时前
MCP 查数实战:让 LLM 安全地查数据库(只读账号、SQL 校验、参数漂移)
数据库·ai·llm·教程·mcp·function calling
我不会插花弄玉6 小时前
7.函数【由浅入深-MySQL】
android·数据库·mysql
周小董7 小时前
[1369]Windows上安装PostgreSQL
数据库·windows·postgresql
一只积极向上的小咸鱼9 小时前
第一性原理思考:从拆解问题到用实验检验答案
数据库
这个DBA有点耶9 小时前
时序数据库InfluxDB高基数问题深度拆解:内存索引膨胀机制与OOM完整链路
数据库·架构·dba