在 redis 中,允许用户设置最大使用内存大小 server.maxmemory,在内存限定的情况下是很有用的。譬如,在一台 8G 机子上部署了 4 个 redis 服务点,每一个服务点分配 1.5G 的内存大小,减少内存紧张的情况,由此获取更为稳健的服务。
redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。redis 提供 6种数据淘汰策略:
volatile-lru:从设置了过期时间的数据集中,选择最近最久未使用的数据释放; allkeys-lru:从数据集中(包括设置过期时间以及未设置过期时间的数据集中),选择最近最久未使用的数据释放; volatile-random:从设置了过期时间的数据集中,随机选择一个数据进行释放; allkeys-random:从数据集中(包括了设置过期时间以及未设置过期时间)随机选择一个数据进行入释放; volatile-ttl:从设置了过期时间的数据集中,选择马上就要过期的数据进行释放操作; noeviction:不删除任意数据(但redis还会根据引用计数器进行释放),这时如果内存不够时,会直接返回错误。记忆方式: 单词组成:3个volatile开头的,2个all_keys开头。都是lru,random,只有volatile有ttl方式。最后加一个noeviction volatile:指的都是快过期的数据集。 all_keys:是所有的数据集。 lrc:是选择最近长时间不使用的,一般用作缓存机制。 random:就是随机选一个。 ttl:就是过期时间的设置 noeviction:不做任何设置
默认的内存策略是noeviction,在Redis中LRU算法是一个近似算法,默认情况下,Redis随机挑选5个键,并且从中选取一个最近最久未使用的key进行淘汰,在配置文件中可以通过maxmemory-samples的值来设置redis需要检查key的个数,但是检查的越多,耗费的时间也就越久,但是结构越精确(也就是Redis从内存中淘汰的对象未使用的时间也就越久~),设置多少,综合权衡。
一般来说,推荐使用的策略是volatile-lru,并辨识Redis中保存的数据的重要性。对于那些重要的,绝对不能丢弃的数据(如配置类数据等),应不设置有效期,这样Redis就永远不会淘汰这些数据。对于那些相对不是那么重要的,并且能够热加载的数据(比如缓存最近登录的用户信息,当在Redis中找不到时,程序会去DB中读取),可以设置上有效期,这样在内存不够时Redis就会淘汰这部分数据。
我们可以设置maxmemory ,当数据达到限定大小后,会选择配置的策略淘汰数据
转载于:https://www.cnblogs.com/c-x-a/p/10948740.html
相关资源:JAVA上百实例源码以及开源项目