Redis
RuxOS 支持在 Qemu 上运行 Redis 服务器端。
拉取 Redis 目录
运行:
git clone https://github.com/syswonder/rux-redis ./apps/c/redis/
该命令将拉取 Redis 相关的 makefile 以及 patch 文件到 apps/c/redis
目录下。
创建文件系统镜像
在 RuxOS 根目录运行:
make disk_img
该命令会在根目录生成一个文件系统(fatfs)镜像 disk.img
,传给 qemu 使用。
启动 Redis-Server
运行下面的命令,会在 5555 端口上启动 Redis 服务器端。
make A=apps/c/redis/ LOG=error NET=y BLK=y ARCH=aarch64 SMP=4 ARGS="./redis-server,--bind,0.0.0.0,--port,5555,--save,\"\",--appendonly,no,--protected-mode,no,--ignore-warnings,ARM64-COW-BUG" run
参数解释:
-
A
: 该参数指向 Redis 应用所在的目录。 -
LOG
:LOG
表示输出的日志等级,更低的日志等级意味着更详细的输出。可选包含:error
,warn
,info
,debug
,trace
。 -
NET
: 该参数用于使能 qemu 的 virtio-net。 -
BLK
: 该参数用于使能 qemu 的 virtio-blk。 -
ARCH
:ARCH
表示将 RuxOS 运行在何种架构上,可选架构参数包括:x86_64
,aarch64
,riscv64
. -
SMP
:SMP
用于使能 RuxOS 的多核 feature,紧跟着的数字表示启动的核数。 -
ARGS
:ARGS
提供 redis-server 运行所需要的参数。这里表示将 redis-server 运行在 qemu 的 0.0.0.0:5555,且不对数据做周期性的持久化。
通过运行上述命令,Redis 的服务器端在端口 5555 上启动,启动示例如下:
8888888b. .d88888b. .d8888b.
888 Y88b d88P" "Y88b d88P Y88b
888 888 888 888 Y88b.
888 d88P 888 888 888 888 888 888 "Y888b.
8888888P" 888 888 `Y8bd8P' 888 888 "Y88b.
888 T88b 888 888 X88K 888 888 "888
888 T88b Y88b 888 .d8""8b. Y88b. .d88P Y88b d88P
888 T88b "Y88888 888 888 "Y88888P" "Y8888P"
arch = aarch64
platform = aarch64-qemu-virt
target = aarch64-unknown-none-softfloat
smp = 4
build_mode = release
log_level = error
[1717404360.021450 axfs_ramfs::dir:55] AlreadyExists sys
2:C 03 Jun 2024 08:46:00.077 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
2:C 03 Jun 2024 08:46:00.078 # Redis version=7.0.12, bits=64, commit=00000000, modified=1, pid=2, just started
2:C 03 Jun 2024 08:46:00.079 # Configuration loaded
2:M 03 Jun 2024 08:46:00.085 * Increased maximum number of open files to 10032 (it was originally set to 1024).
2:M 03 Jun 2024 08:46:00.085 * monotonic clock: POSIX clock_gettime
2:M 03 Jun 2024 08:46:00.104 * Running mode=standalone, port=5555.
2:M 03 Jun 2024 08:46:00.104 # Server initialized
2:M 03 Jun 2024 08:46:00.104 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condit.
2:M 03 Jun 2024 08:46:00.110 # Failed to test the kernel for a bug that could lead to data corruption during background save. Your system could be affe.
2:M 03 Jun 2024 08:46:00.117 * Ready to accept connections
当看到 Ready to accept connections
即可表示 Redis Server 成功启动。
如何连接、测试
推荐使用 redis tools 来连接到 Redis 服务器:
sudo apt install redis-tools
redis-cli
运行:
redis-cli -p 5555
之后就可以执行所有 redis 的客户端命令,与在 linux 等操作系统上运行无异。
redis-benchmark
使用 Redis benchmark 基准测试工具来进行测试:
redis-benchmark -p 5555
更多详细的测试参数可以参考 Redis Benchmark.
使用 Musl libc
默认情况下,RuxOS 的 redis-server 使用自定义的 C 应用程序 ruxlibc。
通过添加 MUSL=y
到运行的命令中,就能借助 RuxOS 集成好的标准 musl libc来编译、链接。
使用 9pfs
默认情况下,RuxOS 通过命令行中的 ARGS
参数来向应用传递参数,这种方法可能会带来不变。现在 RuxOS 已经成功集成了 9pfs,用于 host 和 qemu 进行文件目录的共享,即可以通过应用自己的配置文件来传递参数。
运行下面的命令:
make A=apps/c/redis/ LOG=error NET=y V9P=y BLK=y FEATURES=virtio-9p V9P_PATH=apps/c/redis ARCH=aarch64 SMP=4 ARGS="./redis-server,/v9fs/redis.conf" run
参数解释:
-
V9P
: 使用V9P=y
来使能 qemu 的 virtio-9p 后端。 -
V9P_PATH
:V9P_PATH
指向 host 上的用于共享的目录,里面包含了 Redis 的配置文件。
关于切换架构、切换是否使用 musl libc、切换是否使用9pfs,可以参考 Redis ReadMe 给出的相关命令来灵活使用。