Redis 是一个基于内存的高性能 NoSQL 数据库,支持多种数据类型,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)等。Redis 所有数据都保存在内存中,读写速度极快,可达到每秒数十万次操作,非常适合对性能要求高的应用场景。
为了保证数据安全,Redis 提供了 RDB(快照) 和 AOF(追加文件) 两种持久化机制,可在系统重启后恢复数据。此外,Redis 还支持 主从复制(Replication)、哨兵(Sentinel)、集群(Cluster) 等高可用与分布式部署方式,方便实现大规模、高可靠的服务。
安装Redis
安装依赖
1
2 sudo apt update
sudo apt install -y build-essential tcl下载官方源码包
1
2
3
4 cd /opt
wget https://download.redis.io/releases/redis-8.2.2.tar.gz
tar -zxvf redis-8.2.2.tar.gz
cd redis-8.2.2编译
1
2 make & make install
默认会安装到/usr/local/bin/复制配置文件到etc目录下
1 cp redis.conf /etc/redis.conf配置开机自启服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 sudo tee /etc/systemd/system/redis.service > /dev/null <<'EOF'
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
ExecStart=/usr/local/bin/redis-server /etc/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
User=root
Group=root
Restart=always
[Install]
WantedBy=multi-user.target
EOF启动并设置开机自启
1
2
3
4 sudo systemctl daemon-reload
sudo systemctl enable redis
sudo systemctl start redis
sudo systemctl status redis验证是否启用
1
2
3
4
5 输入redis-cli进入redis执行命令,exit退出
redis-cli
127.0.0.1:6379> get key
(nil)
127.0.0.1:6379> exit
配置文件
redis的配置文件在安装时,我们将它复制一份到/etc目录下了,可以打开修改自己需要的配置。
常见配置
1 | 配置项 说明 推荐做法 |
持久化
RDB(快照持久化)
1 | save <秒> <变化次数> |
优势
- 对性能影响小(异步保存)
- 文件体积小,方便备份
缺点
- 数据不够实时,重启可能丢失最后一次快照后的数据
- 保存时会 fork 子进程,数据量大可能造成阻塞
AOF(追加日志持久化)
Redis 将每次写命令记录到日志文件 appendonly.aof,重启时按顺序重放日志恢复数据
appendfsync always → 每次写操作同步到磁盘(最安全,但慢)
appendfsync everysec → 每秒同步(默认,性能和安全兼顾)
appendfsync no → 由操作系统控制刷盘(最快,但有风险)
1 | appendonly yes |
AOF重写
当 AOF 文件过大时,Redis 会进行 AOF 重写:
- 将 AOF 历史命令压缩成最少的命令集
- 不影响服务(异步进行)
1 | auto-aof-rewrite-percentage 100 |
优点
- 数据几乎实时,丢失数据最少
- 可以重放命令恢复数据
缺点
- 文件较大,需要定期重写(AOF rewrite)
- 写入性能低于 RDB
混合持久化(RDB + AOF)
Redis 4+ 可以在 AOF 文件中使用 RDB 快照作为起点,再追加命令
1 | ################################ |
启用验证
1 | redis-cli INFO persistence |
优点
- 加快 AOF 重写速度
- 提升恢复速度
数据结构
Redis 数据结构总览
| 分类 | 数据结构名称 | 说明 | 常见应用场景 |
|---|---|---|---|
| 基础结构 | String(字符串) | 最基本类型,可存储文本或二进制(JSON、图片、序列化对象) | 缓存、计数器、分布式锁、Session |
| Hash(哈希) | 类似于小型字典或对象(field-value) | 用户信息、对象存储、配置项 | |
| List(列表) | 双向链表,有序,可从两端操作 | 消息队列、任务队列、时间线 | |
| Set(集合) | 无序、唯一性、不重复 | 标签系统、去重、共同好友关系 | |
| ZSet(Sorted Set 有序集合) | 带分数值排序的集合 | 排行榜、按时间或权重排序的数据 | |
| 扩展结构 | Bitmap(位图) | 通过 bit 位存储状态 | 用户签到、在线状态、活跃统计 |
| HyperLogLog | 基于概率的去重计数结构 | UV(独立访客数)、大规模去重统计 | |
| GEO(地理空间) | 存储经纬度,可做范围查询 | 附近的人、定位服务、地图搜索 | |
| 其他 | Stream(流) | Redis 5.0 新增,类似消息队列 | 消息队列、日志流、事件订阅 |
基本命令
键(Key)相关基本命令(最常用)
| 命令 | 作用 | 示例 |
|---|---|---|
SET key value |
设置值 | SET name "Tom" |
GET key |
获取值 | GET name |
DEL key |
删除键 | DEL name |
EXPIRE key秒数 |
设置有效期 | EXPIRE name 60 |
TTL key |
查看剩余时间 | TTL name |
KEYS pattern |
查找键 | KEYS user:* |
EXISTS key |
判断是否存在 | EXISTS name |
RENAME key newkey |
重命名 | RENAME name username |
TYPE key |
查看值类型 | TYPE name |
String(字符串)常用命令
| 命令 | 作用 | 示例 |
|---|---|---|
SET key value |
设置字符串 | SET city "Beijing" |
GET key |
获取字符串 | GET city |
APPEND key value |
字符串追加 | APPEND city " China" |
STRLEN key |
获取长度 | STRLEN city |
INCR key |
自增整数 | INCR visit_count |
DECR key |
自减整数 | DECR visit_count |
SETEX key seconds value |
设置并带过期 | SETEX code 60 1234 |
Hash(哈希/类似对象)
| 命令 | 作用 | 示例 |
|---|---|---|
HSET key field value |
设置一个属性 | HSET user:1 name "Alice" |
HGET key field |
获取属性 | HGET user:1 name |
HMSET key f1 v1 f2 v2 |
批量设置 | HMSET user:1 name Alice age 18 |
HGETALL key |
获取全部属性 | HGETALL user:1 |
HDEL key field |
删除属性 | HDEL user:1 age |
HLEN key |
属性个数 | HLEN user:1 |
HEXISTS key field |
判断字段存在 | HEXISTS user:1 name |
List(列表)常用命令
| 命令 | 说明 | 示例 |
|---|---|---|
LPUSH key v1 v2 |
左侧插入 | LPUSH tasks "task1" |
RPUSH key v1 |
右侧插入 | RPUSH tasks "task2" |
LPOP key |
左侧弹出 | LPOP tasks |
RPOP key |
右侧弹出 | RPOP tasks |
LRANGE key start end |
获取范围元素 | LRANGE tasks 0 -1 |
LLEN key |
列表长度 | LLEN tasks |
Set(集合)去重数据
| 命令 | 作用 | 示例 |
|---|---|---|
SADD key member |
添加元素 | SADD tags "music" |
SMEMBERS key |
查看所有元素 | SMEMBERS tags |
SISMEMBER key member |
判断是否存在 | SISMEMBER tags "music" |
SREM key member |
删除元素 | SREM tags "music" |
SCARD key |
集合成员数 | SCARD tags |
SINTER key1 key2 |
交集 | SINTER set1 set2 |
Sorted Set(有序集合)
| 命令 | 功能 | 示例 |
|---|---|---|
ZADD key score member |
添加带分数的成员 | ZADD rank 90 "Tom" |
ZRANGE key 0 -1 |
正序取值 | ZRANGE rank 0 -1 WITHSCORES |
ZREVRANGE key 0 -1 |
逆序取值 | ZREVRANGE rank 0 -1 |
ZREM key member |
删除成员 | ZREM rank "Tom" |
ZINCRBY key 增量 member |
增加分数 | ZINCRBY rank 10 "Tom" |
ZCARD key |
元素数量 | ZCARD rank |