2019独角兽企业重金招聘Python工程师标准>>>

常用内存优化手段与参数

redis的性能如何是完全依赖于内存的,所以我们需要知道如何来控制和节省内存。

首先最重要的一点是不要开启Redis的VM选项,即虚拟内存功能,这个本来是作为Redis存储超出物理内存数据的一种数据在内存与磁盘换入换出的一个持久化策略,但是其内存管理成本非常的高,所以要关闭VM功能,请检查你的redis.conf文件中 vm-enabled 为 no。

其次最好设置下redis.conf中的maxmemory选项,该选项是告诉Redis当使用了多少物理内存后就开始拒绝后续的写入请求,该参数能很好的保护好你的Redis不会因为使用了过多的物理内存而导致swap,最终严重影响性能甚至崩溃。

另外Redis为不同数据类型分别提供了一组参数来控制内存使用,我们知道Redis Hash是value内部为一个HashMap,如果该Map的成员数比较少,则会采用类似一维线性的紧凑格式来存储该Map, 即省去了大量指针的内存开销,这个参数控制对应在redis.conf配置文件中下面2项:

hash-max-zipmap-entries 64 
hash-max-zipmap-value 512

1·  含义是当value这个Map内部不超过多少个成员时会采用线性紧凑格式存储,就相当于Map里面存Map,默认是64,即value内部有      64个以下的成员就是使用线性紧凑存储,超过该值自动转成真正的HashMap。

2·  hash-max-zipmap-value 含义是当 value这个Map内部的每个成员值长度不超过多少字节就会采用线        性紧凑存储来节省空间。

以上2个条件任意一个条件超过设置值都会转换成真正的HashMap,也就不会再节省内存了,那么这个值是不是设置的越大越好呢,答案当然是否定的,
HashMap的优势就是查找和操作的时间复杂度都是O(1)的,而放弃Hash采用一维存储则是O(n)的时间复杂度,如果成员数量很少,则影响不大,否则会严重影响性能,所以要权衡好这个值的设置,总体上还是最根本的时间成本和空间成本上的权衡。

同样类似的参数还有:

list-max-ziplist-entries 512
说明:list数据类型多少节点以下会采用去指针的紧凑存储格式。

list-max-ziplist-value 64 
说明:list数据类型节点值大小小于多少字节会采用紧凑存储格式。

set-max-intset-entries 512 
说明:set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储。

Redis内部实现没有对内存分配方面做过多的优化,在一定程度上会存在内存碎片,不过大多数情况下这个不会成为Redis的性能瓶颈,
不过如果在Redis内部存储的大部分数据是数值型的话,Redis内部采用了一个shared integer的方式来省去分配内存的开销,
即在系统启动时先分配一个从1~n 那么多个数值对象放在一个池子中,如果存储的数据恰好是这个数值范围内的数据,则直接从池子里取出该对象,
并且通过引用计数的方式来共享,这样在系统存储了大量数值下,也能一定程度上节省内存并且提高性能,
这个参数值n的设置需要修改源代码中的一行宏定义REDIS_SHARED_INTEGERS,该值默认是10000,可以根据自己的需要进行修改,修改后重新编译就可以了。

转载于:https://my.oschina.net/u/3526783/blog/1154004

redis常用优化及持久化到硬盘相关推荐

  1. Redis基础 概念 数据类型 常用指令 Jedis 持久化

    Redis基础 概念 数据类型 常用指令 Jedis 持久化 1. Redis 简介 1.1 NoSQL概念 1.1.1 问题现象 1.1.2 NoSQL的概念 1.2 Redis概念 1.2.1 r ...

  2. 一文带你详解Redis常用的数据类型以及面试常碰到的数据持久化机制原理

    前言 关于Redis的知识点总结了一个思维导图分享给大家: 简介 Redis是一种面向"key-value"类型数据的分布式NoSQL数据库系统,支持五种数据类型格式:** Str ...

  3. Redis 无法持久化到硬盘错误:not able to persist on disk

    Redis 无法持久化到硬盘错误:not able to persist on disk 一.报错: 二.搜索网上的解决方案,大概有三种: 1. 直接忽略形 2. 解决问题形 3. 内存型问题处理: ...

  4. 首长,Redis性能优化十三条军规立好了,请过目~

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 前言 Redis作为高性能的内存数据库,在大数据量的情况下 ...

  5. Redis 中两种持久化机制详解

    Redis 持久化机制(快照.AOF) 快照 (Snapshot) 1. 客户端方式之 BGSAVE(多线程执行) 2. 客户端方式之 SAVE(单线程执行) 3. 服务器配置方式之 配置快照触发条件 ...

  6. Redis 性能优化 13 条军规

    前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻谨记优化铁则,才能使得Redis性能发挥到极致. 本文将会介绍十三条性能优化军规,开发过程中只要按照执行, ...

  7. 值得一看的35个Redis常用问题总结

    1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库 ...

  8. 阿里Java岗二面:Redis了解?说说持久化机制及RDB/AOF应用场景分析

    Redis是一种面向"key-value"类型数据的分布式NoSQL数据库系统,具有高性能.持久存储.适应高并发应用场景等优势.它虽然起步较晚,但发展却十分迅速. 文章主要包含二个 ...

  9. Redis性能优化十三条军规立好了,请过目~

    前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻谨记优化铁则,才能使得Redis性能发挥到极致. 本文将会介绍十三条性能优化军规,开发过程中只要按照执行, ...

最新文章

  1. 企业 SpringBoot 教程 (七)springboot开启声明式事务
  2. c++ 四舍五入保留两位小数_Excel中保留小数点位数
  3. android 图片特征提取比对_判断ImageView当前的图片是哪个图片,然后比对资源文件的操作...
  4. 【树莓派学习笔记】四、OpenCV的安装与卸载
  5. juery的跨域请求2
  6. Oracle11g新特性:在线操作功能增强-Oracle11g的只读表功能
  7. 32位java jre_JRE8 32位|JRE 8 32位下载 Update 131官方版 - 121下载站
  8. SQLserver C#将图片以二进制方式存储到数据库,再从数据库读出图片
  9. Lua中handler方法的使用(亲测版)
  10. AspNet WebApi OData 学习
  11. 徐州医科大学党委书记夏有兵一行莅临云创
  12. 记录—java获取服务器的信息
  13. 教大家如何选购直播声卡
  14. AMESim 14.0 win10环境下安装教程
  15. VsCode下载,使用国内镜像秒下载
  16. Kali-WIFI攻防(三)----wifite自动化WEP/WPA破解工具
  17. linux生成.so库,调用.so库函数
  18. 删除xx天之前的文件夹python
  19. 准程序猿的创意(二)
  20. 无法下载图片 App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insec

热门文章

  1. 10.2.2移动产品离线功能等具体解释----暨4月8日移动《在离线一体化》公开课Qamp;A...
  2. Python微型Web框架Bottle源码分析
  3. 使用forName动态加载类文件
  4. VMM系列之使用VMM服务器构建 Hyper-V主机(2)
  5. 知道这20个正则表达式,能让你少写1,000行代码
  6. 《C语言及程序设计》实践参考——分数的累加
  7. 巧妙共享Win7/Vista/XP文件夹权限
  8. [转]建一个XMLHttpRequest对象池
  9. ClassLoader的双亲委派模型
  10. [汇编] 001基础知识-什么是汇编