Skip to content

Valkey 配置

Valkey 是 Redis 的高性能分支,完全兼容 Redis 协议,为 DNS-Go 提供高性能缓存服务。

关于 Valkey

Valkey 是由 Linux 基金会主导开发的 Redis 分支,特点包括:

  • 完全兼容 Redis:支持所有 Redis 命令和协议
  • 高性能:针对现代硬件优化
  • 活跃开发:社区驱动,持续发展
  • 开源友好:宽松的 BSD 许可证

安装 Valkey

Docker 安装(推荐)

bash
# 拉取镜像
docker pull valkey/valkey:8-alpine

# 运行容器
docker run -d \
  --name valkey \
  --restart unless-stopped \
  -p 6379:6379 \
  -v /opt/valkey/data:/data \
  valkey/valkey:8-alpine

# 验证安装
docker exec -it valkey valkey-cli ping

Linux 安装

从源码编译:

bash
# 安装依赖
sudo apt-get update
sudo apt-get install -y build-essential tcl

# 下载源码
git clone https://github.com/valkey-io/valkey.git
cd valkey

# 编译
make BUILD_TLS=yes

# 安装
sudo make install

# 验证
valkey-server --version

使用包管理器(即将支持):

bash
# 等待官方包发布
# sudo apt-get install valkey

macOS 安装

bash
# 使用 Homebrew(等待官方支持)
# brew install valkey

# 临时使用 Redis 替代
brew install redis

配置 Valkey

基础配置

创建配置文件:

bash
sudo tee /etc/valkey/valkey.conf > /dev/null <<EOF
# 基础配置
bind 127.0.0.1
port 6379
daemonize yes
supervised systemd
pidfile /var/run/valkey/valkey-server.pid
logfile /var/log/valkey/valkey-server.log
dir /var/lib/valkey

# 持久化配置
save 900 1
save 300 10
save 60 10000

# 内存配置
maxmemory 256mb
maxmemory-policy allkeys-lru

# 安全配置
# requirepass your_password

# 性能优化
tcp-keepalive 300
timeout 0
tcp-backlog 511
EOF

系统服务配置

创建 systemd 服务文件:

bash
sudo tee /etc/systemd/system/valkey.service > /dev/null <<EOF
[Unit]
Description=Valkey In-Memory Data Store
After=network.target

[Service]
Type=forking
User=valkey
Group=valkey
ExecStart=/usr/local/bin/valkey-server /etc/valkey/valkey.conf
ExecStop=/usr/local/bin/valkey-cli shutdown
Restart=always

[Install]
WantedBy=multi-user.target
EOF

创建用户和目录:

bash
# 创建用户
sudo useradd -r -s /bin/false valkey

# 创建目录
sudo mkdir -p /etc/valkey
sudo mkdir -p /var/lib/valkey
sudo mkdir -p /var/log/valkey
sudo mkdir -p /var/run/valkey

# 设置权限
sudo chown -R valkey:valkey /etc/valkey
sudo chown -R valkey:valkey /var/lib/valkey
sudo chown -R valkey:valkey /var/log/valkey
sudo chown -R valkey:valkey /var/run/valkey

启动服务:

bash
sudo systemctl daemon-reload
sudo systemctl start valkey
sudo systemctl enable valkey

DNS-Go 配置

编辑 config/config.toml

toml
[valkey]
ip = "127.0.0.1"       # Valkey 服务器地址
port = 6379             # Valkey 端口
password = ""           # 密码(如果设置了)
db = 0                  # 数据库编号
pool_size = 10          # 连接池大小
timeout = 5             # 超时时间(秒)

使用环境变量

bash
export CACHE_HOST=127.0.0.1
export CACHE_PORT=6379
export CACHE_PASSWORD=

性能优化

内存配置

根据服务器内存调整:

conf
# 最大内存限制
maxmemory 512mb

# 内存淘汰策略
maxmemory-policy allkeys-lru

淘汰策略说明:

策略说明
noeviction不淘汰,内存满时返回错误
allkeys-lru淘汰最近最少使用的键(推荐)
allkeys-random随机淘汰键
volatile-lru只淘汰有过期时间的键(LRU)
volatile-random只淘汰有过期时间的键(随机)
volatile-ttl淘汰即将过期的键

持久化配置

conf
# RDB 快照
save 900 1      # 900秒内1次修改
save 300 10     # 300秒内10次修改
save 60 10000   # 60秒内10000次修改

# AOF 持久化
appendonly yes
appendfsync everysec

RDB vs AOF:

特性RDBAOF
文件大小紧凑较大
恢复速度
数据安全可能丢失更安全
性能影响中等

DNS-Go 缓存数据可以容忍丢失,建议使用 RDB 即可。

连接优化

在 DNS-Go 配置中:

toml
[valkey]
pool_size = 20          # 根据并发量调整
timeout = 3             # 减少超时时间

监控与维护

查看状态

bash
# 连接到 Valkey
valkey-cli

# 查看信息
INFO

# 查看内存使用
INFO memory

# 查看统计信息
INFO stats

# 查看客户端连接
CLIENT LIST

常用命令

bash
# 测试连接
valkey-cli ping

# 查看所有键(谨慎使用)
valkey-cli KEYS "*"

# 查看键数量
valkey-cli DBSIZE

# 清空当前数据库(危险操作!)
valkey-cli FLUSHDB

# 清空所有数据库(危险操作!)
valkey-cli FLUSHALL

# 查看慢查询
valkey-cli SLOWLOG GET 10

性能测试

bash
# 基准测试
valkey-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 100000

# 测试特定命令
valkey-benchmark -t set,get -n 100000 -q

备份与恢复

备份数据

bash
# 手动触发 RDB 保存
valkey-cli SAVE

# 后台保存(不阻塞)
valkey-cli BGSAVE

# 复制 RDB 文件
cp /var/lib/valkey/dump.rdb /backup/valkey/dump-$(date +%Y%m%d).rdb

自动备份脚本:

bash
sudo tee /opt/backup/backup-valkey.sh > /dev/null <<'EOF'
#!/bin/bash

BACKUP_DIR="/opt/backup/valkey"
DATE=$(date +%Y%m%d_%H%M%S)

# 创建备份目录
mkdir -p ${BACKUP_DIR}

# 触发后台保存
valkey-cli BGSAVE

# 等待保存完成
sleep 5

# 复制备份文件
cp /var/lib/valkey/dump.rdb ${BACKUP_DIR}/dump_${DATE}.rdb

# 压缩
gzip ${BACKUP_DIR}/dump_${DATE}.rdb

# 删除旧备份(保留30天)
find ${BACKUP_DIR} -name "dump_*.rdb.gz" -mtime +30 -delete

echo "[$(date)] Valkey backup completed" >> ${BACKUP_DIR}/backup.log
EOF

chmod +x /opt/backup/backup-valkey.sh

恢复数据

bash
# 停止 Valkey
sudo systemctl stop valkey

# 复制备份文件
cp /backup/valkey/dump_20250115.rdb /var/lib/valkey/dump.rdb

# 设置权限
sudo chown valkey:valkey /var/lib/valkey/dump.rdb

# 启动 Valkey
sudo systemctl start valkey

故障排查

连接失败

bash
# 检查服务状态
sudo systemctl status valkey

# 检查端口监听
sudo netstat -tlnp | grep 6379

# 查看日志
sudo tail -f /var/log/valkey/valkey-server.log

内存不足

bash
# 查看内存使用
valkey-cli INFO memory | grep used_memory

# 查看最大键
valkey-cli --bigkeys

# 调整内存限制
valkey-cli CONFIG SET maxmemory 1gb

性能问题

bash
# 查看慢查询
valkey-cli SLOWLOG GET 10

# 查看统计信息
valkey-cli INFO stats

# 监控实时命令
valkey-cli MONITOR

使用 Redis 替代

如果暂时无法使用 Valkey,可以使用 Redis 完全替代:

bash
# Docker 运行 Redis
docker run -d \
  --name redis \
  --restart unless-stopped \
  -p 6379:6379 \
  redis:7-alpine

# DNS-Go 配置无需修改,完全兼容

相关文档

基于 MIT 许可发布