多语言展示
当前在线:643今日阅读:39今日分享:10

redis内存满了怎么办

我们都知道Redis是一个基于内存的key-value的数据库,而因为内存大小有限,因此会发生内存满了的情况 , 如果当我们在实际应用中遇到Redis内存满了的情况时 , 我们应该怎么处理呢 ?
1. 增加内存
1

我们使用Redis时可以在配置文件中配置Redis可使用的内存的大小, 那么当redis内存不足时 , 我们首先想到的应该是给其增加可使用的内存. 有两种方式可以选择 .

3

第二种方式是通过Redis命令来修改可用内存大小 : 在Redis运行时可以通过命令来动态地修改可用内存的大小 , 例如 :127.0.0.1 : 6379 > config  set  maxmemory  100MB //这是设置Redis最大可以占用的内存为100M 127.0.0.1 : 6379 > config  get  maxmemory //这是获取刚才设置的Redis可用的最大内存

2. 内存淘汰机制
1

但是当配置的内存用完了的时候 ,如果再继续添加数据 , Redis不就没内存可以用了么?其实Redis自身已经定义了一些策略来处理这样的情况 , 也就是内存淘汰机制 .

2

以下是可以通过配置文件设置的内存淘汰策略 : 1. noeviction(默认):不再提供写请求服务,返回错误2. allkeys-lru:在所有的key中使用LRU算法对数据进行淘汰3. volatile-lru:在设置了'过期时间 '的过期key中用LRU算法对数据进行淘汰4. allkeys-random:随机进行数据淘汰5. volatile-random:在有' 过期时间 '的key中随机进行数据淘汰6. volatile-ttl:依据key的已经设置的过期时间进行数据淘汰,最早过期的数据最早被淘汰

3. 集群
1

由于Redis只是支持 单实例,它的内存在一般情况下最多也就是10~20GB。那么对于内存需要100~200GB的大型系统,就会需要进行集群了。Redis有三种集群的方式:-代理分片 , -客户端 分片和 RedisCluster

2

客户端 分片 , 这种方式是通过具体的业务代码去自己实现路由 , 这样做的优势在于可以通过业务代码自己控制分片的算法、性能会比代理分片的好 , 劣势是维护需要较高的成本 .

3

代理 分片 , 这种方式是代理程序收到业务程序的请求后,会根据路由规则把请求分发到Redis实例并将结果返回到业务程序 , 是使用Codis等中间件来进行实现的 .  这样做优势在于运维方便, 程序也无需关心怎么去链接Redis的实例劣势则在于性能消耗增大 , 还需要执行脚本进行数据迁移.

4

RedisCluster : 这种方式优势在于它是官方的集群方案 , 没有中心节点并且和客户端能够直连 ,性能相对较好 , 它的劣势在于需要去执行脚本,不方便 , 并且因为技术较新 , 没有成熟的案例供参考

总结

1. 增加内存2. 使用淘汰策略3. 使用集群

注意事项

图来源于网络 , 侵删

推荐信息