redis体系架构及一些认知

Redis是NoSQL数据库的一种Redis是以KV方式存储数据库
特点:非关系,分布,开源,可扩展,高速内存操作。
适合运行在廉价的pc服务器上分布式处理海量数据
Redis是一个开源的,先进的kv存储方式的数据库,通常叫数据结构服务器,键可以包含字符串strings,哈希hashes,lists链表,集合sets,有序集合sorted sets/zsets,这些数据类型支持push,pop,add,move及集合等操作,支持各种不同方式排序,为了提供性能,数据都在内存中,为了数据可靠根据需要周期更新数据到磁盘或日志记录文件.

这里写图片描述
互联网数据目前基本使用两种方式来存储,关系数据库或者key value。但是这些互联网业务本身并不属于这两种数据类型,比如用户在社会化平台中的关系,它是一个list,如果要用关系数据库存储就需要转换成一种多行记录的形式,这种形式存在很多冗余数据,每一行需要存储一些重复信息。如果用key value存储则修改和删除比较麻烦,需要将全部数据读出再写入。Redis在内存中设计了各种数据类型,让业务能够高速原子的访问这些数据结构,并且不需要关心持久存储的问题,从架构上解决了前面两种存储需要走一些弯路的问题.

Redis 新版本增加了VM特性。让Redis数据容量突破了物理内存的限制。并实现了数据冷热分离。用get/set方式使用Redis
作为一个key value存在,很多开发者自然的使用set/get方式来使用Redis,实际上这并不是最优化的使用方法。尤其在未启用VM情况下,Redis全部数据需要放入内存,节约内存尤其重要。假如一个key-value单元需要最小占用512字节,即使只存一个字节也占了512字节。这时候就有一个设计模式,可以把key复用,几个key-value放入一个key中,value再作为一个set存入,这样同样512字节就会存放10-100倍的容量。

AOF和RDB两种方式的高可用
Redis有两种存储方式,默认是RDB方式,实现方法是定时将内存的快照(snapshot)持久化到硬盘,这种方法缺点是持久化之后如果出现crash则会丢失一段数据,因为RDB是在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复。 优点:使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了redis的高性能 缺点:RDB是间隔一段时间进行持久化,如果持久化之间redis发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候。
因此在完美主义者的推动下作者增加了AOF方式。aof即append only file(append only mode),在写入内存数据的同时将操作命令保存到日志文件,在一个并发更改上万的系统中,命令日志是一个非常庞大的数据,管理维护成本非常高,恢复重建时间会非常长,这样导致失去aof高可用性本意。另外更重要的是Redis是一个内存数据结构模型,所有的优势都是建立在对内存复杂数据结构高效的原子操作上,这样就看出aof是一个非常不协调的部分。
aof目的主要是数据可靠性及高可用性,可以保持更高的数据完整性,如果设置追加file的时间是1s,如果redis发生故障,最多会丢失1s的数据;且如果日志写入不完整支持redis-check-aof来进行日志修复;AOF文件没被rewrite之前(文件过大时会对命令进行合并重写),可以删除其中的某些命令(比如误操作的flushall)。 缺点:AOF文件比RDB文件大,且恢复速度慢。在Redis中还有另外一种方法来达到目的:Replication。由于Redis的高性能,复制基本没有延迟。这样达到了防止单点故障及实现了高可用。

redis 的备份模式:
这里写图片描述
容灾模式:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/louisjh/article/details/79286006
今日推荐