REDIS
zwleagle
这个作者很懒,什么都没留下…
展开
-
动态字符串(REDIS)
// sdshdr 结构struct sdshdr { // buf 已占用长度 int len; // buf 剩余可用长度 int free; // 实际保存字符串数据的地方,会分配多一个字节用于存放'\0'; char buf[];};REDIS的字符串一般保存在以sdshdr为头的结原创 2013-05-06 18:09:23 · 781 阅读 · 0 评论 -
Redis定时器
Redis有很多需要周期性执行的任务: 统计内存使用最高值,记录数据库的使用情况,对哈希表进行resize(如果哈希表的使用率小于10%时,需要对哈希表进行压缩),检查客户端连接是否超时,保存数据库到磁盘,检查key是否过期并删除,主备数据同步删除异步关闭的客户端;运行集群定时任务;运行定时监视任务;. . . 这些周期性任务是由REDIS自己来维护定时器机原创 2013-05-13 17:45:09 · 6941 阅读 · 0 评论 -
集合(REDIS_SET)
第一个添加到集合的元素, 决定了创建集合时所使用的编码:如果第一个元素可以表示为 long long 类型值(也即是,它是一个整数, 接口isObjectRepresentableAsLongLong), 那么集合的初始编码为 REDIS_ENCODING_INTSET 。否则,集合的初始编码为 REDIS_ENCODING_HT如果一个集合使用 REDIS_ENC原创 2013-05-10 19:16:38 · 1033 阅读 · 0 评论 -
redisDB内存结构
这里只将redesDB的整体结构图画出,后续详细分析各种底层的实现原创 2013-05-08 19:33:55 · 1043 阅读 · 0 评论 -
队列(REDIS_LIST)
命令: lpush mylist "world"创建新队列时 Redis 默认使用 REDIS_ENCODING_ZIPLIST 编码, 当以下任意一个条件被满足时, 队列会被转换成 REDIS_ENCODING_LINKEDLIST编码:试图往队列新添加一个字符串值,且这个字符串的长度超过 server.list_max_ziplist_value(默认值原创 2013-05-09 19:34:09 · 982 阅读 · 0 评论 -
有序集合(REDIS_ZSET)
命令command key score valuezadd myzset 1 "one"key是作为db最上层字典索引的key;保存到底层的是score和value1. 如果第一个元素符合以下条件的话, 就创建一个 REDIS_ENCODING_Z原创 2013-05-09 19:19:12 · 2600 阅读 · 0 评论 -
哈希表(REDIS_HASH)
哈希表(REDIS_HASH)默认是用ziplist(REDIS_ENCODING_ZIPLIST)对象(redisObject)来保存数据的,只有key或value的长度超过server.hash_max_ziplist_value(默认64);或者ziplist存储的对象(entry)超过了server.hash_max_ziplist_entries(默认512)时,就对这个ziplist对原创 2013-05-09 19:13:24 · 1979 阅读 · 0 评论 -
REDIS跳表(skiplist)
一个跳表,应该具有以下特征:一个跳表应该有几个层(level)组成;跳表的第一层包含所有的元素;每一层都是一个有序的链表;如果元素x出现在第i层,则所有比i小的层都包含x;跳表的插入过程如下; 蓝色线表示查找插入位置的过程,红色的都要记录在一个update[]数组中(反序的方式来记录,即从最高的level开始),即level变化时就需要记录下来,主要是为了后续插入后原创 2013-05-07 19:12:36 · 1769 阅读 · 0 评论 -
双向链表(REDIS)
REDIS的双向链表和一般的双向链表差不多,一个链表有一个链表头(list)来管理一个链表(listNode)。只是在链表头中增加了几个操作函数。链表头:typedef struct list { // 表头指针 listNode *head; // 表尾指针 listNode *tail; // 节点数量 unsig原创 2013-05-07 09:08:39 · 1004 阅读 · 0 评论 -
REDIS字典(dict)
REDIS用字典来实现键值的空间, 底层是由动态哈希来实现; 字典的结构如下面的图 在字典中有两个哈希桶来实现哈希的扩展; 在没有对哈希进行扩张和rehash的情况下, 只有ht[0]来保存数据库的键值; 在对哈希表进行扩展和rehash时,首先会将哈希桶扩大2倍,挂到ht[1]的哈希桶下面,并将rehashidx置为0(表示开始从哈希桶的第一个桶开始进行rehash),然后逐渐将ht原创 2013-05-07 09:18:03 · 928 阅读 · 0 评论 -
Redis主备同步(replication)
Redis主备同步流程图:原创 2013-05-14 18:11:25 · 1780 阅读 · 0 评论