Redis最为常用的数据类型主要有以下五种:
- String 字符串
- Hash 哈希
- List 列表
- Set 集合
- Sorted set 有序集合
丰富的类型是 Redis 相对于 Memcached 等的一大优势
redis 内部的存储结构如图示:
在了解上文的基础上,进一步了解Redis 的内存模型,对 Redis 的使用有很大帮助。如:
- 估算 Redis 内存使用量,选择合理的机器配置
- 优化内存占用,选择最合适的数据结构和编码
- 快速定位问题,当 Redis 出现阻塞、内存占用等问题时
本文介绍在redis3.0的版本下, Redis 占用内存的情况及如何查询、不同的对象类型在内存中的编码方式、内存分配器(jemalloc)、简单动态字符串(SDS)、RedisObject 等
Redis 内存统计
通过 redis-cli 连接服务器 。使用 info memory
返回参数解释如下:
used_memory
Redis 分配器分配的内存总量(单位是字节),包括使用的虚拟内存(即 swap)。而used_memory_human是友好显示。
used_memory_human = used_memory/1024/1024
used_memory_rss
Redis 进程占据操作系统的内存(单位是字节),与 top 及 ps 命令看到的值是一致的。包括进程运行本身需要的内存、内存碎片等,但不包括虚拟内存。
used_memory 和 used_memory_rss,前者是从 Redis 角度得到的量,后者是从操作系统角度得到的量。
二者之所以有所不同,一方面是因为内存碎片和 Redis 进程运行需要占用内存,使得前者可能比后者小,另一方面虚拟内存的存在,使得前者可能比后者大。
因此 used_memory_rss 和 used_memory 的比例,便成了衡量 Redis 内存碎片率的参数;这个参数就是 mem_fragmentation_ratio。
mem_fragmentation_ratio
内存碎片比率,该值是 used_memory_rss / used_memory 的比值。
mem_fragmentation_ratio 一般大于 1,且该值越大,内存碎片比例越大