Redis
2025-09-08 10:36:57 0 举报
AI智能生成
Redis
作者其他创作
大纲/内容
基本数据类型
string
计数器
分布式系统全局序列号
整型(int)
bitmap
用户在线状态
用户签到
统计活跃用户
是否参加过某一活动,是否读过某一文章,是否成为会员
内部编码
raw
int
embstr
list
任务队列
内部编码
ziplist
linkedlist
quicklist
set
实现交集 并集 差集
点赞 收藏 标签
内部编码
intset
hashtable
zset
排行榜
优先级队列
ziplist
跳表(skiplist)
元素个数超过128,由ziplist结构转到skiplist
单个元素大小超过64byte
内部编码
skiplist
ziplist
hash
内部编码
ziplist
hashtable
购物车
其他数据类型
HyperLogLog
用法
做基数统计
统计注册 IP 数
统计每日访问 IP 数
统计页面实时 UV 数
统计在线用户数
统计用户每天搜索不同词条的个数
特点
基数不大,数据量不大就用不上,会有点大材小用浪费空间
有局限性,只能统计基数数量,而没办法去知道具体的内容是什么
和bitmap相比,属于两种特定统计情况,简单来说,HyperLogLog 去重比 bitmap 方便很多
一般可以bitmap和hyperloglog配合使用,bitmap标识哪些用户活跃,hyperloglog计数
GEO
高级特性
缓存淘汰策略
volatile-lru
volatile-lfu
volatile-ttl
volatile-random
allkeys-lru
allkeys-lfu
allkeys-random
no-enviction
发布订阅
实时消息系统
持久化
RDB
AOF
AOF写回策略
AOF重写机制
IO多路复用模型
常见性能问题及解决方案
Redis的并发竞争问题如何解决?
乐观锁
分布式锁
时间戳
消息队列
同步机制
同步原理
主从复制
读写分离
负载均衡
故障恢复
数据冗余
流程
建立连接
设置master的地址和端口,保留master信息
建立socket连接
发送ping命令
身份验证
发送slave端口信息
主从连接成功
数据同步
请求同步数据
创建RDB同步数据
恢复RDB同步数据
请求部分同步数据
恢复部分同步数据
数据同步完成
命令传播
常见问题
频繁的网络中断
问题现象
master中的CPU占用过高或slave频繁断开连接
问题原因
当slave每秒发送REPLACK CONF 命令到master
当slave接到了慢查询时(keys *,hgetall等),会大量占用CPU性能
master每秒调用复制定时函数replicationCorn(),比对slave发现长时间没有进行响应
最终结果
master各种资源(输出缓冲区 带宽 连接等)被严重占用
解决方案
通过设置合理的超时时间,确认是否释放slave:repl-timeout
数据不一致
问题现象
多个slave获取相同的数据不同步
问题原因
网络信息不同步,数据发送有延迟
解决方案
优化主从间的网络环境,通常放置在同一个机房部署。
监控主从节点延迟(通过offset)判断,如果slave延迟过大,暂时屏蔽程序对该slave的数据访问
slave-serve-stale-data res|no
心跳机制
进入命令传播阶段,master与slave间需要进行通信,使用心跳机制进行维护,实现双方连接保持在线
master心跳
指令:PING
周期:由repl-ping-slave-period决定,默认10秒
判断slave是否在线
查询:INFO replication 获取slave最后一次连接时间,lag项维持在0和1属于正常
slave心跳任务
指令:REPLCONF ACK(保存偏移量offset)
周期:1秒
作用
汇报slave自己的复制偏移量,获取最新的数据变更指令
判断master是否在线
缓存
缓存预热
解决方案
前置准备工作
日常例行统计数据访问记录,统计访问频度较高的热点数据
利用LRU数据删除策略,构建数据留存队列
准备工作
将统计结果中的数据分类,根据级别,redis优先加载级别较高的热点数据
利用分布式多服务器同时进行数据读取,提速数据加载过程
实施
使用脚本程序固定触发数据预热过程
如果条件允许,使用CDN,效果更好
缓存穿透
布隆过滤器
缓存空对象
缓存击穿
互斥锁
缓存雪崩
问题排查
较短时间内,较多的key集中过期
此时请求访问过期的数据,redis未命中,redis向数据库获取数据
数据库同时接收到大量的请求无法及时处理
解决方案
页面静态化处理
构建多级缓存架构
DB严重耗时优化
灾难预警机制
监控Redis服务器性能指标
CPU占用 CPU使用率
内存容量
查询平均响应时间
线程数
限流 降级
LRU与LFU切换
数据有效期策略调整
超热数据使用永久key
定期维护
加锁
粒度控制
性能指标监控
性能指标监控命令
数据一致性问题
实时同步
异步队列
同步工具canal
采用UDF自定义函数
LUA
运维管理
慢查询分析
slowlog-log-slower-than
slowlog-max-len
showlog get
slowlog reset
redis shell
redis-cli
redis-server
redis-benchmark
Pipeline
阻塞
发现阻塞
Redis监控系统
CacheCloud
内部原因
API或数据结构使用不合理
如何发现慢查询
如何发现大对象
CPU饱和问题
持久化阻塞
fork阻塞
AOF刷盘阻塞
HugePage写操作阻塞
外部原因
CPU竞争
内存交换
网络问题
连接拒绝
网络闪断
Redis连接拒绝
连接溢出
网络延迟
网卡软中断
实现
分布式锁
redisson
基本使用
setnx+setex
watch
消息队列
事务
muitl
exec
discord
problem
怎么提高缓存命中率?
影响缓存命中率的因素
业务场景
时效性
缓存粒度
过期时间和更新策略
缓存预加载-预热
缓存击穿和缓存穿透
缓存容量
提高缓存命中率的方法
聚焦在高频访问且时效性要求不高的热点业务上(如字典数据、session、token)
缓存预加载(预热)
增加存储容量
调整缓存粒度
更新缓存
集群访问倾斜和数据倾斜
特性
速度快
基于键值对
功能丰富
简单稳定
客户端语言多
持久化
主从复制
高可用和分布式
优势
(1)响应快速,由于数据存储在内存中,不用访问磁盘,内存访问远高于磁盘IO
(2)支持多种数据类型
(3)操作都是原子的
(4)丰富的特性,可用于缓存 消息
0 条评论
下一页