Redis
2021-04-01 14:08:49 0 举报
AI智能生成
Redis
作者其他创作
大纲/内容
优势
(1)响应快速,由于数据存储在内存中,不用访问磁盘,内存访问远高于磁盘IO
(2)支持多种数据类型
(3)操作都是原子的
(4)丰富的特性,可用于缓存 消息
基本数据类型
string
计数器
分布式系统全局序列号
整型(int)
bitmap
用户在线状态
用户签到
统计活跃用户
是否参加过某一活动,是否读过某一文章,是否成为会员
value
embstr编码的简单动态字符串
raw编码的简单动态字符串
list
任务队列
linkedlist
ziplist
set
实现交集 并集 差集
点赞 收藏 标签
intset
hashtable
zset
排行榜
优先级队列
ziplist
跳表(skiplist)
元素个数超过128,由ziplist结构转到skiplist
单个元素大小超过64byte
hash
hashtable
ziplist
购物车
其他数据类型
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
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
运维管理
性能测试
redis-benchmark
实现
分布式锁
redisson
setnx+setex
watch
消息队列
事务
muitl
exec
discord
0 条评论
下一页
为你推荐
查看更多