美团面试题:Redis 内存满了怎么办?.docxVIP

美团面试题:Redis 内存满了怎么办?.docx

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
美团面试题:Redis 内存满了怎么办? # Redis占用内存大小 我们知道Redis是基于内存的key-value数据库,因为系统的内存大小有限,所以我们在使用Redis的时候可以配置Redis能使用的最大的内存大小。 1、通过配置文件配置 通过在Redis安装目录下面的redis.conf配置文件中添加以下配置设置内存大小 //设置Redis最大占用内存大小为100M maxmemory 100mb redis的配置文件不一定使用的是安装目录下面的redis.conf文件,启动redis服务的时候是可以传一个参数指定redis的配置文件的 2、通过命令修改 Redis支持运行时通过命令动态修改内存大小 //设置Redis最大占用内存大小为100M 127.0.0.1:6379 config set maxmemory 100mb //获取设置的Redis能使用的最大内存大小 127.0.0.1:6379 config get maxmemory 如果不设置最大内存大小或者设置最大内存大小为0,在64位操作系统下不限制内存大小,在32位操作系统下最多使用3GB内存 Redis的内存淘汰 既然可以设置Redis最大占用内存大小,那么配置的内存就有用完的时候。那在内存用完的时候,还继续往Redis里面添加数据不就没内存可用了吗? 实际上Redis定义了几种策略用来处理这种情况: noeviction(默认策略):对于写请求不再提供服务,直接返回错误(DEL请求和部分特殊请求除外) allkeys-lru:从所有key中使用LRU算法进行淘汰 volatile-lru:从设置了过期时间的key中使用LRU算法进行淘汰 allkeys-random:从所有key中随机淘汰数据 volatile-random:从设置了过期时间的key中随机淘汰 volatile-ttl:在设置了过期时间的key中,根据key的过期时间进行淘汰,越早过期的越优先被淘汰 当使用volatile-lru、volatile-random、volatile-ttl这三种策略时,如果没有key可以被淘汰,则和noeviction一样返回错误 如何获取及设置内存淘汰策略 获取当前内存淘汰策略: 127.0.0.1:6379 config get maxmemory-policy 通过配置文件设置淘汰策略(修改redis.conf文件): maxmemory-policy allkeys-lru 通过命令修改淘汰策略: 127.0.0.1:6379 config set maxmemory-policy allkeys-lru # LRU算法 什么是LRU? 上面说到了Redis可使用最大内存使用完了,是可以使用LRU算法进行内存淘汰的,那么什么是LRU算法呢? LRU(Least Recently Used),即最近最少使用,是一种缓存置换算法。在使用内存作为缓存的时候,缓存的大小一般是固定的。当缓存被占满,这个时候继续往缓存里面添加数据,就需要淘汰一部分老的数据,释放内存空间用来存储新的数据。 这个时候就可以使用LRU算法了。其核心思想是:如果一个数据在最近一段时间没有被用到,那么将来被使用到的可能性也很小,所以就可以被淘汰掉。 使用java实现一个简单的LRU算法 public class LRUCachek, v { //容量 private int capacity; //当前有多少节点的统计 private int count; //缓存节点 private Map nodeMap; private Node head; private Node tail; public LRUCache(int capacity) { if (capacity 1) { throw new IllegalArgumentException(String.valueOf(capacity)); } this.capacity = capacity; this.nodeMap = new HashMap(); //初始化头节点和尾节点,利用哨兵模式减少判断头结点和尾节点为空的代码 Node headNode = new Node(null, null); Node tailNode = new Node(null, null); headNode.next = tailNode; tailNode.pre = headNode;

文档评论(0)

150****6040 + 关注
实名认证
文档贡献者

互联网产品运营推广以及k12教育内容。

1亿VIP精品文档

相关文档