java架构师培训-Redis内存淘汰机制是什么

69 篇文章 0 订阅
43 篇文章 0 订阅

Redis内存消除是指Redis可以主动从实例中删除用户存储的某些键,从而导致读取未命中的事实。那么,Redis为什么具有此功能?这是我们需要探索的设计的初衷。Redis的两种最常见的应用场景是缓存和持久性存储。首先要明确的一个问题是内存淘汰策略更适合于那种场景?是持久存储还是缓存?

java架构师培训

内存的淘汰机制的初衷是为了更好地使用内存,用一定的缓存miss来换取内存的使用效率。

作为Redis用户,我如何使用Redis提供的这个特性呢?看看下面配置

#maxmemory

我们可以通过配置redis.conf中的maxmemory这个值来开启内存淘汰功能,至于这个值有什么意义,我们可以通过了解内存淘汰的过程来理解它的意义:

1.客户端发起了需要申请更多内存的命令(如set)。

2.Redis检查内存使用情况,如果已使用的内存大于maxmemory则开始根据用户配置的不同淘汰策略来淘汰内存(key),从而换取一定的内存。

3.如果上面都没问题,则这个命令执行成功。

maxmemory为0的时候表示我们对Redis的内存使用没有限制。

Redis提供了下面几种淘汰策略供用户选择,其中默认的策略为noeviction策略:

·noeviction:当内存使用达到阈值的时候,所有引起申请内存的命令会报错。

·allkeys-lru:在主键空间中,优先移除最近未使用的key。

·volatile-lru:在设置了过期时间的键空间中,优先移除最近未使用的key。

·allkeys-random:在主键空间中,随机移除某个key。

·volatile-random:在设置了过期时间的键空间中,随机移除某个key。

·volatile-ttl:在设置了过期时间的键空间中,具有更早过期时间的key优先移除。

这是对主密钥空间和具有到期时间设置的密钥空间的补充。例如,假设我们在Redis中存储了一批密钥,那么有一个哈希表用于存储这批密钥及其值,如果这批密钥是某些密钥设置了过期时间,那么这批密钥的键也将存储在另一个哈希表中。该哈希表中的值对应于密钥集的到期时间。为其设置了到期时间的密钥空间是主密钥空间的子集。

我们了解了Redis大概提供了这么几种淘汰策略,那么如何选择呢?淘汰策略的选择可以通过下面的配置指定:

#maxmemory-policynoeviction

但是这个值填什么呢?为了解决这个问题,我们需要了解我们的应用程序如何请求访问Redis中存储的数据集以及我们的吸引力。同时,Redis还支持运行时来修改消除策略,这使我们能够实时调整内存消除策略,而无需重新启动Redis实例。

下面看看几种策略的适用场景:

·allkeys-lru:如果我们的应用对缓存的访问符合幂律分布(也就是存在相对热点数据),或者我们不太清楚我们应用的缓存访问分布状况,我们可以选择allkeys-lru策略。

·allkeys-random:如果我们的应用对于缓存key的访问概率相等,则可以使用这个策略。

·volatile-ttl:这种策略使得我们可以向Redis提示哪些key更适合被eviction。

另外,volatile-lru策略和volatile-random策略适合我们将一个Redis实例既应用于缓存和又应用于持久化存储的时候,然而我们也可以通过使用两个Redis实例来达到相同的效果,值得一提的是将key设置过期时间实际上会消耗更多的内存,因此我们建议使用allkeys-lru策略从而更有效率的使用内存。

推荐阅读:java架构师培训:java最佳测试框架JBehave的基本介绍
如果你想了解更多关于java架构师的专业知识,可以加入JAVA架构师交流群:1160405674,里面都是同行,有资源分享包括但不限于(分布式架构、高可扩展、高性能、高并 发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty、Kafka、Mysql 、Zookeeper、Tomcat、Docker、Dubbo、Nginx)。欢迎一到五年的工程师加入,合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值