Redis缓存数据库

安装与配置

安装Redis

# Debian/Ubuntu
sudo apt install redis-server
 
# RHEL/CentOS
sudo dnf install redis
 
# 源码安装
wget https://download.redis.io/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable
make
sudo make install
 
# 启动服务
sudo systemctl start redis
sudo systemctl enable redis
 
# 验证
redis-cli ping                        # 返回 PONG

配置文件

# /etc/redis/redis.conf
 
# 网络
bind 127.0.0.1                        # 绑定地址
port 6379                             # 端口
protected-mode yes                    # 保护模式
timeout 0                             # 连接超时
 
# 通用
daemonize yes                         # 守护进程
pidfile /var/run/redis/redis-server.pid
loglevel notice                       # 日志级别
logfile /var/log/redis/redis-server.log
 
# 持久化
save 900 1                            # 900秒内至少1次写操作
save 300 10                           # 300秒内至少10次写操作
save 60 10000                         # 60秒内至少10000次写操作
dbfilename dump.rdb                   # RDB文件名
dir /var/lib/redis                    # 数据目录
 
# AOF持久化
appendonly yes                        # 启用AOF
appendfilename "appendonly.aof"
appendfsync everysec                  # 同步策略: always/everysec/no
 
# 内存
maxmemory 2gb                         # 最大内存
maxmemory-policy allkeys-lru          # 淘汰策略
 
# 安全
requirepass your_password             # 访问密码
 
# 集群
# cluster-enabled yes
# cluster-config-file nodes.conf
# cluster-node-timeout 5000

重启和重载

# 重启服务
sudo systemctl restart redis
 
# 重载配置(部分配置支持)
redis-cli CONFIG REWRITE
 
# 在线修改配置
redis-cli CONFIG SET maxmemory 1gb

数据类型与操作

连接Redis

# 本地连接
redis-cli
redis-cli -p 6379
 
# 带密码连接
redis-cli -a password
redis-cli -h 192.168.1.100 -p 6379 -a password
 
# 选择数据库
redis-cli -n 1                        # 选择数据库1
 
# 交互式命令
127.0.0.1:6379> SELECT 1              # 切换到数据库1
127.0.0.1:6379> INFO                  # 查看信息
127.0.0.1:6379> DBSIZE                # 查看键数量
127.0.0.1:6379> FLUSHDB               # 清空当前数据库
127.0.0.1:6379> FLUSHALL              # 清空所有数据库

字符串(String)

# 设置值
SET key value
SET key value EX 3600                 # 设置过期时间(秒)
SET key value PX 3600000              # 设置过期时间(毫秒)
SET key value NX                      # 不存在时设置
SET key value XX                      # 存在时设置
SETEX key 3600 value                  # 设置值和过期时间
SETNX key value                       # 不存在时设置
 
# 获取值
GET key
GETSET key newvalue                   # 获取并设置新值
 
# 批量操作
MSET key1 value1 key2 value2
MGET key1 key2
 
# 数值操作
INCR key                              # 自增1
INCRBY key 10                         # 增加10
DECR key                              # 自减1
DECRBY key 10                         # 减少10
INCRBYFLOAT key 2.5                   # 增加浮点数
 
# 字符串操作
APPEND key suffix                     # 追加字符串
STRLEN key                            # 获取长度
GETRANGE key 0 5                      # 获取子串
SETRANGE key 0 prefix                 # 替换子串

哈希(Hash)

# 设置字段
HSET hash field value
HMSET hash field1 value1 field2 value2
HSETNX hash field value               # 字段不存在时设置
 
# 获取字段
HGET hash field
HMGET hash field1 field2
HGETALL hash                          # 获取所有字段和值
HKEYS hash                            # 获取所有字段名
HVALS hash                            # 获取所有值
HEXISTS hash field                    # 检查字段是否存在
HLEN hash                             # 获取字段数量
 
# 数值操作
HINCRBY hash field 10
HINCRBYFLOAT hash field 2.5
 
# 删除字段
HDEL hash field1 field2

列表(List)

# 添加元素
LPUSH list value1 value2              # 左侧插入
RPUSH list value1 value2              # 右侧插入
LPUSHX list value                     # 列表存在时插入
RPUSHX list value
 
# 获取元素
LLEN list                             # 获取长度
LINDEX list 0                         # 获取指定索引元素
LRANGE list 0 -1                      # 获取范围元素
 
# 弹出元素
LPOP list                             # 左侧弹出
RPOP list                             # 右侧弹出
BLPOP list 5                          # 阻塞左侧弹出(5秒超时)
BRPOP list 5                          # 阻塞右侧弹出
 
# 修改元素
LSET list 0 newvalue                  # 设置指定索引元素
LTRIM list 0 10                       # 保留指定范围
 
# 其他操作
LINSERT list BEFORE value newvalue    # 在value前插入
LINSERT list AFTER value newvalue     # 在value后插入
LREM list 2 value                     # 删除2个value

集合(Set)

# 添加元素
SADD set member1 member2
 
# 获取元素
SMEMBERS set                          # 获取所有成员
SISMEMBER set member                  # 检查成员是否存在
SCARD set                             # 获取成员数量
SRANDMEMBER set                       # 随机获取一个成员
SPOP set                              # 随机弹出成员
 
# 删除元素
SREM set member1 member2
 
# 集合运算
SINTER set1 set2                      # 交集
SUNION set1 set2                      # 并集
SDIFF set1 set2                       # 差集
SINTERSTORE dest set1 set2            # 交集存入dest
SUNIONSTORE dest set1 set2
SDIFFSTORE dest set1 set2
 
# 移动元素
SMOVE source dest member

有序集合(ZSet)

# 添加元素
ZADD zset score member
ZADD zset score1 member1 score2 member2
 
# 获取元素
ZRANGE zset 0 -1                      # 按索引范围获取(升序)
ZREVRANGE zset 0 -1                   # 降序
ZRANGE zset 0 -1 WITHSCORES           # 带分数
ZRANGEBYSCORE zset 0 100              # 按分数范围获取
ZREVRANGEBYSCORE zset 100 0
ZRANGEBYSCORE zset (0 (100            # 不包含边界
 
# 获取分数和排名
ZSCORE zset member                    # 获取分数
ZRANK zset member                     # 获取排名(升序,从0开始)
ZREVRANK zset member                  # 获取排名(降序)
ZCARD zset                            # 获取成员数量
ZCOUNT zset 0 100                     # 获取分数范围内数量
 
# 修改元素
ZINCRBY zset 10 member                # 增加分数
 
# 删除元素
ZREM zset member1 member2
ZREMRANGEBYRANK zset 0 10             # 按排名删除
ZREMRANGEBYSCORE zset 0 100           # 按分数删除

键管理

基本操作

# 查看键
EXISTS key                            # 检查存在
KEYS pattern                          # 匹配键(生产慎用)
SCAN 0 MATCH pattern* COUNT 100       # 扫描键(推荐)
 
# 类型查看
TYPE key
 
# 删除键
DEL key1 key2
UNLINK key1 key2                      # 异步删除
 
# 重命名
RENAME oldkey newkey
RENAMENX oldkey newkey                # 新键不存在时重命名
 
# 随机键
RANDOMKEY

过期时间

# 设置过期时间
EXPIRE key 3600                       # 秒
PEXPIRE key 3600000                   # 毫秒
EXPIREAT key timestamp                # Unix时间戳
PEXPIREAT key timestamp-ms
 
# 查看过期时间
TTL key                               # 剩余秒数
PTTL key                              # 剩余毫秒数
 
# 取消过期时间
PERSIST key
 
# 在设置值时指定过期
SET key value EX 3600
SETEX key 3600 value

持久化

RDB快照

# 手动触发快照
redis-cli BGSAVE                      # 后台保存
redis-cli SAVE                        # 同步保存(阻塞)
 
# 查看最后保存时间
redis-cli LASTSAVE
 
# 配置自动保存
# redis.conf
save 900 1
save 300 10
save 60 10000

AOF日志

# 启用AOF
# redis.conf
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec                  # 同步策略
 
# 手动触发重写
redis-cli BGREWRITEAOF
 
# 查看AOF状态
redis-cli INFO persistence

持久化对比

特性RDBAOF
文件大小
恢复速度
数据安全可能丢失更安全
性能影响略大
适用场景备份、主从同步数据安全

主从复制

配置主从

# 从节点配置
# redis.conf
replicaof 192.168.1.100 6379
masterauth password                   # 主节点密码
replica-read-only yes                 # 从节点只读
 
# 或在运行时配置
redis-cli REPLICAOF 192.168.1.100 6379
redis-cli REPLICAOF NO ONE            # 取消复制

查看复制状态

redis-cli INFO replication
redis-cli ROLE

哨兵模式

哨兵配置

# sentinel.conf
port 26379
sentinel monitor mymaster 192.168.1.100 6379 2
sentinel auth-pass mymaster password
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

哨兵操作

# 启动哨兵
redis-sentinel sentinel.conf
redis-server sentinel.conf --sentinel
 
# 查看主节点
redis-cli -p 26379 SENTINEL master mymaster
 
# 查看从节点
redis-cli -p 26379 SENTINEL replicas mymaster
 
# 手动故障转移
redis-cli -p 26379 SENTINEL failover mymaster

性能优化

内存优化

# 查看内存使用
redis-cli INFO memory
 
# 内存分析
redis-cli MEMORY USAGE key
redis-cli MEMORY STATS
 
# 淘汰策略配置
maxmemory-policy allkeys-lru          # 推荐策略

性能测试

# redis-benchmark
redis-benchmark -h localhost -p 6379 -c 50 -n 100000
redis-benchmark -t set,get -n 100000  # 测试指定命令
redis-benchmark -q                    # 静默模式

慢查询日志

# 配置
CONFIG SET slowlog-log-slower-than 10000  # 10毫秒
CONFIG SET slowlog-max-len 128
 
# 查看慢查询
SLOWLOG GET 10
SLOWLOG LEN
SLOWLOG RESET

💡 Redis建议:

  • 合理设置内存限制和淘汰策略
  • 生产环境启用持久化
  • 使用SCAN替代KEYS命令
  • 监控内存使用和慢查询

🔗 相关笔记: 08.01_MySQL与MariaDB 09.01_Web服务部署 12.01_性能优化