简介
Redis 是BSD 协议开源的高性能 key‑value 内存数据库。 三大核心特点:
Redis 优势
Redis 与其他 key‑value 存储有什么不同
哈希槽的基本概念(Redis‑Cluster 集群)
Redis 常见应用场景
Redis 特性
- 快的原因:全部内存运算;业务逻辑简单;规避多线程锁竞争;epoll IO 多路复用,单线程管理大量 socket 连接。
- 注意:仅命令执行单线程,后台还有 fsync、关闭 fd 等辅助线程。
- 风险:慢命令会阻塞整个 Redis 服务,如keys *、大 Lua 脚本、超大集合操作。
- Linux IO 多路复用三种 API:select、poll、epoll。
缓存相关要点
- 存储层级:CPU 缓存→内存→磁盘,速度递减,容量递增。
- 缓存两大特征:高速介质加速访问;缓存容量小于后端存储,存在数据淘汰。
- 旁路缓存:读写逻辑写业务代码,Redis 只被动接收请求。
- 只读缓存:写操作直接操作数据库,修改数据后删除缓存。
- 读写缓存:同步直写(同时写缓存 + 数据库,安全,性能差);异步写回(先写缓存,淘汰时回写数据库,性能高,存在丢数据风险)。
- 缓存三大问题
- 缓存雪崩:大量 key 同时过期 / Redis 宕机,请求全部打数据库;解决:过期增加随机偏移、高可用、限流、多级缓存。
- 缓存穿透:查询不存在的数据;解决:参数校验、缓存空值、布隆过滤器。
- 缓存击穿:单个热点 key 过期,大量并发打数据库;解决:互斥锁、热点 key 永不过期业务主动更新。
Pipeline 流水线
redis 的安装
源码编译(CentOS7)
yum install tcl gcc gcc‑c++ -y
tar zxvf redis‑6.2.14.tar.gz -C /usr/local
cd /usr/local/redis‑6.2.14
make && make install
redis‑server redis.conf &
redis‑cli
yum/dnf 安装(CentOS Stream8)
dnf install -y redis
systemctl enable redis –now
redis‑cli
ping #返回PONG代表服务正常
Redis 多实例:不同端口启动多个进程
redis‑server –port 6380
redis‑cli -p 6380
Redis 配置文件说明 redis.conf
bind 127.0.0.1 #监听绑定IP,0.0.0.0允许所有IP访问
protected‑mode yes #保护模式,无密码且bind非127.0.0.1拒绝外部访问
port 6379 #服务端口
tcp‑backlog 511 #TCP半连接队列
timeout 0 #空闲连接超时,0代表不超时
tcp‑keepalive 300 #TCP保活探测周期
daemonize no #是否后台守护进程
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /var/log/redis/redis.log
databases 16 #默认16个逻辑数据库,select切换db
#RDB持久化快照
save 900 1
save 300 10
save 60 10000
stop‑writes‑on‑bgsave‑error yes
rdbcompression yes
rdbchecksum yes
dir /var/lib/redis
dbfilename dump.rdb
#AOF持久化追加日志
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
#安全配置
requirepass 123456 #设置访问密码
maxclients 10000 #最大客户端连接数
#慢查询日志,单位微秒,1ms=1000us
slowlog‑log‑slower‑than 10000
slowlog‑max‑len 128
#复制相关
replica‑serve‑stale‑data yes
replica‑read‑only yes
replica‑priority 100 #哨兵选主优先级,0永不选为master
config 命令实现动态修改配置以及慢查询
CONFIG GET * #查看全部运行时配置
CONFIG SET requirepass 123456 #内存动态修改配置
SLOWLOG LEN #查看慢日志总条数
SLOWLOG GET #获取慢查询详情
注意:CONFIG SET仅修改内存,重启服务失效,不会写入 redis.conf,部分参数不支持动态修改。
RDB(Redis DataBase)& AOF(Append-only File)持久化
Redis 是内存数据库,断电内存数据丢失;持久化把内存数据保存到磁盘,重启恢复数据,两种持久化可以同时开启。
RDB 快照持久化
把某一时刻全部内存数据生成二进制快照 dump.rdb 保存磁盘。
- 自动触发:配置save 秒数 key变更数量条件。
- 手动触发:SAVE主线程阻塞;BGSAVE fork 子进程后台执行,生产推荐。
✅优点:二进制文件体积小,适合备份迁移;重启恢复速度快。 ❌缺点:两次快照之间的数据存在丢失风险;fork 会消耗内存。
AOF 追加日志持久化
记录每一条写操作命令,追加写入 appendonly.aof 日志;重启重放日志恢复数据。 appendfsync三种刷盘策略:
- AOF rewrite 重写:AOF 文件持续膨胀,rewrite 基于当前内存状态生成全新 AOF,剔除无效历史命令,压缩文件体积。
- 混合持久化 aof‑use‑rdb‑preamble yes:rewrite 头部写入 RDB 快照,后面追加 AOF 日志,兼顾恢复速度和安全性。
✅优点:数据安全性高,最多丢失 1 秒数据。 ❌缺点:AOF 文件体积更大;重启重放命令恢复速度比 RDB 慢。
生产最佳实践:RDB + AOF 混合开启。
客户端连接 Redis
- redis‑cli官方自带命令行
redis‑cli -h IP -p 端口 -a 密码
redis‑cli -h 127.0.0.1 -p 6379 -a 123456
- 编程语言客户端:Java (Jedis、Lettuce)、python (redis‑py)、Go、PHP。
- GUI 图形工具:Redis‑Desktop‑Manager。
INFO #显示当前节点redis运行状态信息
SELECT 0~15 #切换逻辑数据库,0‑15;集群模式仅允许db0
KEYS * #查看当前库下所有key,此命令慎用,数据量太大可能导致死机
DBSIZE #返回当前库下所有key数量
FLUSHDB/FLUSHALL #强制清空当前库/所有库中所有key,此命令一般不要用,数据丢失
SHUTDOWN #关闭redis服务,不要用,防止数据丢失
Redis 数据类型(命令模板)
1.String 字符串(二进制安全)
SET testkey value # 设置key‑value,key存在会覆盖原有值
GET testkey # 获取key对应的value值
SETNX testkey val # key不存在才设置;key已存在不做任何操作(分布式锁基础)
INCR testkey # 对key数字值原子+1,key不存在自动初始化为0
DECR testkey # 对key数字值原子‑1,key不存在自动初始化为0
EXPIRE testkey 30 # 设置key过期时间,单位:秒,30秒后key自动删除
TTL testkey # 查看key剩余存活过期时间;‑1永不过期,‑2key不存在
DEL testkey # 删除指定key,不管什么数据类型都可以删除
2.List 双向链表,允许重复元素,用于消息队列
LPUSH queue a b c # 从链表【左侧头部】插入一个或多个元素
RPUSH queue d e f # 从链表【右侧尾部】插入一个或多个元素
LPOP queue # 从链表左侧头部弹出一个元素,弹出后该元素从列表移除
RPOP queue # 从链表右侧尾部弹出一个元素,弹出后该元素从列表移除
BRPOP queue 10 # 阻塞式尾部弹出;队列无消息则阻塞等待最多10秒,有消息立刻返回,用于消费消息队列
LRANGE queue 0 -1 # 查看列表指定下标区间元素;0代表第一个,‑1代表最后一个,0‑1查看全部元素
3.Set 集合,无序、自动去重,支持交并差集
SADD myset a b c # 向集合添加元素,自动去重;重复元素不会重复存入
SMEMBERS myset # 返回集合里面全部的成员元素
SISMEMBER myset a # 判断a元素是否存在集合中;返回1存在,0不存在
SREM myset b # 删除集合中指定成员元素
SINTER set1 set2 # 求两个集合【交集】,返回同时存在于两个集合的元素
SUNION set1 set2 # 求两个集合【并集】,返回两个集合全部不重复元素
SDIFF set1 set2 # 求两个集合【差集】,返回存在set1、但是不存在set2的元素
4.ZSet 有序集合,score 分数排序,用于排行榜
ZADD rank 100 user1 95 user2 88 user3 # 添加有序集合成员;格式 ZADD key score member,score决定排序权重
ZRANGE rank 0 -1 WITHSCORES # 按score【从小到大升序】输出成员,WITHSCORES同时打印对应分数
ZREVRANGE rank 0 -1 WITHSCORES # 按score【从大到小降序】输出成员,做排行榜常用
ZREM rank user2 # 删除有序集合中指定member成员
ZSCORE rank user1 # 查询指定成员对应的score分数值
5.Hash 哈希,适合存储对象,field‑value
HSET user:100 name zhangsan age 18 # 设置hash字段,user:100为hash键;设置name、age字段
HGET user:100 name # 获取hash中单个field字段的值
HGETALL user:100 # 获取hash内全部field和value,返回所有字段与对应值
HKEYS user:100 # 只获取hash中所有的字段名(field)
HVALS user:100 # 只获取hash中所有字段对应的value数值
HDEL user:100 age # 删除hash内部指定的一个field字段,不会删除整个hash键

网硕互联帮助中心




评论前必须登录!
注册