Redis核心数据结构和实现
2017-02-16 00:00
204 查看
数据结构和对象
不同对象及使用的数据结构名称 | Type | 编码 | 使用的数据结构 |
---|---|---|---|
字符串 | string | REDIS_STRING | int/embstr/raw |
列表 | list | REDIS_LIST | ziplist/linkedlist |
哈希 | hash | REDIS_HASH | ziplist/hashtable |
集合 | set | REDIS_SET | intset/hashtable |
有序集合 | zset | REDIS_ZSET | ziplist/skiplist |
名称 | object encoding | 编码 | 作用 |
---|---|---|---|
整数 | int | REDIS_ENCODING_INT | |
embstr编码简单动态字符串SDS | embstr | REDIS_ENCODING_EMBSTR | 专门处理短字符串(<=39字节) |
简单动态字符串 | raw | REDIS_ENCODING_RAW | |
字典 | hashtable | REDIS_ENCODING_HT | |
双端链表 | linkedlist | REDIS_ENCODING_LINKEDLIST | |
压缩列表 | ziplist | REDIS_ENCODING_ZIPLIST | |
整数集合 | intset | REDIS_ENCODING_INTSET | |
跳跃表和字典 | skiplist | REDIS_ENCODING_SKIPLIST |
数据库存储结构
Redis的三级索引结构graph TD A[数据库db] --> B(数据库键空间dict) B --> C{键空间的值} C --> D[ListObject] C --> E[HashObject] C --> F[StringObject]
键空间的维护
增(SET)/删(DEL)/改()/查(GET)/设置过期时间(EXPIRE)
过期键采用“定期删除 + 惰性删除”策略
RDB文件不包含过期键
AOF文件显示追加一条DEL命令
主从模式,从服务器只有等主服务器发送DEL命令,才会删除自己的过期键,保证一致性
数据持久化
RDB其实就是内存快照,一个经过压缩的二进制文件,可以通过SAVE或者BGSAVE命令来创建,SAVE是阻塞命令,BGSAVE是非阻塞命令
AOF(Append Only File)
其实就是日志记录,通过持久化执行的命令来记录数据库状态。分为:命令追加、文件写入、文件同步三步完成。
事件
Redis服务器是事件驱动的,分为时间事件和文件事件时间事件分为周期性事件和定时事件
文件事件是对socket操作的抽象:socket状态变化,产生相应的事件
主从
SLAVEOF命令,设置主从服务器关系2.8之前通过sync实现复制,2.8之后,通过psync实现复制
psync的复制通过<偏移量、缓冲区、运行ID>来实现部分重新同步
主服务器向从服务器传播命令来更新从服务器状态,保持主从一致
从服务器向主服务器心跳检测,防止丢失命令
哨兵
Sentinel是运行在特殊状态下的Redis服务器,每10s一次检测主服务器是否存活判断主服务器下线后,选举从服务器作为新的主服务器
选举方法:Raft
集群
查看集群状态:> CLUSTER NODES > CLUSTER INFO
添加集群节点:
> CLUSTER MEET <ip> <port>
查看key所在的slot,一共16384个slot
> CLUSTER KEYSLOT <key>
设置从节点
> CLUSTER REPLICATE <node_id>
其他
发布订阅PUBLISH,SUBSCRIBE,PSUBSCRIBE,UNSUBSCRIBE,PUNSUBSCRIBE
事务
MULTI, EXEC, WATCH redis 事务不支持回滚
慢查询日志
> SLOWLOG GET
成为Monitor,监视所有的操作命令
> MONITOR
相关文章推荐
- redis 源代码之数据结构(4)--zipmap实现
- redis 源代码之数据结构(2)--sds实现
- Redis代码分析之核心数据结构
- 【原创】Redis内核之数据结构实现
- redis 源代码之数据结构(1)--链表的实现
- redis集群实现(七)sentinel数据结构和初始
- redis 源代码之数据结构(sds,链表的实现)
- Redis 一、数据结构与对象--五大数据类型的底层结构实现
- redis 源代码之数据结构(5)--ziplist实现
- 转载和积累系列 - Redis内核之数据结构实现
- 我知道点redis-数据结构与对象(对象)-对象实现
- redis 源代码之数据结构(3)--hash表实现
- 解读Redis dict核心数据结构
- redis 源码学习(核心数据结构剖析)
- Redis设计与实现 --- 数据结构
- redis集群实现(七)sentinel数据结构和初始
- Redis 设计与实现 (一)--数据结构
- Redis设计与实现——数据结构(二)
- Redis 链表的数据结构
- 使用PLSQL Developer来实现不同数据库的表结构以及表数据同步