redis架构详解

一、redis特性
1.redis 是什么?
redis是基于内存的可持久化的key-value数据库
2.redis数据结构类型?
value支持五种数据类型,字符串、字符串列表、字符串集合、有序集合、hashs
3.redis持久存储方式
redis两种持久化方式,RDB,和AOF
RDB: 将某一时刻的数据持久化到磁盘上,是一种快照式的持久方式, redis在进行持久化的过程中,会先将数据写入临时文件中,待持久化过程结束,会用这个临时文件,替换上次持久化的文件,正是这种特性,让我们可以随时来进行备份,因为快照文件总是完整可用的。
原理:rdb方式持久化时,redis会fork出一个子进程进行持久化,主进程不会进行任何io操作,确保redis性能不会因持久化而降低,如果对数据不敏感且需要大规模恢复数据,可以使用这种方式

AOF: 将执行过的写指令记录下来,在数据恢复时,将指令按照顺序在执行一边.
我们通过配置redis.conf中的appendonly yes就可以打开AOF功能.如果有写操作,就会追加到aof文件末尾,默认aof持久化策略是每秒钟fsync一次将数据从缓存区域刷到磁盘上,因为在这种情况下,redis仍然可以保持很好的处理性能,即使redis故障,也只会丢失最近1秒钟的数据.
问题1: aof文件坏了怎么办?
备份被写坏的AOF文件
运行redis-check-aof –fix进行修复
用diff -u来看下两个文件的差异,确认问题点
重启redis,加载修复后的AOF文件
问题: aof追加方式文件会越来越大怎么处理?
redis提供了rewrite重写机制,当aof文件大小超过设置阀值,就会启动aof文件压缩,保留恢复数据的最小指令集,在重写时也是先写入临时文件
rewrite原理:在从写开始时,任redis会fork出一个子进程,这个子进程会首先读取现有的AOF文件,并将其包含的指令进行分析压缩并写入到一个临时文件中.
与此同时,主工作进程会将新接收到的写指令一边累积到内存缓冲区中,一边继续写入到原有的AOF文件中,这样做是保证原有的AOF文件的可用性,避免在重写过程中出现意外,当“重写子进程”完成重写工作后,它会给父进程发一个信号,父进程收到信号后就会将内存中缓存的写指令追加到新AOF文件中,当追加结束后,redis就会用新AOF文件来代替旧AOF文件,之后再有新的写指令,就都会追加到新的AOF文件中了

4.redis主从

主从优点: 冗余备份,提升性能,读写分离,主从架构异步进行,不会降低处理性能

主从原理:
从服务器向主服务器发送sync指令,当主服务器接到指令后,就会调用bgsave指令创建子进程专门用来进行持久化工作,也就是将主服务器上的数据写入rdb。在数据持久化期间,主服务器将执行的写指令都缓存在内存中。
在bgsave指令完成后,主服务器会讲rdb文件发送给从服务器,从服务器将文件保存到磁盘上,然后读到内存中。这个动作完成后,主服务器会将这段时间缓存得到写指令在以redis协议发送给从服务器.
注: 即使有多个从服务器发送sync指令,主服务器也只会执行一次bgsave

5.redis事物

redis四个指令构成redis事物处理的基础
1.MULTI用来组装一个事务;
2.EXEC用来执行一个事务;
3.DISCARD用来取消一个事务;
4.WATCH用来监视一些key,一旦这些key在事务执行之前被改变,则取消事务的执行

猜你喜欢

转载自blog.51cto.com/haoyonghui/2460847
今日推荐