小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。
我们接着上篇文章中的内容继续学习Redis中的配置,今天是CLIENTS 和MEMORY MANAGEMENT 模块!
CLIENTS
maxclients 10000:最大连接数
设置redis同时可以与多少个客户端进行连接。默认情况下为10000个客户端。
当你无法设置进程文件句柄限制时,redis会设置为当前的文件句柄限制值减去32,因为redis会为自身内部处理逻辑留一些句柄出来。
如果达到了此限制,redis则会拒绝新的连接请求,并且向这些连接请求方发出max number of clients reached以作回应。
MEMORY MANAGEMENT
设置redis可以使用的内存量。一旦到达内存使用上限,redis将会试图移除内部数据,移除规则可以通过maxmemory-policy来指定。
如果redis无法根据移除规则来移除内存中的数据,或者设置了不允许移除,那么redis则会针对那些需要申请内存的指令返回错误信息,比如SET、LPUSH等。但是对于无内存申请的指令,仍然会正常响应,比如GET等。
如果你的redis是主redis(说明你的redis有从redis),那么在设置内存使用上限时,需要在系统中留出一些内存空间给同步队列缓存,只有在你设置的是“不移除”的情况下,才不用考虑这个因素。
最大缓存
#maxmemory <bytes>
maxmemory 128MB
设置maxmemory和相对应的回收策略算法,设置最好为物理内存的3/4,或者比例更小,因为redis复制数据等其他服务时,也是需要缓存的。以防缓存数据过大致使redis崩溃,造成系统出错不可用。
牺牲一部分缓存数据,保存整体系统可用性。redis新的内存机制,会把key放在内存,value存放在swap区。
此配置需要和maxmemory-policy配合使用,当redis中内存数据达到maxmemory时,触发清除策略。在内存不足时,任何write操作(比如set,lpush等)都会触发清除策略的执行。
实际环境
建议redis的所有物理机器的硬件配置保持一致(内存一致),同时确保master/replica中maxmemory policy配置一致。
内存满时
如果还接收到set命令,redis将先尝试剔除设置过expire信息的key,而不管该key的过期时间有没有到达。
在删除时,将按照过期时间进行删除,最早将要被过期的key将最先被删除。如果带有expire信息的key都删光了,内存还不够用,那么将返回错误。这样,redis将不再接收写请求,只接收get请求。
maxmemory的设置比较适合于把redis当作于类似memcached的缓存来使用。
以上就是今天的全部内容了,如果你有不同的意见或者更好的idea,欢迎联系阿Q,添加阿Q可以加入技术交流群参与讨论呦!
后台留言领取 java 干货资料:学习笔记与大厂面试题