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内存两倍多。

  • 相关阅读:
    【算法笔记】一大堆的筛法
    #总结dvwa
    网页挂马,网页篡改
    博客换新啦(PS:https://npfs06.top)
    SSTI题目整理(未完)
    近期一些面试问题的整理(安全方向)
    漏洞复现(利用、SRC挖掘)合集(二)
    SRC漏洞-从零到1的历程记录
    PHP代码审计(Session反序列化 + Create_function漏洞)
    XSS+CSRF思考(BCTF2018
  • 原文地址:https://www.cnblogs.com/zhangyabin---acm/p/7500422.html
Copyright © 2011-2022 走看看