数据模型
html
jemallocredis
redis默认的内存分配器。数据库
RedisObject数组
redis中的全部数据都是以RedisObject的形式存储的。服务器
typedef struct redisObject { unsigned type:4; unsigned encoding:4; unsigned lru:REDIS_LRU_BITS; /* lru time (relative to server.lruclock) */ int refcount; void *ptr; } robj;
SDS数据结构
SDS(Simple Dynamic String),Redis采用SDS来标识字符串架构
struct sdshdr { int len; int free; char buf[]; };
buf表示字节数组,用来存储字符串;len表示buf已使用的长度,free表示buf未使用的长度。下面是两个例子。负载均衡
redis支持五种类型的数据。ide
字符串日志
哈希
列表
列表(list)用来存储多个有序的字符串,每一个字符串称为元素;
一个列表能够存储2^32-1个元素。
Redis中的列表支持两端插入和弹出,并能够得到指定位置(或范围)的元素,能够充当数组、队列、栈等。
集合
有序集合
持久化即备份,这是高可用的策略之一,有了备份,就能够在Redis故障经过备份进行恢复。redis持久化主要有RDB和AOF。
RDB(Redis DataBase),基于策略定时将redis内存中的数据保存到硬盘。须要时能够经过这个备份文件进行恢复。
AOF(Append Only File),是把每次redis执行的命令记录到日志文件中(相似于MySql的Bin log),当Redis启动时能够经过执行log中的命令来恢复数据。
主从复制,是把一台redis服务器上数据复制到其余服务器的机制,其中前者被称为主节点(master)。后者被称为从节点(slave)。
上面说的持久化是解决单机备份问题(内存到硬盘),主从复制主要解决数据在多机器之间的热备份,实现负载均衡和故障恢复。
主从复制的主要主要做用:
哨兵,Redis sentinel,在主从复制的基础上实现故障恢复的自动化。其核心功能是主节点(master)的自动故障转移。
主要功能:
架构:
它由两部分组成,哨兵节点和数据节点:
哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。
数据节点:主节点和从节点都是数据节点。
持久化实现了单机的备份,主从解决了多机的热备份,以及读的操做的负载均衡,最终经过哨兵实现了主节点的自动故障迁移。
目前还有一个核心问题,主节点只有一个,写操做只能写到一个节点,尚未实现负载均衡,存储能力彻底受限于单机的存储能力。
集群就是用来解决写操做负载均衡的问题。其核心就是数据分片。集群将数据分散到不一样的集群上,解决单机存储能力受限的问题。