Redis:内存满了的解决方案
1,增加内存;
2,使用内存淘汰策略。(LRU)
3,Redis集群。
重点介绍下23;
第2点:
我们知道,redis设置配置文件的maxmemory参数,可以控制其最大可用内存大小(字节)。
那么当所需内存,超过maxmemory怎么办?
这个时候就该配置文件中的maxmemory-policy出场了。
其默认值是noeviction。
下面我将列出当可用内存不足时,删除redis键具有的淘汰规则。
规则名称 |
规则说明 |
volatile-lru |
使用LRU算法删除一个键(只对设置了生存时间的键),最少使用的 |
allkeys-lru |
使用LRU算法删除一个键,最少使用的 |
volatile-random |
随机删除一个键(只对设置了生存时间的键) |
allkeys-random |
随机删除一个键 |
volatile-ttl |
删除生存时间最近的一个键 |
noeviction |
不删除键,只返回错误 |
LRU算法,least RecentlyUsed,最近最少使用算法。也就是说默认删除最近最少使用的键。
作为内存数据库,出于对性能和内存消耗的考虑,Redis 的淘汰算法实际实现上并非针对所有 key,而是抽样一小部分并且从中选出被淘汰的 key。
使用 Redis 缓存数据时,为了提高缓存命中率,需要保证缓存数据都是热点数据。可以将内存最大使用量设置为热点数据占用的内存量,然后启用 allkeys-lru 淘汰策略,将最近最少使用的数据淘汰。
Redis 4.0 引入了 volatile-lfu 和 allkeys-lfu 淘汰策略,LFU 策略通过统计访问频率,将访问频率最少的键值对淘汰。
但是一定要注意一点!redis中并不会准确的删除所有键中最近最少使用的键,而是随机抽取3个键,删除这三个键中最近最少使用的键。
那么3这个数字也是可以设置的,对应位置是配置文件中的maxmeory-samples.
第3点:
3.集群怎么做
Redis仅支持单实例,内存一般最多10~20GB。对于内存动辄100~200GB的系统,就需要通过集群来支持了。
Redis集群有三种方式:客户端分片、代理分片、RedisCluster(在之后一篇文章详细说一下。)
· 客户端分片
通过业务代码自己实现路由
优势:可以自己控制分片算法、性能比代理的好
劣势:维护成本高、扩容/缩容等运维操作都需要自己研发
· 代理分片(redis中间件)
代理程序接收到来自业务程序的数据请求,根据路由规则,将这些请求分发给正确的Redis实例并返回给业务程序。使用类似Twemproxy、Codis等中间件实现。
优势:运维方便、程序不用关心如何链接Redis实例
劣势:会带来性能消耗(大概20%)、无法平滑扩容/缩容,需要执行脚本迁移数据,不方便(Codis在Twemproxy基础上优化并实现了预分片来达到Auto Rebalance)。
·Redis Cluster
优势:官方集群解决方案、无中心节点,和客户端直连,性能较好
劣势:方案太重、无法平滑扩容/缩容,需要执行相应的脚本,不方便、太新,没有相应成熟的解决案例
Redis:内存满了的解决方案相关推荐
- 蚂蚁金服java研发岗二面:Redis内存满了该怎么办了
原文作者来源于非科班的科班 ,作者黎杜 概述 「三大缓存问题」只是Redis的其中的一小部分的知识点,想要深入学习Redis还要学习比较多的知识点. 那么今天就带来了一个面试常问的一个问题:「假如你的 ...
- redis删除过期key的算法_面试官别再问我Redis内存满了该怎么办了
概述 Redis的文章,我之前写过一篇关于「Redis的缓存的三大问题」,累计阅读也快800了,对于还只有3k左右的粉丝量,能够达到这个阅读量,已经是比较难了. 这说明那篇文章写的还过得去,收到很多人 ...
- 别再问我Redis内存满了该怎么办了
概述 Redis的文章,我之前写过一篇关于「Redis的缓存的三大问题」,累计阅读也快800了,对于还只有3k左右的粉丝量,能够达到这个阅读量,已经是比较难了. 这说明那篇文章写的还过得去,收到很多人 ...
- 面试官问我:Redis 内存满了怎么办
转载自 想不到!面试官问我:Redis 内存满了怎么办 Redis占用内存大小 Redis的内存淘汰 LRU算法 LRU在Redis中的实现 LFU算法 问题 Redis占用内存大小 我们知道Redi ...
- Redis 内存满了怎么办?这样置才正确!
在Redis中,如果过期的数据太多,定时删除无法删除完全(每次删除完过期的 key 还是超过 25%),同时这些 key 再也不会被客户端请求,就无法走惰性删除,内存被打满会怎样? 答案是走内存淘汰机 ...
- 想不到!面试官问我:Redis 内存满了怎么办?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://rrd.me/et29e Redis占用内存大 ...
- 经典面试题:Redis 内存满了怎么办?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 千山qianshan 来源 | http:// ...
- 美团面试题:Redis 内存满了怎么办?
今日推荐强制双休!腾讯调整加班机制,21 点前必须离开工位 使用雪花id或uuid作为Mysql主键,被老板怼了一顿! 盘点 12 个 GitHub 上的高仿项目 CTO 说了,用错 @Autowir ...
- php使用redis内存不足,PHP开发:Redis 内存满了怎么办?
Redis占用内存大小 Redis的内存淘汰 LRU算法 LRU在Redis中的实现 LFU算法 问题 Redis占用内存大小 我们知道Redis是基于内存的key-value数据库,因为系统的内存大 ...
最新文章
- R假设检验之Durbin-Watson检验(Durbin-Watson Test)
- 51. N-Queens N 皇后
- python开发网页视频播放器_HTML5 VideoAPI,打造自己的Web视频播放器
- 计算机网络----wireshark抓包
- 后端http缓存策略
- python gps与高德地图poi_Python——使用高德API获取指定城指定类别POI并实现XLSX文件合并...
- Vim 命令常用功能详解
- go实现本地文件搜索引擎
- HTML CSS 兼容所有浏览器的自定义鼠标样式
- 中国省份城市0-N编号
- 生成模型应用——使用变分自编码器(VAE)控制人脸属性生成人脸图片
- java 页眉页脚_Java 添加Word页眉、页脚
- HTML文本框边框宽度,如何设置文本框尺寸 word文本框怎么设置统一大小
- Python 对象烤地瓜
- obs噪音抑制调多少合适_(3)阿里国际站OBS申请设置使用教程,OBS音频没有声音怎么办?国际站直播回放如何下载?...
- Eclipse Plungins--Pydev
- Thttpd上传大文件的方法
- Xposed模块APP代码混淆
- 05-阿里云视频点播服务与谷粒学院整合视频点播技术
- 百度提前批-面试凉凉之-梯度下降