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