Redis默认内存分配策略探究(redis的默认内存大小)

Redis是目前比较流行的缓存数据库之一,最初是由Salvatore Sanfilippo开发的一个键值对存储数据库。它具有高并发读写、高可用性、持久化存储、多种数据结构支持等特点,广泛应用于网站、移动应用、物联网等领域。

Redis默认的内存分配策略主要有jemalloc和libc malloc两种。在编译Redis时可以通过选项–with-malloc选则使用哪种内存分配库。下面我们来对比一下这两种内存分配库的优缺点。

1. jemalloc

jemalloc是freebsd版本中默认的内存分配库,也是Redis默认使用的内存分配库。它具有以下优点:

(1)提供了多线程环境下的内存分配优化,可以避免内存碎片;

(2)拥有专门的内存分配器线程,可以为线程池、定时器线程等提供内存;

(3)提供内存分配计数和内存泄漏检测等工具。

缺点是:

(1)相对于libc malloc来说占用的内存更多,因为jemalloc预留了很多内存用于高并发场景下的内存分配。

(2)与其他分配库兼容性不高。

(3)不适用所有的应用场景。

jemalloc的使用可以提升Redis的性能,减少运行时内存碎片问题。当然,在不适用jvm、php等环境时可以选择libc malloc。

2. libc malloc

libc malloc是Linux系统默认的内存分配库,它的优点是:

(1)与其他开源模块兼容性较好;

(2)适用范围比较广泛,可用于很多应用场景。

它的缺点是:

(1)原生的libc malloc在多线程下存在性能问题,需要使用一些多线程改进版本的malloc库;

(2)无法处理高并发场景中的内存分配问题。

在使用libc malloc时,需要考虑锁竞争的问题,可以选择Tlsf好Tcmalloc等多线程优化版本。

Redis默认使用的是jemalloc,若要切换成libc malloc,只需要在编译时加上–with-malloc选项即可。

$ make MALLOC=libc

当然,Redis在默认的情况下就已经默认使用了jemalloc,所以并不需要进行改动。

本篇文章介绍了Redis中默认的内存分配策略jemalloc和libc malloc的优缺点和适用范围。在实际生产中,开发者可以根据自己的业务需求和服务器环境选择合适的内存分配策略。


数据运维技术 » Redis默认内存分配策略探究(redis的默认内存大小)