Redis 是一个高性能的内存数据结构存储,既可作数据库、缓存,也可作消息中间件。它支持字符串、哈希、列表、集合、有序集合、位图、HyperLogLog、地理位置与流等丰富类型,提供持久化、主从复制、哨兵与集群高可用。典型用途包含会话管理、热点缓存、分布式锁、排行榜、计数器、实时订阅发布与流式分析,常见于高并发、低延迟的电商、社交、游戏与物联网场景。使用简单,性能可达百万级QPS,可靠,生态更好。
1)Redis 简介(含版权/许可说明)
Redis 是高性能的内存数据结构数据库,可作缓存、数据库与消息中间件,支持字符串、哈希、列表、集合、有序集合、位图、HyperLogLog、地理与流等,并提供持久化、复制、哨兵与集群等能力。
许可演进要点:
- 7.4 起:Redis 改为双许可证:RSALv2(Redis Source Available License 2.0)与 SSPLv1(Server Side Public License)。不再沿用 BSD-3。
- 8.0 起:新增第三个选项 AGPLv3(三许可证:RSALv2 / SSPLv1 / AGPLv3)。
RSALv2 是否有商业风险?(要点版)
- 允许:内部自用/部署、复制、修改与分发源代码(遵守条款)。
- 禁止:将 Redis 的“功能作为服务提供给第三方”(含让第三方通过网络交互使用、或你的服务价值主要来自 Redis 功能)。这类“对外托管/代管”属于 RSALv2 的明确禁用场景。Redis
- 规避思路:
- 若你要做“Redis 即服务”,应采购商业授权或在 Redis 8 下按 AGPLv3 路径评估(关注你是否修改了 Redis 本体及相应开源义务);
- 或改用 Valkey(BSD-3) 以完全回到 OSI 开源许可。
以上为信息性说明,非法律意见。
许可与合规提醒:
- 使用 Redis 8 时,你可以在 AGPLv3 / RSALv2 / SSPLv1 中选择其一(取决于你的使用方式)。若你的业务对外提供“Redis 功能即服务”,RSALv2/SSPL 的限制需要特别注意;AGPLv3 下如修改了 Redis 本体并通过网络提供,需向用户开放这些修改的源代码。
2)竞品对比(协议 / 优势 / 劣势 / 场景)
| 项目 | 许可证 | 主要优势 | 主要劣势/注意 | 典型场景 |
|---|---|---|---|---|
| Redis 8 | AGPLv3 / RSALv2 / SSPLv1(三选一) | 官方生态与功能齐全(8.0 起把 JSON/TimeSeries/Search 等并入发行版;新 data type:Vector Set;性能改进) | RSAL/SSPL 对“对外服务”有限制;AGPLv3 有网络传播条款(修改版需开源) | 需要官方能力与生态,内部系统或在 AGPL 合规可控下使用。 |
| Valkey(Linux 基金会托管的 Redis 分叉) | BSD-3 | 社区/大厂支持,许可友好;与 Redis 7.2.4 起步兼容,发展迅速(已到 8.x) | 与 Redis 新特性存在节奏差(需验证模块/周边兼容) | 想避开 RSAL/SSPL/AGPL 争议、企业合规敏感环境;发行版打包友好。 |
| KeyDB(多线程分叉) | BSD-3 | 单机多线程吞吐高,保留大部分 Redis 语义 | 与 Redis 主线存在特性差距;社区节奏取决于 Snap 投入 | 单机高吞吐/低延迟、对 Redis 完全同构要求不高的缓存/会话场景。 |
| Dragonfly | BSL 1.1(源可见,非 OSI 开源) | 宣称极高性能、易运维 | 许可非开源(与 AGPL/BSL 等合规边界需审查) | 追求极致性能/运维简化,内部部署为主。 |
| Memcached | BSD-3 | 设计简单、稳定、超轻量 | 数据结构简单,无原生持久化/高阶功能 | 纯缓存(KV)、对一致性/持久化要求不高。 |
| Garnet(Microsoft Research) | MIT | 兼容 Redis 客户端,单机/集群、复制与持久化能力,研究驱动 | 新项目,生态成熟度需评估 | .NET/微软生态、研究或对 MIT 许可偏好。 |
小结:要“绝对开源”与最大合规自由→ 首选 Valkey(BSD);
要官方新功能/生态→ 用 Redis 8,并在 AGPLv3/RSALv2/SSPL 中做合规取舍。
使用 Docker 快速部署 Redis
下面示例默认使用 Redis 8(alpine) 官方镜像,带持久化(AOF)、密码和健康检查,可直接落地生产。Redis 8 Docker 镜像与标签可在官方 Hub 上找到(如 8.0.2-alpine、8-alpine 等)
目录结构
Bash
.
├─ docker-compose.yml
├─ .env
└─ redis.confdocker-compose.yml
YAML
version: "3.9"
services:
redis:
image: redis:8-alpine
container_name: redis
command: >
redis-server /usr/local/etc/redis/redis.conf
--appendonly yes
--requirepass ${REDIS_PASSWORD}
ports:
- "6379:6379"
volumes:
- ./data:/data
- ./redis.conf:/usr/local/etc/redis/redis.conf:ro
healthcheck:
test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
interval: 10s
timeout: 3s
retries: 5
restart: unless-stopped.env
YAML
REDIS_PASSWORD=ChangeMe_pleaseredis.conf
CONF
########################################
# 基础与网络
########################################
# 在容器里不要后台化
daemonize no
# 不使用 systemd 监督
supervised no
# 监听端口
port 6379
# 在容器内通常允许所有网卡(由容器网络和映射端口控制暴露范围)
bind 0.0.0.0
# 保护模式:开启后,若无密码/未绑定 loopback,会限制外部访问
protected-mode yes
# 空闲连接超时(0 表示不关闭)
timeout 0
# TCP 保活(秒)
tcp-keepalive 300
# backlog(连接队列长度),高并发环境可适当提高
tcp-backlog 511
########################################
# 安全:密码 / 命令降权 / ACL(可选)
########################################
# 与 compose 的 ${REDIS_PASSWORD} 对齐;如不需要密码请删除本行(不建议)
requirepass ChangeMe_please
# 可选:禁用高危命令(生产常见做法,若依赖这些命令请勿禁用)
# rename-command FLUSHALL ""
# rename-command FLUSHDB ""
# rename-command CONFIG ""
# rename-command SHUTDOWN ""
# rename-command KEYS ""
# (可选)ACL 文件:需要细粒度权限时启用
# aclfile /usr/local/etc/redis/users.acl
########################################
# 持久化:RDB + AOF(推荐 AOF)
########################################
dir /data
# RDB 快照文件名
dbfilename dump.rdb
# 典型 RDB 触发策略(按需调整;也可全关只用 AOF)
save 900 1
save 300 10
save 60 10000
# RDB 压缩/校验
rdbcompression yes
rdbchecksum yes
# RDB 失败时是否停止写入,防止数据不一致
stop-writes-on-bgsave-error yes
# 开启 AOF,以便更强的持久化与可恢复性
appendonly yes
appendfilename "appendonly.aof"
# 刷盘策略:每秒一次,性能与持久性的折中
appendfsync everysec
# 重写期间不做 fsync,降低抖动
no-appendfsync-on-rewrite yes
# 触发重写的阈值(按需调大以减少重写频率)
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 先写 RDB 头,再追加增量,提升恢复速度
aof-use-rdb-preamble yes
########################################
# 内存与淘汰
########################################
# 推荐显式限制内存,防止容器被 OOM
maxmemory 1gb
# 淘汰策略:常见为 allkeys-lru(全键空间 LRU)
# 其它可选:volatile-lru / allkeys-lfu / noeviction 等
maxmemory-policy allkeys-lru
########################################
# 性能与延迟
########################################
# I/O 线程:网络 I/O 多线程化(CPU >= 4 时可考虑开启)
# io-threads 4
# io-threads-do-reads yes
# 惰性释放,降低大 key 删除时的阻塞
lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes
lazyfree-lazy-server-del no
# 慢查询日志阈值(微秒;10000=10ms)
slowlog-log-slower-than 10000
slowlog-max-len 128
# 关键空间通知(按需开启,带来额外开销)
# notify-keyspace-events Ex
########################################
# 复制 / 高可用(可选:作为从库时启用)
########################################
# replicaof <master-ip> <master-port>
# masterauth <master-password>
replica-read-only yes
repl-diskless-sync yes
repl-diskless-sync-delay 5
########################################
# 集群(可选:仅在 Cluster 模式)
########################################
# cluster-enabled yes
# cluster-config-file nodes.conf
# cluster-node-timeout 5000
# cluster-announce-ip 10.0.0.10
# cluster-announce-port 6379
# cluster-announce-bus-port 16379
########################################
# TLS(可选:需要加密链路时)
########################################
# port 0
# tls-port 6379
# tls-cert-file /tls/redis.crt
# tls-key-file /tls/redis.key
# tls-ca-cert-file /tls/ca.crt
########################################
# 日志与监控(容器建议打到 stdout)
########################################
loglevel notice
logfile ""
# 延迟监控(微秒阈值;0=关闭),可辅助排障
latency-monitor-threshold 100
启动与验证
Bash
docker compose up -d
docker exec -it redis redis-cli -a "$REDIS_PASSWORD" ping
# 期望输出:PONG
View Comments