广告
返回顶部
首页 > 资讯 > 数据库 >redis怎么配置缓存清理
  • 424
分享到

redis怎么配置缓存清理

2024-04-02 19:04:59 424人浏览 独家记忆
摘要

将 Redis 用作缓存时, 如果内存空间用满, 就会自动驱逐老的数据。 默认情况下 memcached 就是这种方式, 大部分开发者都比较熟悉。LRU是Redis唯一支持的回收算法. 本文详细介绍用于限制

Redis 用作缓存时, 如果内存空间用满, 就会自动驱逐老的数据。 默认情况下 memcached 就是这种方式, 大部分开发者都比较熟悉。

LRU是Redis唯一支持的回收算法. 本文详细介绍用于限制最大内存使用量的 maxmemory 指令, 并深入讲解 Redis 所使用的近似LRU算法。

maxmemory 配置指令

maxmemory 用于指定 Redis 能使用的最大内存。既可以在 redis.conf 文件中设置, 也可以在运行过程中通过 CONFIG SET 命令动态修改。

例如, 要设置 100MB 的内存限制, 可以在 redis.conf 文件中这样配置:

maxmemory 100mb

将 maxmemory 设置为 0, 则表示不进行内存限制。当然, 对32位系统来说有一个隐性的限制条件: 最多 3GB 内存。

当内存使用达到最大限制时, 如果需要存储新数据, 根据配置的策略(policies)的不同, Redis可能直接返回错误信息, 或者删除部分老的数据。

驱逐策略

达到最大内存限制时(maxmemory), Redis 根据 maxmemory-policy 配置的策略, 来决定具体的行为。

当前版本,Redis 3.0 支持的策略包括:

noeviction: 不删除策略, 达到最大内存限制时, 如果需要更多内存, 直接返回错误信息。 大多数写命令都会导致占用更多的内存(有极少数会例外, 如 DEL )。

allkeys-lru: 所有key通用; 优先删除最近最少使用(less recently used ,LRU) 的 key。

volatile-lru: 只限于设置了 expire 的部分; 优先删除最近最少使用(less recently used ,LRU) 的 key。

allkeys-random: 所有key通用; 随机删除一部分 key。

volatile-random: 只限于设置了 expire 的部分; 随机删除一部分 key。

volatile-ttl: 只限于设置了 expire 的部分; 优先删除剩余时间(time to live,TTL) 短的key。

如果没有设置 expire 的key, 不满足先决条件(prerequisites); 那么 volatile-lru, volatile-random 和 volatile-ttl 策略的行为, 和 noeviction(不删除) 基本上一致。

您需要根据系统的特征, 来选择合适的驱逐策略。 当然, 在运行过程中也可以通过命令动态设置驱逐策略, 并通过 INFO 命令监控缓存的 miss 和 hit, 来进行调优。

一般来说:

如果分为热数据与冷数据, 推荐使用 allkeys-lru 策略。 也就是, 其中一部分key经常被读写. 如果不确定具体的业务特征, 那么 allkeys-lru 是一个很好的选择。

如果需要循环读写所有的key, 或者各个key的访问频率差不多, 可以使用 allkeys-random 策略, 即读写所有元素的概率差不多。

假如要让 Redis 根据 TTL 来筛选需要删除的key, 请使用 volatile-ttl 策略。

volatile-lru 和 volatile-random 策略主要应用场景是: 既有缓存,又有持久key的实例中。 一般来说, 像这类场景, 应该使用两个单独的 Redis 实例。

值得一提的是, 设置 expire 会消耗额外的内存, 所以使用 allkeys-lru 策略, 可以更高效地利用内存, 因为这样就可以不再设置过期时间了。

驱逐的内部实现

驱逐过程可以这样理解:

客户端执行一个命令, 导致 Redis 中的数据增加,占用更多内存。

Redis 检查内存使用量, 如果超出 maxmemory 限制, 根据策略清除部分 key。

继续执行下一条命令, 以此类推。

在这个过程中, 内存使用量会不断地达到 limit 值, 然后超过, 然后删除部分 key, 使用量又下降到 limit 值之下。

如果某个命令导致大量内存占用(比如通过新key保存一个很大的set), 在一段时间内, 可能内存的使用量会明显超过 maxmemory 限制。

近似LRU算法

Redis 使用的并不是完全LRU算法。自动驱逐的 key , 并不一定是最满足LRU特征的那个. 而是通过近似LRU算法, 抽取少量的 key 样本, 然后删除其中访问时间最古老的那个key。

驱逐算法, 从 Redis 3.0 开始得到了巨大的优化, 使用 pool(池子) 来作为候选. 这大大提升了算法效率, 也更接近于真实的LRU算法。

在 Redis 的 LRU 算法中, 可以通过设置样本(sample)的数量来调优算法精度。 通过以下指令配置:

maxmemory-samples 5

为什么不使用完全LRU实现? 原因是为了节省内存。但 Redis 的行为和LRU基本上是等价的. 下面是 Redis LRU 与完全LRU算法的一个行为对比图。

redis怎么配置缓存清理测试过程中, 依次从第一个 key 开始访问, 所以最前面的 key 才是最佳的驱逐对象。

从图中可以看到三种类型的点, 构成了三个不同的条带。

浅灰色部分表示被驱逐的对象。

灰色部分表示 “未被驱逐” 的对象。

绿色部分表示后面加入的对象。

在纯粹的LRU算法实现中, 前半部分旧的key被释放了。而 Redis 的 LRU 算法只是将时间较长的 key 较大概率地(probabilistically)释放了。

如你所见, Redis 3.0 中, 5样本的效果比 Redis 2.8 要好很多。 当然, Redis 2.8 也不错,最后访问的key基本上都还留在内存中. 在 Redis 3.0 中使用 10 样本时, 已经非常接近纯粹的LRU算法了。

注意,LRU只是用来预测将来可能会继续访问某个key的一个概率模型. 此外,如果数据访问的情况符合幂律分布(power law), 那么对于大部分的请求来说, LRU都会表现良好。

在模拟中, 我们发现, 如果使用幂律方式访问, 纯粹的LRU和Redis的结果差别非常, 甚至看不出来。

当然也可以将样本数量提高到10, 以额外消耗一些CPU为代价, 使得结果更接近于真实的LRU, 并通过 cache miss 统计信息来判断差异。

设置样本大小很容易, 使用命令 CONFIG SET maxmemory-samples <count> 即可

以上就是redis在哪里配置缓存清理策略的详细内容,更多请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: redis怎么配置缓存清理

本文链接: https://www.lsjlt.com/news/38020.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • redis怎么配置缓存清理
    将 Redis 用作缓存时, 如果内存空间用满, 就会自动驱逐老的数据。 默认情况下 memcached 就是这种方式, 大部分开发者都比较熟悉。LRU是Redis唯一支持的回收算法. 本文详细介绍用于限制...
    99+
    2022-10-18
  • redis如何清理缓存
    如果你们的项目用到redis啦,虽然设置了过期时间,但有时候修改bug,仍然需要及时清空缓存,去读数据库的数据,所以这篇文章讲解如何清除redis的缓存。 正文 1.首先进到redi...
    99+
    2023-01-04
    redis 清理缓存
  • springboot redis缓存配置
    今天小编就为大家带来一篇springboot redis缓存配置的文章。小编觉得挺实用的,为此分享给大家做个参考。一起跟随小编过来看看吧。开启远程访问:找到redis中的redis.conf文件并编辑(在安...
    99+
    2022-10-18
  • 怎么清除本地redis缓存
    要清除本地Redis缓存,可以通过以下几种方法:1. 使用redis-cli命令行工具:打开终端,输入redis-cli命令进入Re...
    99+
    2023-09-01
    redis
  • 怎么在Nginx中配置反向代理并清除缓存
    本篇文章为大家展示了怎么在Nginx中配置反向代理并清除缓存,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一. Nginx 配置12345678910111213141516171819202122...
    99+
    2023-06-08
  • linux下清理redis缓存的方法
    这篇文章主要介绍了linux下清理redis缓存的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。1、先确保redis进程存活ps -ef|g...
    99+
    2022-10-18
  • idea怎么清理tomcat缓存
    要清理Tomcat缓存,可以按照以下步骤进行操作:1. 停止Tomcat服务器:打开命令提示符或终端窗口,导航到Tomcat安装目录...
    99+
    2023-08-24
    idea tomcat
  • mac清理视频缓存在哪里找和mac清理视频缓存怎么清理
    苹果电脑用久了,我们会发现mac电脑越用越慢,其实这种情况是正常的,电脑用久了会产生很多缓存,如果不及时清理会影响运行速度。那么mac清理视频缓存在哪里找?下面就和小编一起看看mac清理视频缓存怎么清理。 系统: macOs Monter...
    99+
    2023-09-02
    服务器 缓存 电脑 macos
  • 缓存数据库Redis——Redis部署与配置
    关系型数据库与非关系型数据库 关系型数据库: 一个机构化的数据库,创建在关系模型基础上,一般面向于记录包括oracle、mysql、sqlserver、db2 非关系型数据库: 除了主流的关系型数据库...
    99+
    2022-10-18
  • 怎么清理C盘Adobe缓存
    小编给大家分享一下怎么清理C盘Adobe缓存,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!清除方法:首先打开“此电脑”,点击页面顶部的“查看”按钮,勾选“隐藏的项...
    99+
    2023-06-15
  • Win8磁贴缓存怎么清理?Win8系统设置磁贴缓存自动清理方法介绍
    Windows8新增了Tile磁贴这一Metro模块,而磁贴会在Metro主页默认展示一些绑定的个人信息,比如邮件信息。有时候这些磁贴缓存容易泄露用户隐私信息,因此一般建议关机时清理,今天编程网小编为大家带...
    99+
    2022-06-04
    缓存 系统设置 方法
  • 如何在Windows和Linux中清理Redis缓存
    如何在Windows和Linux中清理Redis缓存?针对这个问题,今天小编总结了这篇文章,希望能帮助更多想解决这个问题的朋友找到更加简单易行的办法。Windows清理方法:步骤一:cd D:\Progra...
    99+
    2022-10-18
  • 使用java怎么对redis进行增删查并清理缓存
    今天就跟大家聊聊有关使用java怎么对redis进行增删查并清理缓存,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Controller@ApiOperation(value ...
    99+
    2023-06-06
  • 云服务器清理缓存数据怎么清理
    云服务器通常会存储大量数据,因此需要定期清理缓存数据以确保数据的可用性和安全性。以下是一个简单的清理过程示例: 检查日志和警告信息:确保日志和警告信息已被正确处理,以防止数据损坏或意外。 删除不需要的文件和文件夹:删除不需要的数据以释放...
    99+
    2023-10-26
    缓存 服务器 数据
  • 怎么缓存redis
    这篇文章运用简单易懂的例子给大家介绍怎么缓存redis,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。redis怎么缓存?首先使用redis需要在服务器上提前安装,安装的命令是yum i...
    99+
    2022-10-18
  • Django使用redis配置缓存的方法
    目录前言django应用redis缓存1.settings配置2.全站缓存3.视图函数缓存4.低级缓存5.session缓存对于非经常更新的服务器数据,若每次都从硬盘读取一次,会浪费...
    99+
    2022-11-12
  • 怎么清理c盘缓存垃圾
    这篇文章给大家分享的是有关怎么清理c盘缓存垃圾的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。清理c盘缓存垃圾的方法:1、双击打开计算机,打开本地磁盘C属性面板;2、找到常规选项,点击【磁盘清理】选项;3、等待磁盘...
    99+
    2023-06-14
  • 怎么清理云服务器缓存
    清理云服务器缓存是一个复杂的问题,但是以下是一些常见的步骤: 安装和配置 Windows Server Foundation (WFSP) 确定您的数据库在 WFSP 环境下运行,因为 WFSP 是云服务器的核心。 选择所需的 WF...
    99+
    2023-10-27
    缓存 服务器
  • 虚拟主机怎么清理缓存
    在虚拟主机中清理缓存dns缓存的方法:1.远程连接虚拟主机;2.打开命令提示符窗口;3.执行ipconfig/flushdns命令清理缓存;具体步骤如下:首先,远程连接虚拟主机,进入虚拟主机操作界面;在虚拟主机操作界面中,使用组合键“win...
    99+
    2022-10-19
  • 服务器怎么清理cdn缓存
    Windows系统服务器清理cdn缓存的方法首先,远程连接服务,进入服务器操作界面;在服务器操作界面中,使用组合键“win+R”运行“cmd”,进入命令提示符界面;进入命令提示符界面后,在命令行中运行命令:ipconfig/flushdns...
    99+
    2022-10-07
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作