【Redis】Redis内存管理及优化

 

  Redis是一个内存的缓存中间件,依靠将数据加载到内存中,用空间换时间,这是它性能优异的一个原因,但是相对于硬盘等设备还是比较贵的。所以在使用redis时候还是需要可以尽可能芳节省内存。

 

Redis内存消耗分析

  1.内存使用统计,进入redis并使用 info  命令。

    

     下面表格列出redis统计内存命令info memory 返回的一些主要字段信息。

字段名 说明
used_memory Redis内存分配器分配的内存量,也就是实际存储的内存总量
used_memory_human 以可读的格式展示Redis使用的内存总量
used_memory_rss 从操作系统角度,Redis进程所占用的物理内存
used_memory_peak 内存分配器分配的最大内存,代表used_memory的历史峰值
used_memory_peak_human 以人可读的格式展示内存消耗的峰值
used_memory_lua Lua引擎所消耗的内存
men_fragmentaion_ratio used_memory_rss/used_memory的比值,表示内存碎片率
mem_allocator Redis所使用的内存分配器。默认是jemalloc

    2.内存消耗具体划分。

    使用info命令只能查看redis一个全局的内存使用情况,但是对于每一个细节的地方不是更加细分。下图是Redis内存的划分

    

       1)自身内存:Redis自身启动所消耗的内存,不过这个内存消耗比较低。

      2)对象内存:Redis所缓存的key-value数据,包括五种数据结构(String,Hash,List,Set,Zset),BitMap等。

      3)缓冲内存:Redis主从复制的复制数据缓冲区,AOF缓冲区等。

      4)Lua内存:Lua引擎所消耗的内存,如果不使用则没有消耗。

      5)内存碎片:Redis向操作系统申请内存空间,操作系统所分配的内存和Redis所使用的内存空间的差值,这个差值就是一个碎片。

     

    3.子进程内存的消耗。

    Redis执行持久化工作由子进程执行,执行RDB和AOF文件写入等操作。

 

 

Redis内存淘汰策略

  Redis定义了以下几种策略:

  1. noeviction(默认策略):对于写请求不再提供服务,直接返回错误(DEL请求和部分特殊请求除外)。

  2. allkeys-lru:从所有key中使用LRU(最近最少使用)算法进行淘汰。

  3. volatile-lru:从设置了过期时间的key中使用LRU算法进行淘汰。

  4. allkeys-random:从所有key中随机淘汰数据。

  5. volatile-random:从设置了过期时间的key中随机淘汰。

  6. volatile-ttl:在设置了过期时间的key中,根据key的过期时间进行淘汰,越早过期的越优先被淘汰。

 

posted @ 2019-04-20 10:44  songguojun  阅读(296)  评论(0编辑  收藏  举报