先来认识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内存两倍多。

redis内存优化方法的更多相关文章

  1. Android 中对于图片的内存优化方法

    Android 中对于图片的内存优化方法,需要的朋友可以参考一下     1. 对图片本身进行操作 尽量不要使用 setImageBitmap.setImageResource. BitmapFact ...

  2. 如何用分布式缓存服务实现Redis内存优化

    Redis是一种支持Key-Value等多种数据结构的存储系统,其数据特性是“ALL IN MEMORY”,因此优化内存十分重要.在对Redis进行内存优化时,先要掌握Redis内存存储的特性比如字符 ...

  3. [转]探索 Android 内存优化方法

    前言 这篇文章的内容是我回顾和再学习 Android 内存优化的过程中整理出来的,整理的目的是让我自己对 Android 内存优化相关知识的认识更全面一些,分享的目的是希望大家也能从这些知识中得到一些 ...

  4. Redis内存优化memory-optimization

    https://redis.io/topics/memory-optimization  官方文档 一.特殊编码: 自从Redis 2.2之后,很多数据类型都可以通过特殊编码的方式来进行存储空间的优化 ...

  5. Redis内存分析方法

    一般会采用 bgsave 生成 dump.rdb 文件,再结合 redis-rdb-tools 和 sqlite 来进行静态分析. BGSAVE:在后台异步(Asynchronously)保存当前数据 ...

  6. 解决Apache长时间占用内存大的问题,Apache 内存优化方法

    问:为什么服务器在连续运行多天后或访问峰值后,进程中的一个Apache.exe占用内存几百兆不减少?答:用记事本打开apache2\conf\httpd.conf,我在centos5上装了kloxo, ...

  7. Redis系列--内存淘汰机制(含单机版内存优化建议)

    https://blog.csdn.net/Jack__Frost/article/details/72478400?locationNum=13&fps=1 每台redis的服务器的内存都是 ...

  8. redis的内存优化【转】

    Redis所有的数据都在内存中,而内存又是非常宝贵的资源.对于如何优化内存使用一直是Redis用户非常关注的问题.本文让我们深入到Redis细节中,学习内存优化的技巧.分为如下几个部分: 一.redi ...

  9. Redis之内存优化

    Redis所有的数据都存在内存中,当前内存虽然越来越便宜,但跟廉价的硬盘相比成本还是比较昂贵,因此如何高效利用Redis内存变得非常重要.高效利用Redis内存首先需要理解Redis内存消耗在哪里,如 ...

随机推荐

  1. Django--django-admin.py on windows does not work

    使用命令:Python django-admin.py startproject projectname 使用django-admin.py startapp myblog没有创建新的app,使用下面 ...

  2. webpack新版本4.12应用九(配置文件之多种配置类型)

    除了导出单个配置对象,还有一些方式满足其他需求. 导出为一个函数 最终,你会发现需要在开发和生产构建之间,消除 webpack.config.js 的差异.(至少)有两种选项: 作为导出一个配置对象的 ...

  3. (转)pipe row的用法, Oracle split 函数写法.

    本文转载自:http://www.cnblogs.com/newsea/archive/2010/12/14/1905482.html 关于 pipe row的用法2009/12/30 14:53 = ...

  4. Window中的内存地址(小知识)

    现在的编辑器大部分工作都是内存管理托管型,所以很少直接对Window的内存地址直接管理了. Window中的内存地址主要是以16进制数字体现的,当操作系统为32位时,那么每个内存地址为2的32次方,也 ...

  5. Centos7 超简单将Centos的yum源更换为国内的阿里云源

    1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载新的CentOS-Base ...

  6. 优化深度神经网络(一) dropout 初始化

    Coursera吴恩达<优化深度神经网络>课程笔记(1)-- 深度学习的实用层面 1. Train/Dev/Test sets  训练集(Training sets).验证集(Develo ...

  7. java rest jax-rs 漫谈

    rest是什么 REST是英文RepresentationalState Transfer 的缩写,有中文翻译为“具象状态传输”.REST 这个术语是由 RoyFielding 在他的博士论文< ...

  8. numpy的一些用法

    安装numpy windows安装pip即可,具体方法参考pip官网 http://pip-cn.readthedocs.io/en/latest/installing.html 安装方法:pip i ...

  9. maven项目引入外部jar包的三种方式

    方式1:dependency 本地jar包 <dependency> <groupId>com.hope.cloud</groupId> <!--自定义--& ...

  10. zookpeer的安装与配置

    zookpeer集群搭建: 集群搭建过程简介: 这里准3台服务器做zk(zookpeer下面简称zk)集群搭建: zk集群由一个leader和两个follower组成,对外端口默认为2181端口,关于 ...