Redis
Redis 是什么
Redis是 remote dictionary server 的缩写,是一个key-value型的数据存储系统
Redis特性
丰富的数据类型和操作:string, list, hash, set, sorted set
数据持久化
主从复制
键过期
事务
键过期
惰性删除:每次读写操作时判定是否过期,过期就删除
定时删除:redis serverCron 程序删除过期键
定期清除:检查expires字典进行清除
主从 键过期:主服务器删除,会同步到从,从访问过期不会删除,只会返回key为空状态
主从服务器在保存rdb文件时会过滤过期键
从加载rdb文件时不会过滤过期键,主会
持久化
Rdb方式:将内存的数据以快照的方式写入磁盘。
父进程继续处理client请求,子进程负责将内存内容写入到临时文件,当子进程将快照写入临时文件完毕后,用临时文件替换原来的快照文件,然后子进程退出
优劣:性能高,数据占用磁盘较小;一旦崩溃,数据丢失率教大,数据量大重写时 i/o开销较大
Aof方式:每次写命令都会持久化所有写操作命令,重启时,通过重新执行这些命令还原数据。在数据还原时,只有和数据库无关的订阅等功能正常接收请求,其他的一律失败。
优缺点:性能相对较低,数据占用磁盘大;数据丢失较少,性能比较稳定。
Aof重写:随着运行时间的流逝, AOF 文件变得越来越大,通过重写节省空间
主进程fork出子进程,同时增加一个aof重写缓存,主进程处理命令请求,主进程将命令追加到现有的aof文;主进程将命令追加到aof重写缓存,子进程完成aof文件重写,通知主进程,主进程将aof重写缓存内容全部写入到新aof文件;主进程对新的aof文件进行重命名,覆盖老的aof文件
主从复制
主从复制就是把一台redis数据库中的数据同步到另一台redis数据库
一个master可以拥有多个slave,而一个slave又可以拥有多个slave,master可以有多个slave
除了多个slave连到相同的master外,slave也可以连接其他slave形成图状结构
主从复制不会阻塞master。相反slave在初次同步数据时则会阻塞不能处理client的请求。
流程:左边slave,右边master
集群架构
Redis集群到底怎么做有很多方式,这里就简单介绍其中一种方式。
主从结构,主节点用于处理所有请求,从节点备份。脚本定时rdb备份。脚本监控节点状态,主从漂移切换。Zookeeper保存配置,客户端与zookeeper集群通信维护集群状态信息。Double扩展。