抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

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目录下了,可以打开修改自己需要的配置。

常见配置

redis.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 配置项	说明	推荐做法
port #Redis 监听端口 默认 6379,生产可自定义
bind #绑定的 IP 地址 默认 127.0.0.1;远程访问可用 0.0.0.0,#但需安全控制
protected-mode #保护模式(限制外网访问) yes(建议开启)
daemonize #是否后台运行 no(systemd 管理时)
supervised #systemd / upstart / no systemd(生产推荐)
pidfile #PID 文件路径 /var/run/redis.pid
dir #数据目录 /var/lib/redis
logfile #日志文件 /var/log/redis/redis.log
loglevel #日志等级 notice / warning
syslog-enabled #是否写入系统日志 no(不启用 syslog)

maxmemory #Redis 最大可用内存 根据服务器内存设置,例如 1GB
maxmemory-policy #内存达到上限时淘汰策略 allkeys-lru 或 volatile-lru
tcp-backlog #TCP 连接队列长度 511(默认值)
timeout #空闲连接超时 300 秒或 0(永不超时)
tcp-keepalive #TCP 保活时间 300 秒

requirepass #访问密码 设置强密码
rename-command #重命令(隐藏危险命令) 可禁用 FLUSHALL、CONFIG 等
aclfile #ACL 文件路径 使用 Redis 6+ 用户权限管理

slowlog-log-slower-than #记录慢查询的阈值(微秒) 10000 → 超过 10ms 记录
slowlog-max-len #慢查询日志最大条数 128 → 超过丢弃最旧
latency-monitor-threshold #延迟监控阈值(毫秒) 100 → 超过阈值会记录延迟事件

持久化

RDB(快照持久化)

redis.conf
1
2
3
4
5
6
7
8
save <秒> <变化次数>

save 900 1 # 15分钟内至少有1次写操作,就生成快照
save 300 10 # 5分钟内至少10次写操作,生成快照
save 60 10000 # 1分钟内至少10000次写操作,生成快照

dbfilename dump.rdb # RDB 文件名
dir /var/lib/redis # RDB 文件存放目录

优势

  • 对性能影响小(异步保存)
  • 文件体积小,方便备份

缺点

  • 数据不够实时,重启可能丢失最后一次快照后的数据
  • 保存时会 fork 子进程,数据量大可能造成阻塞

AOF(追加日志持久化)

Redis 将每次写命令记录到日志文件 appendonly.aof,重启时按顺序重放日志恢复数据

appendfsync always → 每次写操作同步到磁盘(最安全,但慢)

appendfsync everysec → 每秒同步(默认,性能和安全兼顾)

appendfsync no → 由操作系统控制刷盘(最快,但有风险)

redis.conf
1
2
3
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

AOF重写

当 AOF 文件过大时,Redis 会进行 AOF 重写

  • 将 AOF 历史命令压缩成最少的命令集
  • 不影响服务(异步进行)
1
2
3
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

优点

  • 数据几乎实时,丢失数据最少
  • 可以重放命令恢复数据

缺点

  • 文件较大,需要定期重写(AOF rewrite)
  • 写入性能低于 RDB

混合持久化(RDB + AOF)

Redis 4+ 可以在 AOF 文件中使用 RDB 快照作为起点,再追加命令

redis.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#################################
# RDB 快照配置
#################################
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /var/lib/redis
rdbcompression yes
rdbchecksum yes

#################################
# AOF 配置
#################################
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

#################################
# 混合持久化启用 配置
#################################
aof-use-rdb-preamble yes

启用验证

1
2
3
4
redis-cli INFO persistence
正常会输出
aof_enabled:1
aof_use_rdb_preamble:1

优点

  • 加快 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

评论