败家玩意儿!Redis 竟然浪费了这么多内存!
作为内存数据库,内存空间大小对于 Redis 来说是至关重要的。内存越多,意味着存储的数据也会越多。但是不知道你有没有遇到过这样的情况,明明空间很大,但是内存的使用却不是很理想。
为什么会出现这样的情况呢?这期我们就来看看这个"诡异"的事件。
坐好了,准备发车!
- 思维导图 -
used_memory:已经使用了的内存大小。 used_memory_rss:redis 物理内存的大小。 mem_fragmentation_ratio:内存碎片率。
什么是内存碎片
内存碎片导致的原因
如何解决内存碎片
active-defrag-ignore-bytes 100mb: 碎片达到100MB时,开启清理。 active-defrag-threshold-lower 10: 当碎片超过 10% 时,开启清理。 active-defrag-threshold-upper 100: 内存碎片超过 100%,尽最大清理。
active-defrag-cycle-min 5:
active-defrag-cycle-max 75:
总结
在命令行执行 info memory 即可查看 Redis 内存相关信息。根据内存碎片率可以在一定时机内进行清理碎片清理。
写入数据时,Redis 为了减少分配次数在分配内存是根据固定的大小来划分内存空间的。修改数据时会释放或占用额外的内存空间,删除数据时会释放空间。这样就会产生不同程度的内存碎片。
通过重启 Redis 的方式进行处理,如果没有持久化可能会导致事故。在持久化情况下,恢复速度需要取决于文件的大小。 通过空间置换方式,也就是将已使用的内存数据重新整理到一起。
有道无术,术可成;有术无道,止于术
欢迎大家关注Java之道公众号
好文章,我在看❤️
评论