Redis常用内存优化手段与参数


(一)虚拟内存优化

说到Redis的内存优化放面,首先说下Redis的虚拟内存功能的优化方面,虚拟内存是作为 Redis 存储超出物理内存数据的一种数据在内存与磁盘换入换出的一个持久化策略,但是其内存管理成本也非常的高,并且我们后续会分析此种持久化策略并不成熟,所以要关闭 VM 功能,请检查你的 redis.conf 文件中 vm-enabled 为 no。
其次最好设置下 redis.conf 中的 maxmemory 选项,该选项是告诉 Redis 当使用了多少物理内存后就开始拒绝后续的写入请求,该参数能很好的保护好你的 Redis 不会因为使用了过多的物理内存而导致 swap,最终严重影响性能甚至崩溃。

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

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

含义是当 value 这个 Map 内部不超过多少个成员时会采用线性紧凑格式存储,默认是64,即 value 内部有64个以下的成员就是使用线性紧凑存储,超过该值自动转成真正的 HashMap。
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,可以根据自己的需要进行修改,修改后重新编译就可以了。


下一篇就说说Redis 的持久化机制奋斗



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
常用的MySQL调优手段包括以下几个方面: 1. 分析查询日志:使用工具如pt-query-digest或mysqlbinlog来分析MySQL的查询日志,可以了解到哪些查询语句执行效率较低,从而有针对性地进行优化。比如使用pt-query-digest工具可以通过执行"pt-query-digest --type=binlog mysql-bin.000001.sql"命令来分析binlog日志,使用mysqlbinlog工具可以通过执行"mysqlbinlog mysql-bin.000001 > mysql-bin.000001.sql"命令来分析binlog日志。 2. 优化慢查询:通过设置参数log_slow_queries和long_query_time来开启慢查询日志,并指定查询执行时间的临界值。根据慢查询日志可以找出执行时间较长的查询语句,然后通过优化查询语句、添加索引等方式提升其执行效率。 3. 使用索引:索引是提高数据库查询效率的重要手段。可以通过使用适当的索引来加快查询速度,比如可以通过执行"mysql> set global log_queries_not_using_indexes=on;"命令来记录没有使用索引的查询。 4. 优化数据库结构:合理的数据库结构设计对于提高查询效率至关重要。可以通过优化表结构、拆分大表、规范字段类型等方式来提升数据库的性能。 5. 调整内存设置:根据系统的实际情况,合理配置MySQL的内存参数,比如innodb_buffer_pool_size、key_buffer_size等,以提高数据库的读取性能。 6. 使用缓存技术:利用缓存技术如Redis、Memcached等,在高访问量的场景下,将一些频繁访问的数据缓存在内存中,可以大幅提高查询效率。 7. 并发连接控制:通过限制并发连接数,避免数据库资源被过多的连接占用,从而保证系统的稳定性和性能。 需要根据具体的业务场景和实际情况来选择和优化这些调优手段,以达到提升MySQL数据库性能的目的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [MySQL数据库优化的八种方式(经典必看)](https://blog.csdn.net/wuxianbing2012/article/details/122960591)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值