zoukankan      html  css  js  c++  java
  • redis内存优化方法

    先来认识2个redis配置参数

    hash-max-ziplist-entries : hash内部编码压缩列表的最大值,默认512

    hash-max-zipmap-value : hash内部编码压缩列表单个key的最大值,默认64字节。

    这是hash的配置,list,set,zset也有类似的配置参数。

    先说结论:总结redis节约内存的方法。

    1,使用对象共享池优化小整数对象。

    2,数据优先使用整数,比字符串更节省空间。

    3,操作优化。尽量避免字符串的追加操作,因为字符串存在预分配机制。追加操作后字符串对象会分配一倍的容量作为于预留空间。

    4,编码优化。list,hash,set,zset尽可能使用ziplist编码。好处是内存下降,坏处是操作变慢。一般大小不超过1000。

    5,控制键的数量,100万idfa映射到1000个hash中,每个hash保存1000个元素。因为同样的数据使用ziplist编码比存储string类型节约空间。

    原因:

    1,ziplist的内部表现是尽愁排列的一块连续内存数组。hashtable不是,占内存更多。

    2,同样的数据使用ziplist编码的hash存储比string类型节约内存。

    实验验证================

    服务器redis参数配置:

    hash-max-ziplist-entries 512

    hash-max-ziplist-value 64

    =============================

    验证一:验证hastable和ziplist编码的内存差异。

    1,200个hash,每个500个field,value

    fied  value

    000001 124F9D54-D107-4F7D-ABAF-E37DB7F1712E

    操作前redis大小:

    used_memory:1839072

    used_memory_human:1.75M

    写入200个ziplist编码的hash操作后。

    used_memory:6772320

    used_memory_human:6.46M

    内存大小:4.71M

    2,100000个idfa用hashtable编码存成1个hash。

    操作后

    used_memory:21137248

    used_memory_human:20.16M

    内存大小13.7M

    结论:编码优化可以显著降低内存。使用hashtable占内存是ziplist的三倍。

    ===========================

    验证2,控制键的个数来降低内存。

    10万个idfa存成string格式。

    # Memory

    used_memory:33383776

    used_memory_human:31.84M

    内存大小11.68M

    结论:相同数量的string是ziplist编码的hash内存两倍多。

  • 相关阅读:
    AtCoder Regular Contest 093
    AtCoder Regular Contest 094
    G. Gangsters in Central City
    HGOI 20190711 题解
    HGOI20190710 题解
    HGOI 20190709 题解
    HGOI 20190708 题解
    HGOI20190707 题解
    HGOI20190706 题解
    HGOI 20190705 题解
  • 原文地址:https://www.cnblogs.com/zhangyabin---acm/p/7500422.html
Copyright © 2011-2022 走看看