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 10000AOF日志
# 启用AOF
# redis.conf
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec # 同步策略
# 手动触发重写
redis-cli BGREWRITEAOF
# 查看AOF状态
redis-cli INFO persistence持久化对比
| 特性 | RDB | AOF |
|---|---|---|
| 文件大小 | 小 | 大 |
| 恢复速度 | 快 | 慢 |
| 数据安全 | 可能丢失 | 更安全 |
| 性能影响 | 小 | 略大 |
| 适用场景 | 备份、主从同步 | 数据安全 |
主从复制
配置主从
# 从节点配置
# 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命令
- 监控内存使用和慢查询