跳转至

Valkey/Redis 替代

一句话概述:Valkey 是 Redis 的开源分支(2024 年 Redis 改为非开源许可后诞生),由 Linux 基金会托管,API 完全兼容 Redis,是 Redis 的免费替代品。

核心知识点

概念白话解释
ValkeyRedis 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 年