ARM 支持
探索 ARM CPU 架构上的 Redis
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。这是因为我们认为对于嵌入式设备内部的小型用例,内存碎片不太可能成为问题。此外,jemalloc 在 ARM 上的测试可能不如 libc 分配器充分。
性能
Redis 的性能测试是在 Raspberry Pi 3 和 Pi 1 Model B 上进行的。两者在性能方面的差异相当大。基准测试通过环回接口执行,因为大多数用例可能从设备内部使用 Redis,而不是通过网络。以下数字是使用 Redis 4.0 获得的。
Raspberry Pi 3
- 测试 1:500 万次写入,100 万个键(键均匀分布)。无持久化,无流水线。28,000 ops/秒。
- 测试 2:类似于测试 1,但使用 8 个操作为一组的流水线:80,000 ops/秒。
- 测试 3:类似于测试 1,但启用 AOF,每秒 fsync:23,000 ops/秒。
- 测试 4:类似于测试 3,但正在进行 AOF 重写:21,000 ops/秒。
Raspberry Pi 1 Model B
- 测试 1:500 万次写入,100 万个键(键均匀分布)。无持久化,无流水线。2,200 ops/秒。
- 测试 2:类似于测试 1,但使用 8 个操作为一组的流水线:8,500 ops/秒。
- 测试 3:类似于测试 1,但启用 AOF,每秒 fsync:1,820 ops/秒。
- 测试 4:类似于测试 3,但正在进行 AOF 重写:1,000 ops/秒。
上述基准测试指的是简单的 SET
/GET
操作。对于所有 Redis 的快速操作(非线性时间运行的操作),性能相似。然而,有序集合的性能可能略慢。