Redis笔记八之内存设置及优化

Posted simeonwu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis笔记八之内存设置及优化相关的知识,希望对你有一定的参考价值。

 

       理论上讲redis可以存储2的32次方个key,每个实例至少存2亿5千万个key,但因为Redis是基于内存的数据库所以也就意味着它不可能存储特别多的数据,应该说redis的存储极限是系统的可用内存。

我在本机上通过jedis生成100万个key实际占用内存108M

# Memory

used_memory:104730792

used_memory_human:99.88M

used_memory_rss:123080704

used_memory_peak:113668232

used_memory_peak_human:108.40M

used_memory_lua:35840

mem_fragmentation_ratio:1.18

mem_allocator:jemalloc-3.6.0

 

# Keyspace

db0:keys=1000000,expires=0,avg_ttl=0

 

内存设置

 

maxmemory和maxmemory_policy参数

      在redis.conf中通过这两个参数配置redis的内存使用情况。Redis的可用内存与系统的内存有关,一般我们需要设置它的最大可用内存,除非你确定你的业务中redis的内存不会很大且有足够的系统内存。

maxmemory参数

不设置

    1:不设置或为0,64位系统不限制使用,32位最多使用3G

     2:如果不设置最大内存系统有多少内存redis就会用多少一旦开始写入swap虚拟内存则后期查询速度反而会慢。

设置

     如果开启了RDB持久化方式,因为子进程在复制所有数据时内存使用量会增加一倍,所以最大设置为系统内存的45%。如果没有开启最大设置为系统内存的95%。

     maxmemory_policy参数

    1:设置最大内存后需要设置删除策略否则当内存不足时再添加数据就会报错。

     2:有六种删除策略。

     volatile-lru:使用LRU算法从已设置过期时间的数据集合中淘汰数据。

     volatile-ttl:从已设置过期时间的数据集合中挑选即将过期的数据淘汰。

     volatile-random:从已设置过期时间的数据集合中随机挑选数据淘汰。

    allkeys-lru:使用LRU算法从所有数据集合中淘汰数据,淘汰使用频率最少的key。

    allkeys-random:从数据集合中任意选择数据淘汰

    no-enviction:禁止淘汰数据。


 

优化原则:

1:key的名称尽量使用简单明了的关键字,比如stu代表学生不要太长。

2:如果只是使用redis充当缓存就请关闭持久化功能。

3:redis为每种数据类型都提供了两种内部编码方式,生成时redis自己会自动根据数据类型调整使用那种编码方式。

4:slowlog慢日志查询

      当我们发现redis命令执行慢时可以通过slowlog来找出这些命令。在redis.conf中有两个参数slowlog-log-slower-than10000和slowlog-max-len 128。

      slowlog-log-slower-than10000表示当命令执行时间大于10000时此命令会被保存

      slowlog-max-len128表示redis会保存最多128条命令。

      slowlog get可以查看当前所有执行慢的命令

      slowlog len可以查看目前一共记录了多少条命令

      slowlog reset可以执行重置

      我们可以根据项目的实际情况修改redis.conf中的这两个参数


以上是关于Redis笔记八之内存设置及优化的主要内容,如果未能解决你的问题,请参考以下文章

缓存数据库Redis之三:内存淘汰策略及优化

缓存数据库Redis之三:内存淘汰策略及优化

Redis笔记:简介源码安装常用命令配置文件内存管理

Redis 内存优化方式

08.Redis内存分配与优化

笔记本电脑性能都有哪些优化方法