阅读的博客:https://www.cnblogs.com/kismetv/category/1186633.html
内存模型
内存划分
- 数据本身
- redis进程运行本身需要的内存
- 缓冲区
- 内存碎片
存储细节
数据模型
- dicEntry:每一个键值对(Key-Value)都会有一个dicEntry。
- Key:redis key,以SDS的格式存储
- redisObject:redis value,以redisObject的格式存储。
jemalloc
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支持五种类型的数据。
字符串
- redis最基础的类型,字符串的长度不能超过512MB
哈希
- 哈希时redis支持的五种数据类型一直,redis作为key-value数据库本身所使用的数据结构
列表
列表(list)用来存储多个有序的字符串,每个字符串称为元素;
一个列表可以存储2^32-1个元素。
Redis中的列表支持两端插入和弹出,并可以获得指定位置(或范围)的元素,可以充当数组、队列、栈等。
集合
- 集合(set)与列表类似,都是用来保存多个字符串;
- 集合与列表有两点不同:集合中的元素是无序的,因此不能通过索引来操作元素;集合中的元素不能有重复。
一个集合中最多可以存储2^32-1个元素;
- 除了支持常规的增删改查,Redis还支持多个集合取交集、并集、差集。
有序集合
- 有序集合与集合一样,元素都不能重复;
- 但与集合不同的是,有序集合中的元素是有顺序的。
- 与列表使用索引下标作为排序依据不同,有序集合为每个元素设置一个分数(score)作为排序依据。
持久化
持久化即备份,这是高可用的策略之一,有了备份,就可以在Redis故障通过备份进行恢复。redis持久化主要有RDB和AOF。
RDB
RDB(Redis DataBase),基于策略定时将redis内存中的数据保存到硬盘。需要时可以通过这个备份文件进行恢复。
AOF
AOF(Append Only File),是把每次redis执行的命令记录到日志文件中(类似于MySql的Bin log),当Redis启动时可以通过执行log中的命令来恢复数据。
主从复制
主从复制,是把一台redis服务器上数据复制到其他服务器的机制,其中前者被称为主节点(master)。后者被称为从节点(slave)。
上面说的持久化是解决单机备份问题(内存到硬盘),主从复制主要解决数据在多机器之间的热备份,实现负载均衡和故障恢复。
主从复制的主要主要作用:
- 数据冗余:数据热备,多机备份。
- 故障恢复:当主节点出现问题时,可以让从节点提供服务,是一种功能的冗余。
- 负载均衡:可以让主节点写,从节点多,可以把压力分配到多个从节点,从而实现负载均衡。
- 高可用基石:主从复制时实现哨兵和集群的基础。
哨兵
哨兵,Redis sentinel,在主从复制的基础上实现故障恢复的自动化。其核心功能是主节点(master)的自动故障转移。
主要功能:
- 监控(Monitor):哨兵不断检查主节点和从节点是否正常工作
- 自动故障转移(Automatic failover):主节点不正常时,哨兵启动自动故障转移,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点从这个新的主节点复制数据。
- 配置提供着(Configuration provider):客户端可以通过哨兵来获取主节点地址。
- 通知(Notification):哨兵可以把故障转移结果通知给客户端。
架构:
它由两部分组成,哨兵节点和数据节点:
哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。
数据节点:主节点和从节点都是数据节点。
集群
持久化实现了单机的备份,主从解决了多机的热备份,以及读的操作的负载均衡,最终通过哨兵实现了主节点的自动故障迁移。
目前还有一个核心问题,主节点只有一个,写操作只能写到一个节点,还没有实现负载均衡,存储能力完全受限于单机的存储能力。
集群就是用来解决写操作负载均衡的问题。其核心就是数据分片。集群将数据分散到不同的集群上,解决单机存储能力受限的问题。
原文转载:http://www.shaoqun.com/a/492773.html
香港会计师事务所:https://www.ikjzd.com/w/2434
敦煌网:https://www.ikjzd.com/w/189
活动树:https://www.ikjzd.com/w/1518
阅读的博客:https://www.cnblogs.com/kismetv/category/1186633.html内存模型内存划分数据本身redis进程运行本身需要的内存缓冲区内存碎片存储细节数据模型dicEntry:每一个键值对(Key-Value)都会有一个dicEntry。Key:rediskey,以SDS的格式存储redisObject:redisvalue,以redisObject的
西集网:西集网
文化衫事件:文化衫事件
中山有什么好玩的地方?:中山有什么好玩的地方?
云南世界恐龙谷好玩吗?:云南世界恐龙谷好玩吗?
7 大招,教你全方位无死角获取关键词:7 大招,教你全方位无死角获取关键词
No comments:
Post a Comment