使用优化的经验总结
内存管理优化Redis的Hash值一个HashMap里面。如果map的成员数目相对较小,则将使用类似的一维线性紧凑格式存储map,从而节省大量指针内存开销。此参数控制以下2项redis.conf配置文件。
哈希最大zipmap条目64 zipmap哈希最大值512
当值映射不超过多个成员时,它将以线性紧凑格式存储。默认值是64。即,价值64以下的成员,即线性紧凑存储使用自动转换为真正的HashMap超越价值。
最大zipmap哈希值意味着线性紧凑存储用于存储空间时,值图中每个成员的值的长度不超过一个字节数。
以上2个条件任意一个条件超过设定值将被转换为真正的HashMap,也不会节省内存,那么这个值没有设置好,答案当然是否定的,优势的HashMap是发现和操作的时间复杂度为O(1)。而不是使用哈希一维存储是O(n)的时间复杂度,如果
如果成员数量少,则影响不大,否则将严重影响性能。因此,平衡价值是时间成本和空间成本之间最基本的权衡。
名单最大ziplist值64最大ziplist条目列表512
列表数据类型节点值大小小于将使用紧凑存储格式、列表数据类型以及将使用多个节点指向以下格式的紧凑存储格式的字节数。
内存分配:
对Redis的内部实现不做过多的内存分配的优化(相对于Memcache),在一定程度上,会有一个记忆的碎片,但在大多数情况下,这不会成为Redis的性能瓶颈,但如果大部分数据redis内存数值,Redis使用共享的整数的方法为了节省内存分配的开销,即在系统启动时分配一个1 ~ N从池塘中的许多数值的物体,如果存储的数据是准确的值的范围内的数据,直接从池中删除的对象,并引用计数的方式来分享,所以在系统中存储了大量的数据,但也在一定程度上节省了内存,提高性能,需要修改的参数在R n的宏定义settingsedis_shared_integers源代码,默认值是10000,可以根据自己的需要进行修改,修改,重新编译它。
持久性机制:
时间快照(快照):
持续的方式实际上是内部使用,定时器事件,在固定的时间间隔检查时间和当前数据的时间的变化是否满足触发条件的持续形态出现,如果操作系统通过fork创建一个子进程,这个进程是默认将与父亲的过程共享相同的地址空间,那么你可以经由过程遍历整个内存到内存的操作,而主要的过程仍然可以提供服务,当有与内存页面按照编写的操作系统(页)在复制单位写过程保证不会互相影响。
持久性的主要缺点是,时间快照只是表示一段时间的内存映射,因此系统重新启动将丢失最后一次快照和重新启动之间的所有数据。
基于语句追加方法(一):
这一方法实际上类似于MySQL的语句基础binlog模式,即每一个命令改变Redis的内存中的数据将被追加到一个日志文件,也就是说,该日志文件是redis的持久化数据。
的主要缺点是额外的日志文件可能会导致体积过大,当系统重新启动时恢复数据,如果是加载数据多种方式会很慢,几十个G的数据可能需要几个小时来完成加载,当然这一次不是因为磁盘文件读取速度慢,但是,因为所有的命令读取内存中的表演一次。此外,每个命令写入日志,阅读和写作将性能Redis AOF使用的减少。
可以考虑将数据保存到不同的实例,对每个实例的2G的内存大小,以避免在一个篮子里的鸡蛋,这可以减少缓存失效的影响,并能加快数据恢复的速度,但也带来了一些系统设计的复杂度。
Redis的持久的崩溃问题:
Redis的在线体验的人会发现,Redis是经常使用的物理内存,但也不超过实际物理内存的总容量发生失稳或问题甚至崩溃,有人认为是基于快照持久内存引起的加入导致叉系统,这种观点是不准确的,因为写入时复制叉的操作系统的机制称为基于网页的单位,也就是只写脏页将被复制,但你的系统不会在短时间内所有的页面都写的复制,所以对Redis的崩溃的原因是什么
答案是使用缓冲IO redis的持久性,所谓的缓冲IO redis是指持续性文件的写入和读出操作将使用物理内存的页面缓存,而大多数数据库系统会使用直接IO绕过页面缓存层维护一个数据缓存,当持久化文件redis是太大(尤其是快照文件),和读写,文件的磁盘上的数据将被加载到物理内存作为文件的一个缓存层的操作系统,并在实际的数据存储和数据管理这一层的Redis缓存是重复的,尽管内核在物理内存紧张时拒绝做网页的缓存,但是内核可能认为这是一个页面缓存更重要T,但让你开始交换过程,然后系统会不稳定或者你开始appearcrumble。我们的经验是,你使用物理内存会更危险的时候,它使用超过3 / 5的总内存容量。
总结:
1,根据业务需求选择合适的数据类型,并为不同的应用场景设置相应的紧凑存储参数。
2,当业务场景不需要数据持久性时,可以通过关闭所有持久化方法来获得最佳性能和最大内存使用量。
3, if we need to use persistence, we can choose whether to use a virtual memory or diskstore mode based on whether we can tolerate some data lost in restart or snapshot.
4、不允许你使用机器的机器物理内存使用超过实际内存3 / 5的总金额。
的redis.conf maxmemory选项,选项是告诉Redis使用时的物理内存的数量后随访开始拒绝写请求,该参数能很好地保护你的redis互换不会导致物理内存,因为太多的使用,最终严重影响性能,甚至崩溃。
虚拟机在redis.conf文件启用没有
以上Redis的优化经验总结是萧边分享你的全部内容。我希望能给你一个参考,希望你能支持它。