Redis

持久化

1.两种持久化方式
Rdb:数据快照,写到相应的rdb文件,有save与bgsave命令进行数据保存。默认使用bgsave调用fork函数,开启子进程作为守护进程在后台运行。
Aof:以日志的形式记录操作命令(写操作)。常用的是everysec每秒记录写入日志文件,这样丢失的数据也是一秒内的数据。数据库重启时导入数据。
aof重写,将连续相同的命令进行合并,写入重写缓冲区。
aof写数据过程
Redis_第1张图片

rdb与aof选择
Redis_第2张图片

分布式锁

加锁,解锁流程
1.调用setnx命令,设置锁
setnx-当key不存在的时候set,存在返回
2.给锁加过期时间expire,防止加锁后,程序出现问题,无法释放锁
3.程序执行完,调用del命令,删除锁

数据删除策略-针对过期数据

1.定时删除-创建一个定时器,一到过期时间就立即删除对应的key
节约内存,但占用cpu,影响redis的响应时间和指令吞吐量
2.惰性删除
数据到达过期时间,不做处理,下次反问数据时,删除。
所有get操作与ExpireFNeeded()函数绑定,在get之前,判断是否过期
节约cpu性能,但长期占用内存,内存压力大
3.定期删除
周期性轮询redis时效性数据,采取随机抽取的策略
Cpu设置有峰值,内存压力也不是很大
Redis_第3张图片

逐出算法,内存淘汰策略

1.新数据写入,内存不足怎么办?
Redis_第4张图片
2.八大策略

Redis_第5张图片
Redis_第6张图片

高级数据类型

专门为解决某一种类型问题而设计

  • Bitmaps-能用0与1表示的功能
  • Hyperloglog-统计独立UV
  • Geo-给坐标算距离

Bitmaps

  1. 运用场景,用户签到,浏览量,是否党员等数据能用0或者1表示的功能模块
  2. 命令
#插入数据  setbit key offset value
Setbit qiaodao0229 0 1

#添加数据  getbit key offset
Getbit qiaodao0229 0

#将指定的key进行位运算,并将结果保存在destkey中
# bitop op destkey key1 [key2…]
Bitop or qiaodao qiaodao0229 qiaodao0228

#统计指定key中1的数量 Bitcout key [start end]
Bitcout qiandao

HyperLogLog

用于独立数据统计,exp:统计独立UV
基数是数据集去重后的元素个数。
{1,3,3,5} 基数为3
HyperLogLog用来做基数统计的,运用了LogLog算法。

Redis集群

主从复制

1.概念-将master中的数据及时有效地复制到slave
数据库中
Master:主要写数据,执行写数据时自动同步到slave,读数据可忽略不计
Slave:主要以读数据为主,禁止写数据
2.作用

  • 读写分离:提高服务器的读写负载能力
  • 负载均衡:slave分担master的负载,提高并发量和数据吞吐量
  • 故障恢复:当主服务器出现故障时,由从服务器提供服务,快速恢复故障
  • 数据冗余:实现数据热备份
  • 高可用基石:基于主从复制,构建哨兵模式和集群,实现高可用

3.工作流程

  • 建立连接阶段(准备阶段)
  • 数据同步阶段
  • 命令传播阶段

建立连接阶段:
建立slave到master的连接,使master能识别slave服务器,保存slave端口号
工作流程
Redis_第7张图片
连接方式:
方式一:客户端发送命令
slaveof masterip masterport
方式二:启动服务器参数
redis-server - -slaveof ip port
方式三:配置文件
Slaveof masterip masterport

数据同步阶段
将slave服务器状态更新为master当前的数据库状态
工作流程:
Redis_第8张图片
数据同步注意事项:
1.如果master数据量巨大,应避免在流量高峰期进行数据同步,防止master阻塞,影响业务进行
2.复制缓冲区大小设置不合理,会导致数据溢出。如进行全量复制,周期太长,进行部分复制时发现数据已经存在丢失的情况下,必须进行第二次全量复制,致使slave陷入死循环状态。
3.多个slave向master请求同步时,master 发送的rdb文件会增多,会对带宽冲击很大,适量错峰

命令传播阶段
部分复制(增量复制)核心三要素:
- 服务器的运行id(runid),身份识别码
- 主服务器的复制积压缓冲区,先进先出队列,用与存储master所有指令
- 主从服务器的复制偏移量(offset),描述复制缓冲区中的指令字节位置

复制缓冲区工作原理
Redis_第9张图片
数据同步➕命令传播阶段工作流程
Redis_第10张图片
心跳机制
Redis_第11张图片

哨兵

是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master上。
也是redis服务器,不提供数据服务,设置为单数个。

作用

  • 监控
    不断检查master与slave是否正常运行
    master存活检测,master与slave运行情况检测
  • 通知
    当被检测的服务器出现问题时,向其他哨兵发送通知
  • 自动故障转移
    断开master与slave连接,选取一个slave作为master,将其他的slave连接到新的master,并告知客户端新的服务器地址

工作原理

你可能感兴趣的:(笔记)