ARM 支持
在 ARM CPU 架构上探索 Redis
Redis 4.0 及更高版本通常支持 ARM 处理器,特别是 Raspberry Pi,作为主要平台。Redis 的每个新版本都会在 Pi 环境中进行测试,我们使用有关受支持设备和其他有用信息更新此文档页面。虽然 Redis 确实可以在 Android 上运行,但未来我们期待将我们的测试工作扩展到 Android,使其也成为官方支持的平台。
我们认为 Redis 非常适合物联网和嵌入式设备,原因有以下几个
- Redis 具有非常小的内存占用和 CPU 要求。它可以在 Raspberry Pi Zero 等小型设备中运行,而不会影响整体性能,在使用少量内存的同时,为许多用例提供良好的性能。
- Redis 的数据结构通常是建模物联网/嵌入式用例的理想方式。一些示例包括累积时间序列数据、接收或排队命令以执行或响应以发回远程服务器,等等。
- 在 Redis 中对数据进行建模非常有用,以便为必须非常快速响应的设备或远程服务器脱机时做出设备内决策。
- Redis 可以用作设备中运行的进程之间的通信系统。
- Redis 的仅追加文件存储非常适合 SSD 卡。
- Redis 5.0 及更高版本中包含的流数据结构是专门为时间序列应用程序设计的,并且内存开销非常低。
Redis /proc/cpu/alignment 要求
ARM 上的 Linux 允许捕获未对齐的访问并在内核内部修复它们,以便继续执行有问题的程序,而不是生成 SIGBUS
。Redis 4.0 及更高版本已修复,以避免任何类型的未对齐访问,因此无需为此内核配置设置特定值。即使内核对齐修复设置为禁用,Redis 也应按预期运行。
在 Pi 中构建 Redis
- 下载 Redis 4.0 或更高版本。
- 照常使用
make
创建可执行文件。
该过程中没有什么特别之处。唯一不同的是,默认情况下,Redis 使用 libc
分配器,而不是像在其他基于 Linux 的环境中那样默认使用 jemalloc
。这是因为我们相信,对于嵌入式设备中的小用例,内存碎片不太可能成为问题。此外,ARM 上的 jemalloc
可能不如 libc
分配器经过充分测试。
性能
Redis 的性能测试是在 Raspberry Pi 3 和 Pi 1 型号 B 上执行的。两款 Pi 在交付性能方面存在相当大的差异。基准测试是通过环回接口执行的,因为大多数用例可能在设备内部使用 Redis,而不是通过网络使用。以下数字是使用 Redis 4.0 获得的。
Raspberry Pi 3
- 测试 1:500 万次写入,100 万个键(键之间均匀分布)。无持久性,无管道。28,000 次/秒。
- 测试 2:与测试 1 相同,但使用 8 个操作的组进行管道处理:80,000 次/秒。
- 测试 3:与测试 1 相同,但启用 AOF,fsync 1 秒:23,000 次/秒
- 测试 4:与测试 3 相同,但正在进行 AOF 重写:21,000 次/秒
Raspberry Pi 1 型号 B
- 测试 1:500 万次写入,100 万个键(键之间均匀分布)。无持久性,无管道。2,200 次/秒。
- 测试 2:与测试 1 相同,但使用 8 个操作的组进行管道处理:8,500 次/秒。
- 测试 3:与测试 1 相同,但启用 AOF,fsync 1 秒:1,820 次/秒
- 测试 4:与测试 3 相同,但正在进行 AOF 重写:1,000 次/秒
上述基准测试指的是简单的 SET
/GET
操作。对于所有 Redis 快速操作(不在线性时间内运行),性能类似。但是,有序集合可能显示稍慢的数字。