*ARM 上的 Redis

Redis 4 和 Redis 5 版本都支持 ARM 处理器,特别是树莓派,作为主要平台,就像 Linux/x86 一样。这意味着 Redis 的每个新版本都在 Pi 环境中进行测试,而且我们会更新本文档页面,提供有关支持设备和其他有用信息。虽然 Redis 已经在 Android 上运行,但未来我们期望将测试工作扩展到 Android,使其也成为官方支持的平台。

我们相信 Redis 非常适合 IoT 和嵌入式设备,原因如下:

  • Redis 具有非常小的内存占用和 CPU 要求。它可以在像树莓派 Zero 这样的小型设备上运行,而不会影响整体性能,仅使用少量内存,同时可以为许多用例提供良好的性能。
  • Redis 的数据结构通常是建模 IoT/嵌入式用例的好方法。例如,为了累积时间序列数据,接收或排队要执行的命令或要发送回远程服务器的响应等。
  • 在 Redis 内部建模数据对于必须为响应非常快的设备做出决策,或当远程服务器离线时,非常有用。
  • Redis 可以用作设备中运行的进程之间的进程间通信系统。
  • Redis 的仅追加文件存储非常适合 SSD 卡。
  • Redis 5 流数据结构是专门为时间序列应用程序设计的,具有非常低的内存开销。

*Redis /proc/cpu/alignment 要求

ARM 上的 Linux 允许捕获未对齐访问并在内核内部修复它们,以便继续执行有问题的程序而不是生成 SIGBUS。Redis 4.0 及更高版本已修复,以避免任何类型的未对齐访问,因此不需要为这个内核配置设置特定值。即使禁用了内核对齐修复,Redis 也应该按预期运行。

*在 Pi 上构建 Redis

  • 下载 Redis 版本 4 或 5。
  • 像平常一样使用 make 创建可执行文件。

这个过程没有什么特别的。唯一的区别是,默认情况下,Redis 使用 libc 分配器,而不是像在其他基于 Linux 的环境中那样默认使用 Jemalloc。这是因为我们认为对于嵌入式设备内部的小型用例,内存碎片不太可能成为问题。此外,Jemalloc 在 ARM 上可能不如 libc 分配器经过充分测试。

*性能

Redis 的性能测试在 Raspberry Pi 3 和原始型号 B Pi 上进行。两个 Pi 在交付的性能方面差异相当大。基准测试通过回环接口进行,因为大多数用例可能会从设备内部使用 Redis,而不是通过网络。以下数字是使用 Redis 4 获得的。

树莓派 3:

  • 测试 1:500 万次写入,100 万个键(在键之间均匀分布)。无持久化,无管道。28,000 次操作/秒。
  • 测试 2:与测试 1 相同,但使用每组 8 个操作的管道:80,000 次操作/秒。
  • 测试 3:与测试 1 相同,但启用 AOF,每秒 fsync:23,000 次操作/秒
  • 测试 4:与测试 3 相同,但正在进行 AOF 重写:21,000 次操作/秒

树莓派 1 型号 B:

  • 测试 1:500 万次写入,100 万个键(在键之间均匀分布)。无持久化,无管道。2,200 次操作/秒。
  • 测试 2:与测试 1 相同,但使用每组 8 个操作的管道:8,500 次操作/秒。
  • 测试 3:与测试 1 相同,但启用 AOF,每秒 fsync:1,820 次操作/秒
  • 测试 4:与测试 3 相同,但正在进行 AOF 重写:1,000 次操作/秒

上述基准测试指的是简单的 SET/GET 操作。对于所有 Redis 快速操作(非线性时间运行)性能类似。然而有序集合可能显示稍慢的数字。