网站首页 文章专栏 Redis内存优化及配置
Redis内存优化及配置
编辑时间:2020-08-29 20:49 作者:小铨 浏览量:82

Redis内存优化及配置



Redis所有的数据都在内存中,而内存优势非常宝贵的资源。常用的内存优化方案有如下几个部分:

1. 配置优化
2. 缩减健值对象
3. 命令处理
4. 缓存淘汰方案


主要说以下两点:

一 缩减健值对象

降低redis内存使用最直接的方式就是缩减键(key)和值(value)的长度。

  • key长度;如在设置键时,在完整描述业务情况下,键值越短越好。

  • value长度,值对象缩减比较复杂,常见需求是把业务对象序列化二进制数组放入redis。首先应该在业务上精简业务对象,在存到redis之前
    先把你的数据压缩下

常用的压缩方法对比:

压缩方法 解压方法 压缩时间 压缩效果
bzcompress() bzdecompress() 耗时多 压缩效果好
gzcompress() gzuncompress() 耗时少 压缩效果差


二 缓存淘汰优化

redis 内存数据集大小上升到一定大小的时候,就会进行数据淘汰策略。如果不淘汰经常不用的缓存数据,那么正常的数据将不会存储到缓存当中。

通过配置redis.conf中的maxmemory这个值来开启内存淘汰功能

  • maxmemory
    值得注意的是,maxmemory为0的时候表示我们对Redis的内存使用没有限制

根据应用场景,选择淘汰策略

  • maxmemory-policy noeviction


内存淘汰过程:


首先,客户端发起了需要申请更多内存的命令(如set)。 
然后,Redis检查内存使用情况,如果已使用的内存大于maxmemory则开始根据用户配置的不同淘汰策略来淘汰内存(key),从而换取一定的内存。 
最后,如果上面都没问题,则这个命令执行成功。

动态改配置命令【也可以在配置文件修改】
(此外,redis支持动态改配置,无需重启)

设置最大内存 
config set maxmemory 100000 
设置淘汰策略 config 
set maxmemory-policy no-eviction

内存淘汰策略:

策略 说明
volatile-lru 从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
allkeys-lru 从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
volatile-lfu 从设置了过期时间的数据集(server.db[i].expires)中选择某段时间之内使用频次最小的键值对清除掉
allkeys-lfu 从所有的数据集(server.db[i].dict)中挑选某段时间之内使用频次最小简直对清除掉
volatile-ttl 从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
volatile-random 从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
allkeys-random 从数据集(server.db[i].dict)中任意选择数据淘汰
no-enviction 当内存达到限制的时候,不淘汰任何数据,不可写入任何数据集,所有引起申请内存的命令会报错。

如何选择淘汰策略:

几种策略的适用场景:

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

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

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

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




    出自:铨程互动

    地址:www.wuhequan.cn

    转载请注明出处!


来说两句吧
最新评论
0.118833s