Redis03-过期策略和淘汰策略

目录

Redis数据过期策略

Redis数据淘汰策略


Redis数据过期策略

Redis使用一种基于过期策略来处理键的过期和自动失效。这种策略可以确保不再需要的数据被自动删除,以释放内存并避免数据过期后仍然在缓存中存留。

Redis的过期删除策略主要有两种:

  1. 惰性删除(Lazy Expiration):只在访问key的时候判断是否过期,如果过期就删除,不会主动检查。

    • 优点:对CPU友好,只在使用的时候检查是否过期。

    • 缺点:对内存不友好,即使过期了的Key也不会被删除,会浪费内存。

  2. 定期删除(TTL-Based Expiration):一段时间对数据库中的一些key进行检查,删除其中过期的key。

    定期删除有两种模式:

    SLOW模式是定时任务,执行频率是10hz(1秒10次),每次不超过25ms,可以通过redis.conf设置hz配置。

    FAST模式执行频率不固定,但两次间隔不低于2ms,每次耗时不超过1ms。

    • 优点:可以通过限制频率和时长减少删除操作对CPU的影响,定期删除也可以减少内存的占用。

    • 缺点:删除操作的频率和时长难以确定,短了消耗CPU,长了和惰性删除差不多,浪费内存。

Redis数据淘汰策略

Redis支持多种数据淘汰策略,用于管理内存中的数据,以便在内存不足时删除部分数据。

LRU(Least Recently Used,最近最少使用):当内存不足时,Redis会优先删除最久未被访问的键。

LFU(Least Frequently Used,最不经常使用):Redis会在内存不足时删除访问频率最低的键。

TTL(Time To Live,生存时间):当键的生存时间过期时,Redis会自动删除该键。

以下是Redis中常见的8种数据淘汰策略:

# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory
# is reached. You can select one from the following behaviors:
#
# volatile-lru -> Evict using approximated LRU, only keys with an expire set.
# allkeys-lru -> Evict any key using approximated LRU.
# volatile-lfu -> Evict using approximated LFU, only keys with an expire set.
# allkeys-lfu -> Evict any key using approximated LFU.
# volatile-random -> Remove a random key having an expire set.
# allkeys-random -> Remove a random key, any key.
# volatile-ttl -> Remove the key with the nearest expire time (minor TTL)
# noeviction -> Don't evict anything, just return an error on write operations.
  1. noeviction:不淘汰任何key,当内存满时不允许写入新数据。这是默认策略。(内存不足会报错的)

  2. volatile-ttl:对设置了TTL的key,计算剩余TTL值,越小的先被淘汰。

  3. volatile-lru:对设置了TTL的key,基于LRU算法进行淘汰。

  4. allkeys-lru:对所有的key,基于LRU算法进行淘汰。

  5. volatile-lfu:对设置了TTL的key,基于LFU算法进行淘汰。

  6. allkeys-lfu:对所有的key,基于LFU算法进行淘汰。

  7. volatile-random:对设置了TTL的key,随机淘汰。

  8. allkeys-random:对所有的key,随机淘汰。

使用建议:

  • 业务对缓存的数据有冷热数据区分的时候,建议使用allkeys-lru删除最久未被访问的key的策略。

  • 业务没有冷热数据区分,使用allkeys-random就行。

  • 业务中有置顶要求,可以设置volatile-lru,对置顶数据不设过期时间,这些数据就会一直保留。

  • 业务中有频率要求,可以使用volatile-lfu或者allkeys-lfu策略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/181921.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SpringSecuirty6.x】自动登录和注销登录

关于网站的安全设计,通常是有一些矛盾点的。我们在作为某些系统开发者的同时,也在充当着另外一些系统的用户,一些感同身受的东西可以带来很多思考。 5.1、为什么需要自动登录 当我们在某个网站上注册账号时,网站会对我们设置的登录密码提出要求。例如,有的网站要求使用固…

VS编译器中创建新源文件,自动添加----#define _CRT_SECURE_NO_WARNINGS 1

每次创建新的源文件时都需要添加比较麻烦,我们让每次创建时自动添加,步骤如下: 1、右键编译器--->属性--->目标(存放的是编译器的文件位置我们找到文件的位置) 2、如下步骤找到“newc file.cpp”文件&#xff0…

如何使用Ruby 多线程爬取数据

现在比较主流的爬虫应该是用python,之前也写了很多关于python的文章。今天在这里我们主要说说ruby。我觉得ruby也是ok的,我试试看写了一个爬虫的小程序,并作出相应的解析。 Ruby中实现网页抓取,一般用的是mechanize,使…

Linux安装配置awscli命令行接口工具及其从aws上传下载数据

官网技术文档有全面介绍:安装或更新 AWS CLI 的最新版本 - AWS Command Line Interface在系统上安装 AWS CLI。https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/getting-started-install.html#getting-started-install-instructionsawscli常用命令参考&…

深度学习之基于Tensorflow卷积神经网络花卉识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习是一种机器学习方法,它通过模拟人脑神经网络的结构和功能来实现对数据的自动分析和学习。卷积神…

ClickHouse 学习之基础入门(一)

第 1 章 ClickHouse 入 门 ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库(DBMS),使用 C 语言编写,主要用于在线分析处理查询(OLAP),能够使用 SQL 查询实时生成分析数据报告。 …

Linux环境基础开发工具使用(二)

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、Linux项目自动化构建工具-make/Makefile1、背景2、实例代码3、依赖关系4、依赖方法5、原理…

【Head First 设计模式】-- 策略模式

一、背景 Head First 设计模式第一章设计模式入门–策略模式 二、工具箱的工具(本章) 1、OO基础 封装 继承 多态 抽象 2、OO原则 封装变化 面向接口编程,而非面向实现编程 组合优于继承 3、OO模式 策略模式,所谓策略模式就是定义…

spring-boot中实现分片上传文件

一、上传文件基本实现 1、前端效果图展示&#xff0c;这里使用element-ui plus来展示样式效果 2、基础代码如下 <template><div><el-uploadref"uploadRef"class"upload-demo":limit"1":on-change"handleExceed":auto-…

【算法】单调栈 每日温度 接雨水

文章目录 例题739. 每日温度42. 接雨水 相关练习1475. 商品折扣后的最终价格901. 股票价格跨度1019. 链表中的下一个更大节点84. 柱状图中最大的矩形 单调栈【基础算法精讲 26】 例题 739. 每日温度 https://leetcode.cn/problems/daily-temperatures/description/ 提示&a…

Git 的基本操作 ——命令行

Git 的工作流程 详解如下&#xff1a; 本地仓库&#xff1a;是在开发人员自己电脑上的Git仓库,存放我们的代码(.git 隐藏文件夹就是我们的本地仓库) 远程仓库&#xff1a;是在远程服务器上的Git仓库,存放代码(可以是github.com或者gitee.com 上的仓库,或者自己该公司的服务器…

php去除字符串两边空格空字符串换行方法

在PHP中&#xff0c;可以使用以下几种方法去除字符串两边的空格、空字符串和换行符&#xff1a; 使用trim()函数去除字符串两边的空格和空字符串&#xff0c;例如&#xff1a; $str " Hello World! "; $trimmed trim($str); echo $trimmed; 使用preg_replace(…

Angular-07:组件生命周期

三个阶段&#xff1a; ① 挂载阶段1.1 constructor1.2 ngOnInit ② 更新阶段2.1 ngOnChanges2.2 ngAfterViewInit2.3 ngAfterContentInit2.4 ngDoCheck ③ 卸载阶段3.1 onOnDestroy ④ 在组件中添加所有方法并打印 该表按照执行顺序编写 编号函数名实现名说明1constructorcons…

Java 开发常用的 Linux 命令

基本操作 Linux关机,重启 # 关机 shutdown -h now# 重启 shutdown -r now查看系统,CPU信息 # 查看系统内核信息 uname -a# 查看系统内核版本 cat /proc/version# 查看当前用户环境变量 envcat /proc/cpuinfo# 查看有几个逻辑cpu, 包括cpu型号 cat /proc/cpuinfo | grep name …

【Spring Boot 源码学习】JedisConnectionConfiguration 详解

Spring Boot 源码学习系列 JedisConnectionConfiguration 详解 引言往期内容主要内容1. RedisConnectionFactory1.1 单机连接1.2 集群连接1.3 哨兵连接 2. JedisConnectionConfiguration2.1 RedisConnectionConfiguration2.2 导入自动配置2.3 相关注解介绍2.4 redisConnectionF…

FreeRTOS笔记【一】 任务的创建(动态方法和静态方法)

一、任务创建和删除API函数 函数描述xTaskCreate()使用动态的方法创建一个任务xTaskCreateStatic()使用静态的方法创建一个任务xTaskCreateRestricted()创建一个使用MPU进行限制的任务&#xff0c;相关内存使用动态内存分配vTaskDelete()删除一个任务 二、动态创建任务 2.1 …

C语言——选择排序

完整代码&#xff1a; //选择排序 // 选择排序是一种简单直观的排序算法。它的工作原理如下:首先在未排序序列中找到最小&#xff08;大&#xff09;元素&#xff0c;存放到排序序列的起始位置&#xff0c;然后&#xff0c;再从剩余未排序元素中继续寻找最小&#xff08;大&am…

已完结,给小白的《50讲Python自动化办公》

大家好&#xff0c;这里是程序员晚枫&#xff0c;小红薯也叫这个名。 写在前面 上个周末去成都参加了第8届中国开源年会&#xff0c;认识了很多行业前辈和优秀的同龄人。 我发现在工作之外还能有一番事业的人&#xff0c;都有一个让我羡慕的共同点&#xff1a;有一个拿得出手…

Ubantu安装教程(其实和之前CentOS差不多)

文章目录 VM安装见下方参考链接Ubuntu安装我的是Ubuntu22.04.3官网下载我下载的桌面版LTS代表长期支持-这意味着五年的免费安全和维护更新选好版本点击下载就好&#xff08;注意桌面版和服务器版&#xff09; 搭建虚拟机个性化名字自定义安装位置不知道就先默认就好&#xff0c…

Java与Redis的集成

目录 Java连接Redis 导入依赖 Redis服务器准备 建立连接 Java操作Redis常用类型数据 Redis字符串(String) Redis哈希(Hash) Redis列表&#xff08;List&#xff09; Redis集合&#xff08;Set&#xff09; Redis有序集合&#xff08;Sorted Set&#xff09; Redis在项目应用…