如何在redis中限制内存的使用大小
如何在redis中限制内存的使用大小?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
记录一次生产环境问题排查过程:
生产环境部署方式:nginx + uwsgi + flask
问题描述:
发现生产环境中之前正常运行的服务突然不可用了,查看程序日志发现部分接口访问时报I/O写错误,nginx acess.log显示504,error.log显示 upstream time out.同时
netstat -apn | grep 6379 | wc -l检查发现redis存在大量连接,进一步检查发现其中大多为SYN_SENT包,连接大多归属于uwsgi进程。
因为程序中有很多接口被调用是会访问redis, 以为是redis连接池导致,对程序中的redis连接池进行优化后重启服务,刚启动时一切正常,http 200, 但几分钟后服务再次挂掉,http 504.
检查系统资源使用情况,发现 kswapd0 进程CPU占用很高,这个进程是当物理内存不足时,会将一部分硬盘当做虚拟内存来使用, 使用swap分区与内存换页操作交换数据,导致CPU占用过高, 再细看发现redis-server内存占用已超过100%:
进入redis中查看info memory和各存储数据的key下数据量,果然存在大量未处理完毕的数据。
到此问题终于是找到了。
设置redis最大占用内存
#编辑redis配置文件,加入最大内存使用限制,我根据服务器的情况设置为3G maxmemory3221225472
设置redis数据过期策略:
redis中有6种过期策略:
#根据LRU算法生成的过期时间来删除 #volatile-lru->removethekeywithanexpiresetusinganLRUalgorithm #根据LRU算法删除任何key。 #allkeys-lru->removeanykeyaccordinglytotheLRUalgorithm #根据过期设置来随机删除key。 #volatile-random->removearandomkeywithanexpireset #无差别随机删。 #allkeys-random->removearandomkey,anykey #根据最近过期时间来删除(辅以TTL) #volatile-ttl->removethekeywiththenearestexpiretime(minorTTL) #谁也不删,直接在写操作时返回错误。 #noeviction->don'texpireatall,justreturnanerroronwriteoperations
在redis配置文件中设置过期策略为:maxmemory-policy allkeys-lru
一开始是设置为volatile-lru的,但是该策略只是清除设置过期时间的key值,因为很多key并没有设置过期时间。因此修改为maxmemory-policy allkeys-lru,指明非活跃近期很少用的key值清除.
在使用maxmemory-policy allkeys-lru策略时,内存超限后将不再存储数据,但数据的读取删除操作不会受影响,超限时显示错误
OOM command not allowed when used memory > 'maxmemory'
重启程序,至此服务终于正常运行。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注恰卡编程网行业资讯频道,感谢您对恰卡编程网的支持。
推荐阅读
-
Redis中6种缓存更新策略详解
引言redis作为一款高性能的内存数据库,已经成为缓存层的首选解决方案。然而,使用缓存时最大的挑战在于保证缓存数据与底层数据源的...
-
一文带你搞懂Redis Stream的6种消息处理模式
redis5.0版本引入的stream数据类型,为redis生态带来了强大而灵活的消息队列功能,弥补了之前发布/订阅模式的不足,...
-
Redis实现分布式锁全解析之从原理到实践过程
在分布式系统开发的广袤领域中,资源竞争问题宛如隐藏在暗处的礁石,时刻威胁着系统的稳定性与数据一致性。当多个服务实例如同脱缰野马般同...
-
Redis实现客户端缓存的4种方式
redis作为当今最流行的内存数据库和缓存系统,被广泛应用于各类应用场景。然而,即使redis本身性能卓越,在高并发场景下,应用与...
-
基于Redis生成分布式全局唯一ID的3种策略
在分布式系统设计中,全局唯一id是一个基础而关键的组件。随着业务规模扩大和系统架构向微服务演进,传统的单机自增id已无法满足需求。...
-
Redis缓存降级的四种策略
引言在高并发系统架构中,redis作为核心缓存组件扮演着至关重要的角色。它不仅能够显著提升系统响应速度,还能有效减轻数据库压力。...
-
redis-cli常用命令使用详解
1redis-cli连接redis服务1.1无密码本地登录redis-cliredis127.0.0.1:6379˃...
-
Redis遍历海量数据的实现示例
1、前言有时候我们需要知道线上的redis的使用情况,尤其需要知道一些前缀的key值,让我们怎么去查看呢?今天给大家分享一个小知...
-
使用Redis实现实时排行榜的示例
-
Redis缓存雪崩的物种解决方案
引言在高并发系统中,redis作为核心缓存组件,通常扮演着重要的"守门员"角色,有效地保护后端数据库免受流量冲击。然而,当大量缓...
