1-Redis - 面试题集
当Redis的内存满了我们怎么办?
- 增加内存
- 使用内存淘汰策略,也就是在配置文件中设置
maxmemory
参数,该参数控制最大可用内存(字节),当内存上线超过该参数时,maxmemory-policy
。maxmemory-policy
有以下几种淘汰规则:
规则 | 描述 |
---|---|
noeviction | 默认参数,不删除键,只返回错误 |
volatile-lru | 使用LRU算法删除一个设置了生存时间的键 |
allkeys-lru | 使用LRU算法删除一个键 |
volatile-ttl | 删除生存时间最近的一个键 |
volatile-random | 随机删除一个设置了生存时间的键 |
allkeys-random | 随机删除一个键 |
注意:LRU(least RecentlyUsed)算法和 minimal ttl 算法是相对精确的算法(为了节省内存)。默认删除最近最少使用的键。redis中并不会准确的删除所有键中最近最少使用的键,而是随机抽取3个键,删除这三个键中最近最少使用的键。那么3这个数字也是可以设置的,对应位置是配置文件中的maxmeory-samples 。 |
- 使用Redis集群,可以有三种方式:
- 客户端分片:通过业务代码自己实现路由,优势是可以控制分片算法,性能相对较好;劣势是维护成本高、扩容/缩容等运维操作需要自己研发
- 代理分片:代理程序接收到来自业务程序的数据请求,根据路由规则,将这些请求分发给正确的Redis实例并返回给业务程序。使用类似Twemproxy、Codis等中间件实现。优势是运维方便、程序不用关心如何链接Redis实例;劣势是会带来性能消耗(大概20%)、无法平滑扩容/缩容,需要执行脚本迁移数据,不方便(Codis在Twemproxy基础上优化并实现了预分片来达到Auto Rebalance)。
- Redis Cluster:优势:官方集群解决方案、无中心节点,和客户端直连,性能较好;劣势:方案太重、无法平滑扩容/缩容,需要执行相应的脚本,不方便、太新,没有相应成熟的解决案例。
持续更新中....... see also:[Redis内存满了的几种解决方法(内存淘汰策略与Redis集群)](https://blog.csdn.net/u014590757/article/details/79788076) | [Redis详解(二)redis的配置文件介绍](https://www.cnblogs.com/ysocean/p/9074787.html)