redis
学习cpu给数据库也增加一个缓存
把数据都记录在内存
把数据都记录在内存中,不用去记录慢如蜗牛的I/O操作,执行redis缓存查询节省不少时间
定期删除
设置多少时间,交给应用程序自己设置
redis执行把过期内存删除,100ms就做一次,1秒钟就是10次
随机删除一部分,缓解内存压力
惰性删除
一些键值未被算法选中随机删除掉,已超期的,遇到查询请求立即删除。
内存淘汰策略
缓存击穿
过期时间均匀分布+热点数据永不过期
ROB备份
mysql二进制日志文件--二进制数据,所有数据更改操作
AOF持久化
指令合并
临时缓冲区aof_buf,择期写入aof
aof_rewrite_buf 重写缓冲区,从创建重写子进程的那一刻起,把后面进来的命令也copy一份写入这个重写缓冲区中,等到子进程重写文件结束后,再把这个缓冲区的命令写入到新的aof文件中,最后再重命名新的文件
Redis哨兵与高可用原理
主节点:数据写入和同步
主节点数据写RDB文件给从节点同步,如果主节点有数据写入、删除、修改命令,也会把这些命令挨个通知到从节点
主节点内部准备一个缓冲区,后面传播命令的时候,除了同步给从节点,也往缓冲区写一份。下次再掉线就把缓冲区里命令最近的发给从节点
游标
哨兵
故障转移
新主节点选择标准
扩容
把主从节点内存拼起来,每个人负责一部分数据,合体进化成一个大的缓存服务器,变成一个集群,握手协议接纳新缓存服务器扩容
加入集群可以通过任何一个节点,有IP和端口,发送MEET信息发起握手,对方回复PONG信息,同意入伙,最后再回一个ping信息,三次握手就完成了,然后再通知其他节点。
数据存储公平
学习哈希表的方法
根据能力分配槽位,内存空间大的分的多
键值读写的时候,对键值做哈希计算,映射到哪个槽位就由谁负责,启动的时候,每个人都得把自己负责的槽位信息告诉其他节点,为了压缩空间,每个槽位就用一个bit来表示,自己负责的是1,否则是0,总共2048字节
准备超大数组同步数据由谁处理