• 【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的过期时间进行淘汰,越早过期的越优先被淘汰。

  • 相关阅读:
    Kafka使用代码设置offset值
    单机wordcount
    队列:队列在线程池等有限资源池中的应用
    栈:如何实现浏览器的前进和后退功能?
    Codeforces Beta Round #57 (Div. 2) E. Enemy is weak
    Codeforces Round #345 (Div. 1) A. Watchmen
    Codeforces Round #291 (Div. 2) B. Han Solo and Lazer Gun
    zoj4027 Sequence Swapping
    zoj4028 LIS
    zoj 3946 Highway Project
  • 原文地址:https://www.cnblogs.com/songgj/p/10740176.html
Copyright © 2020-2023  润新知