Valkey/Redis 替代¶
一句话概述:Valkey 是 Redis 的开源分支(2024 年 Redis 改为非开源许可后诞生),由 Linux 基金会托管,API 完全兼容 Redis,是 Redis 的免费替代品。
核心知识点¶
| 概念 | 白话解释 |
|---|---|
| Valkey | Redis 7.2 的开源分支,API 100% 兼容 Redis |
| 许可变更 | Redis 2024 年从 BSD 改为 SSPL+RSALv2,不再完全开源 |
| Drop-in Replacement | 直接替换 = 不改代码就能从 Redis 切换到 Valkey |
| KeyDB | 另一个 Redis 分支(多线程版) |
| Dragonfly | 高性能 Redis 替代(C++ 重写,多线程) |
安装配置¶
# Docker 安装 Valkey
docker run -d --name valkey -p 6379:6379 valkey/valkey:latest
# Ubuntu 安装
sudo apt install valkey-server # 安装
sudo systemctl start valkey-server # 启动
# 验证(用 redis-cli 就行,完全兼容)
redis-cli ping # 返回 PONG
基本使用¶
# 用 redis-py 直接连接(完全兼容)
import redis
r = redis.Redis(host='localhost', port=6379, decode_responses=True)
# 字符串
r.set('name', 'Alice', ex=3600) # 设置,1小时过期
r.get('name') # 获取
# 列表
r.lpush('tasks', 'task1', 'task2') # 从左插入
r.rpop('tasks') # 从右弹出
# 哈希
r.hset('user:1', mapping={'name': 'Alice', 'age': 25}) # 设置哈希
r.hgetall('user:1') # 获取所有字段
# 集合
r.sadd('tags', 'python', 'go', 'rust') # 添加成员
r.smembers('tags') # 获取所有成员
# 有序集合
r.zadd('leaderboard', {'Alice': 100, 'Bob': 85}) # 添加带分数
r.zrangebyscore('leaderboard', 80, 100) # 按分数范围查询
# 发布/订阅
pubsub = r.pubsub()
pubsub.subscribe('notifications') # 订阅频道
r.publish('notifications', 'Hello!') # 发布消息
常见报错¶
| 报错信息 | 原因 | 解决方法 |
|---|---|---|
MISCONF | 持久化错误 | 检查磁盘空间和权限 |
OOM | 内存不足 | 设置 maxmemory 和淘汰策略 |
NOAUTH | 需要密码 | 配置 requirepass 或连接时提供密码 |
速查表¶
# === CLI 命令 ===
SET key value EX 3600 # 设置(带过期)
GET key # 获取
DEL key # 删除
KEYS pattern # 按模式查找键
TTL key # 查看剩余过期时间
INFO # 服务器信息
DBSIZE # 键总数
# === 数据类型 ===
# String: SET/GET — 最基础的缓存
# List: LPUSH/RPOP — 队列/栈
# Hash: HSET/HGET — 对象存储
# Set: SADD/SMEMBERS — 去重集合
# Sorted Set: ZADD/ZRANGE — 排行榜
# Stream: XADD/XREAD — 消息流
# === Redis 替代品对比 ===
# Valkey: Redis 分支,100% 兼容,开源
# KeyDB: Redis 分支,多线程,更快
# Dragonfly: C++ 重写,多线程,内存效率高
# Kvrocks: 基于 RocksDB,用磁盘存储,适合大数据量
参考:Valkey 官网 | 更新于 2026 年