redis内存上限的处理策略

2024-01-20 15:04

本文主要是介绍redis内存上限的处理策略,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 一、前言

      在 Redis 中,maxmemory 是一个用于设置 Redis 内存使用的上限的配置项。当 Redis 的内存占用达到 maxmemory 时,需要采取一些策略来处理新写入的数据以及对现有数据的读取和删除。这些策略可以通过配置 maxmemory-policy 来指定

二、策略

 volatile-lru: 从已设置过期时间的键中挑选最近最少使用的键进行删除。这个策略主要用于删除具有过期时间的键,以腾出空间

allkeys-lru: 从所有键中挑选最近最少使用的键进行删除。不考虑键是否设置了过期时间,对所有键都适用

volatile-random: 从已设置过期时间的键中随机选择一个进行删除。同样,这个策略也主要用于处理带有过期时间的键

allkeys-random: 从所有键中随机选择一个进行删除。与 volatile-random 类似,不考虑键是否设置了过期时间

volatile-ttl: 从已设置过期时间的键中挑选将要过期的键进行删除。删除的是即将到期的键,以腾出空间

noeviction: 不删除任何键,当达到 maxmemory 时,新写入的操作会得到错误响应。这种策略适用于确保 Redis 不会删除任何数据,而是拒绝写入以确保数据完整性的场景

volatile-lfu: 从已设置过期时间的键中挑选最少使用的键进行删除。与 LRU 类似,但基于键的访问频率(LFU 算法)

allkeys-lfu: 从所有键中挑选最少使用的键进行删除。考虑所有键的访问频率,不考虑是否设置了过期时间

可以根据开发人员的要求选择适合的策略,以下是在redis配置文件夹中的使用示例

maxmemory 3G                #建议设置为最大内存的四分之三
maxmemory-policy volatile-lru      #配置清理策略

如果在 Redis 中达到 maxmemory 而没有配置任何删除策略 (maxmemory-policy 未配置或配置为 noeviction),所有新的写入操作(SET、INCR、LPUSH等)将会失败,返回错误信息,指示 Redis 已经达到内存限制。读取操作(GET、LRANGE等)仍然是可以执行的,因为这些操作不会导致额外的内存占用

这篇关于redis内存上限的处理策略的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/626399

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

JVM内存调优原则及几种JVM内存调优方法

JVM内存调优原则及几种JVM内存调优方法 1、堆大小设置。 2、回收器选择。   1、在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。   2、对JVM内存的系统级的调优主要的目的是减少

JVM 常见异常及内存诊断

栈内存溢出 栈内存大小设置:-Xss size 默认除了window以外的所有操作系统默认情况大小为 1MB,window 的默认大小依赖于虚拟机内存。 栈帧过多导致栈内存溢出 下述示例代码,由于递归深度没有限制且没有设置出口,每次方法的调用都会产生一个栈帧导致了创建的栈帧过多,而导致内存溢出(StackOverflowError)。 示例代码: 运行结果: 栈帧过大导致栈内存

Redis中使用布隆过滤器解决缓存穿透问题

一、缓存穿透(失效)问题 缓存穿透是指查询一个一定不存在的数据,由于缓存中没有命中,会去数据库中查询,而数据库中也没有该数据,并且每次查询都不会命中缓存,从而每次请求都直接打到了数据库上,这会给数据库带来巨大压力。 二、布隆过滤器原理 布隆过滤器(Bloom Filter)是一种空间效率很高的随机数据结构,它利用多个不同的哈希函数将一个元素映射到一个位数组中的多个位置,并将这些位置的值置