1-Redis - 面试题集

当Redis的内存满了我们怎么办?

  • 增加内存
  • 使用内存淘汰策略,也就是在配置文件中设置maxmemory参数,该参数控制最大可用内存(字节),当内存上线超过该参数时,maxmemory-policymaxmemory-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)
posted @ 2019-03-13 09:32  听雨危楼  阅读(483)  评论(0编辑  收藏  举报