redis知识点整理

redis 执行过程
redis执行过程,分三步走:接收命令,执行命令,返回结果。
redis 线程模型
redis通过I/O复用器,多线程接收客户端的操作指令
redis接收到操作指令后把指令保存在内部队列中
redis单线程执行队列命令
redis执行命令后的结果通过文件事件分派器多线程通知客户端
redis 数据结构的使用
string:缓存、计数器、session、分布式锁
hash:存储对象
set:去重、交并集
list:消息队列、数据的分页显示
zset:排行榜
redis 持久化
rdb:二进制压缩数据集形成快照写入磁盘,数据保存在一个文件中,比较适合灾备;缺点是快照保存完成之前宕机会导致快照丢失,保存快照时服务短时间内不可用
aof:文本日志记录redis处理的每一个指令,写入操作使用追加模式,同步策略比较灵活,支持每秒同步,修改同步,不同步;缺点是相同数据集aof所占空间大,执行慢
redis 高可用
主从:数据写入主redis,主redis发送当前数据快照和后续指令给从redis构造数据,主要解决redis的读写分离,写主读从
集群:采用分片机制,每个节点负责一批数据slot插槽(16384),计算方式为crc16(key)&16383,主要解决单点内存不足问题
哨兵:Sentine主要用于监控redis服务的状态,以及提供一定的策略当主挂掉时从剩下的从redis里面选出一个作为主
redis 主从实现原理
启动从redis时,从redis发送一个psync命令给主redis。主redis触发一个全量复制,启动一个线程,生成数据快照,把快照发给从reids,顺便把快照之后的日志命令增量同步给从redis
redis2.8之后,新增复制功能新增部分重新同步功能,主从运行一段时间后,从挂掉再启动时,不需要全部数据集的快照,而是主redis根据从redis最后运行的日志命令把之后的增量命令同步给从redis
redis 哨兵功能
集群监控:负责监控redis主从是否正常
消息通知:某个redis异常时通知管理员
故障转移:主挂了,从自动升级为主
配置中心:故障转移后,原主配置同步到现主
redis 哨兵为什么至少3个
只有两个哨兵的情况下,挂掉一个哨兵时,无法执行执行故障转移
redis 为什么采用单线程
redis基于内存操作,瓶颈是机器内存和网络带宽,cpu不是瓶颈,cpu密集型
redis 为什么执行速度快
数据存储在内存
非阻塞io处理并发请求
单线程减少了上下文切换
redis key失效机制
定期+惰性+内存淘汰
定期:每隔100s扫描几条数据淘汰
惰性:查询的时候,判断下是否过期,过期删除返回null
redis 内存淘汰策略
FIFO:先进先出 没有使用
LRU:最近最少使用
LRF:使用次数最少
redis 缓存雪崩,穿透,击穿以及解决方法
雪崩:大量key同时失效,大量请求直接访问数据库;随机时间失效,熔断
穿透:恶意请求特定的key在redis没有命中,直接访问数据库;数据库查询为null时设置redis为null;参数过滤、id过滤
击穿:某个热点失效,针对这个热点的请求直接访问数据库;加锁、永不失效

你可能感兴趣的:(redis)