1. 什么是 Redis
Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统,支持多种数据结构,可用作数据库、缓存和消息中间件。
主要特点
- 高性能:数据存储在内存中,读写速度极快(读 11 万次/秒,写 8 万次/秒)
- 丰富的数据类型:String、Hash、List、Set、ZSet 等
- 持久化:支持 RDB 和 AOF 两种持久化方式
- 高可用:支持主从复制、哨兵和集群
- 原子操作:所有操作都是原子性的
- 支持过期时间:可对 key 设置过期时间
典型应用场景
| 场景 | 说明 |
|---|---|
| 缓存 | 热点数据缓存,减轻数据库压力 |
| 计数器 | 浏览量、点赞数等 |
| 排行榜 | 使用 ZSet 实现 |
| 分布式锁 | 使用 SETNX 实现 |
| 会话缓存 | 存储用户登录信息 |
| 消息队列 | 使用 List 或 Stream |
2. 安装与启动
Linux 安装
# 使用包管理器安装
sudo apt-get install redis-server # Ubuntu/Debian
sudo yum install redis # CentOS
# 或源码编译安装
wget http://download.redis.io/releases/redis-7.2.0.tar.gz
tar xzf redis-7.2.0.tar.gz
cd redis-7.2.0
make
sudo make install
macOS 安装
brew install redis
Docker 安装
docker run -d --name redis -p 6379:6379 redis
启动与连接
# 启动服务
redis-server
# 指定配置文件启动
redis-server /etc/redis/redis.conf
# 连接客户端
redis-cli
# 连接远程服务
redis-cli -h 127.0.0.1 -p 6379 -a password
测试是否正常
redis-cli ping
# 返回 PONG 表示正常
3. 核心数据类型
Redis 支持 5 种核心数据类型:
3.1 String(字符串)
最基本的数据类型,可以存储字符串、整数、浮点数,最大 512MB。
SET name "zhangsan"
GET name # "zhangsan"
INCR count # 自增
DECR count # 自减
APPEND name " hello" # 追加
STRLEN name # 获取长度
3.2 Hash(哈希)
适合存储对象。
HSET user:1 name "zhangsan" age 20
HGET user:1 name # "zhangsan"
HGETALL user:1 # 获取所有字段
HMSET user:2 name "lisi" age 25
HDEL user:1 age # 删除字段
3.3 List(列表)
有序的字符串列表,可用作队列或栈。
LPUSH mylist "a" "b" "c" # 左侧插入
RPUSH mylist "d" # 右侧插入
LPOP mylist # 左侧弹出
LRANGE mylist 0 -1 # 获取所有元素
LLEN mylist # 获取长度
3.4 Set(集合)
无序的、不重复的字符串集合。
SADD myset "a" "b" "c"
SMEMBERS myset # 获取所有成员
SISMEMBER myset "a" # 判断是否存在
SREM myset "a" # 删除成员
SINTER set1 set2 # 交集
SUNION set1 set2 # 并集
3.5 ZSet(有序集合)
每个成员关联一个分数,按分数排序。
ZADD rank 100 "user1" 90 "user2" 80 "user3"
ZRANGE rank 0 -1 # 按分数升序
ZREVRANGE rank 0 -1 # 按分数降序
ZSCORE rank "user1" # 获取分数
ZRANK rank "user1" # 获取排名
ZINCRBY rank 10 "user1" # 增加分数
4. 常用命令
4.1 Key 操作
KEYS pattern # 查找所有匹配的 key(生产环境慎用)
EXISTS key # 判断 key 是否存在
DEL key # 删除 key
EXPIRE key seconds # 设置过期时间(秒)
PEXPIRE key milliseconds # 设置过期时间(毫秒)
TTL key # 查看剩余过期时间
PERSIST key # 移除过期时间
RENAME oldkey newkey # 重命名
TYPE key # 查看类型
SCAN cursor # 游标式遍历(推荐替代 KEYS)
4.2 事务
Redis 事务通过 MULTI、EXEC、DISCARD、WATCH 实现。
MULTI
SET key1 "value1"
SET key2 "value2"
EXEC
4.3 发布订阅
# 订阅端
SUBSCRIBE channel1
# 发布端
PUBLISH channel1 "hello"