
获得徽章 0
- #挑战每日一条沸点#
如何查看redis内存碎片?
使用 info memory 命令即可查看 Redis 内存相关的信息。
Redis 内存碎片率的计算公式:mem_fragmentation_ratio (内存碎片率)= used_memory_rss (操作系统实际分配给 Redis 的物理内存空间大小)/ used_memory(Redis 内存分配器为了存储数据实际申请使用的内存空间大小)
也就是说,mem_fragmentation_ratio (内存碎片率)的值越大代表内存碎片率越严重。
通常情况下,我们认为 mem_fragmentation_ratio > 1.5 的话才需要清理内存碎片。 mem_fragmentation_ratio > 1.5 意味着你使用 Redis 存储实际大小 2G 的数据需要使用大于 3G 的内存。展开评论点赞 - #挑战每日一条沸点#
redis内存碎片出现原因?
Redis的内存分配机制。Redis使用了一种内存分配机制,称为jemalloc。该机制在内存分配时,会将一块内存空间划分成多个大小相等的块。当某个块被释放时,如果该块周围的块都被占用,那么该块就会成为一块内存碎片。随着Redis中不断地进行内存分配和释放,内存碎片会逐渐增加。
Redis中内存淘汰机制。为了保证Redis中的内存使用不超过预设的阈值,Redis会采用内存淘汰机制来释放已经过期的或者不常用的key。当某一个key被删除时,如果该key所占用的内存空间不能被其他key占用,那么就会产生内存碎片。
Redis中数据类型的特点。Redis中的不同数据类型,占用的内存空间大小不同。例如,字符串类型占用的内存空间大小是固定的,而哈希表类型的内存空间大小是不固定的。当不同数据类型的key同时存在时,会产生大量的不同大小的内存块,从而导致内存碎片。展开评论点赞 - #挑战每日一条沸点#
redis解决bigkey措施?
解决措施:
删除大key
当Redis版本大于4.0时,可使用UNLINK命令安全地删除大Key,该命令能够以非阻塞的方式,逐步地清理传入的Key。
当Redis版本小于4.0时,避免使用阻塞式命令KEYS,而是建议通过SCAN命令执行增量迭代扫描key,然后判断进行删除。
压缩和拆分key
当vaule是string时,比较难拆分,则使用序列化、压缩算法将key的大小控制在合理范围内,但是序列化和反序列化都会带来更多时间上的消耗。
当value是string,压缩之后仍然是大key,则需要进行拆分,一个大key分为不同的部分,记录每个部分的key,使用multiget等操作实现事务读取。
当value是list/set等集合类型时,根据预估的数据规模来进行分片,不同的元素计算后分到不同的片展开评论点赞