Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统,由 Salvatore Sanfilippo(antirez)于 2009 年创建。Redis 以其 极致的速度、丰富的数据结构、强大的功能 成为现代应用架构中不可或缺的组件。
Redis 的核心定位是 高性能内存数据存储。它提供了:
Redis 由 Salvatore Sanfilippo(antirez)于 2009 年创建,最初是为了解决 LLOOGG 网站的性能问题。antirez 希望有一个 基于内存、支持多种数据结构 的存储系统,而 Redis 应运而生。Redis 的名字来源于 "Remote Dictionary Server"(远程字典服务器)。
最基本的数据类型,存储字符串、整数、浮点数。
# 设置值
SET key "value"
# 获取值
GET key
# 设置过期时间(秒)
SETEX key 60 "value"
# 增加(整数)
INCR counter
INCRBY counter 10
# 增加(浮点数)
INCRBYFLOAT price 1.5
# 获取并设置
GETSET key "new_value"
# 批量操作
MSET key1 "value1" key2 "value2"
MGET key1 key2
存储多个字段-值对,适合存储对象。
# 设置字段
HSET user:1001 name "Alice" age 30 city "Beijing"
# 获取字段
HGET user:1001 name
HGETALL user:1001
# 获取所有字段
HKEYS user:1001
HVALS user:1001
# 字段增加
HINCRBY user:1001 age 1
# 判断字段是否存在
HEXISTS user:1001 name
# 删除字段
HDEL user:1001 city
有序的字符串列表,支持从两端操作。
# 左侧插入
LPUSH queue "task1" "task2"
# 右侧插入
RPUSH queue "task3" "task4"
# 左侧弹出(移除并返回)
LPOP queue
# 右侧弹出
RPOP queue
# 获取范围
LRANGE queue 0 -1
# 获取长度
LLEN queue
# 阻塞弹出(队列)
BLPOP queue 10 # 等待 10 秒
无序且不重复的字符串集合,支持交集、并集、差集运算。
# 添加成员
SADD tags "redis" "database" "cache"
# 删除成员
SREM tags "database"
# 获取所有成员
SMEMBERS tags
# 判断成员是否存在
SISMEMBER tags "redis"
# 交集
SINTER set1 set2
# 并集
SUNION set1 set2
# 差集
SDIFF set1 set2
# 获取集合大小
SCARD tags
# 随机弹出
SPOP tags
SRANDMEMBER tags 3
每个成员关联一个分数,按分数排序,适合排行榜等场景。
# 添加成员
ZADD leaderboard 100 "Alice" 90 "Bob" 95 "Charlie"
# 获取排名
ZRANK leaderboard "Alice" # 排名(升序)
ZREVRANK leaderboard "Alice" # 排名(降序)
# 获取范围
ZRANGE leaderboard 0 -1 WITHSCORES # 升序
ZREVRANGE leaderboard 0 -1 WITHSCORES # 降序
# 按分数范围查询
ZRANGEBYSCORE leaderboard 90 100
# 增加分数
ZINCRBY leaderboard 5 "Alice"
# 删除成员
ZREM leaderboard "Alice"
# 获取数量
ZCARD leaderboard
ZCOUNT leaderboard 90 100
类似 Kafka 的消息队列,支持消费者组。
# 添加消息
XADD mystream * user "Alice" message "Hello"
# 读取消息
XREAD COUNT 10 STREAMS mystream 0
# 创建消费者组
XGROUP CREATE mystream mygroup $ MKSTREAM
# 消费者读取
XREADGROUP GROUP mygroup consumer1 COUNT 10 STREAMS mystream >
# 事务(原子执行)
MULTI
SET key1 "value1"
SET key2 "value2"
EXEC
# Lua 脚本(原子操作)
EVAL "return redis.call('SET', KEYS[1], ARGV[1])" 1 key "value"
# 发布/订阅
# 订阅
SUBSCRIBE channel1
# 发布
PUBLISH channel1 "Hello"
# 分布式锁(Redlock 算法)
SET lock_key unique_value NX PX 10000
# 管道(批量执行,减少网络开销)
PIPELINE
Redis 安装、基本命令、五种核心数据结构(String/Hash/List/Set/ZSet)
持久化(RDB/AOF)、事务、Lua 脚本、发布/订阅
Redis Sentinel(高可用)、Redis Cluster(集群)、Pipeline(管道)
缓存设计、缓存穿透/击穿/雪崩、分布式锁、性能调优
Redis 是后端开发的"瑞士军刀"。
它既是缓存、消息队列、分布式锁、实时排行榜、又是数据存储。Redis 的 丰富数据结构、极致性能、强大功能 让它成为现代应用架构中不可或缺的组件。
无论你使用什么编程语言(Java、Python、Go、PHP、Node.js),Redis 都是 后端开发者的必修课。掌握 Redis,意味着你能够解决缓存、并发、实时数据等核心问题。
"Redis 是每个后端开发者都应该掌握的技术。" ⚡