redis
文章平均质量分 88
郭龙_Jack
这个作者很懒,什么都没留下…
展开
-
Redis-数据结构-1-简单动态字符串
数据结构1.简单动态字符串 SDS的定义每个sds.h/sdshdr结构表示一个SDS值:struct sdshdr { //记录buf数组中已使用字节的数量 //等于SDS所保存字符串的长度 int len; //记录buf数组中未使用字节的数量 int free; //字节数组,用于保存字符串 char bu转载 2017-01-18 21:41:45 · 367 阅读 · 0 评论 -
Redis-类型检查与命令多态
8.7 类型检查与命令多态Redis中用于操作键的命令基本上可以分为两种类型。其中一种命令可以对任何类型的键执行,比如说DEL命令、EXPIRE命令、RENAME命令、TYPE命令、OBJECT命令等。举个例子,以下代码就展示了使用DEL命令来删除三种不同类型的键:#字符串键redis> SET msg "hello"OK#列表键redis> RPUSH numbe转载 2017-01-22 22:05:36 · 761 阅读 · 0 评论 -
Redis-内存
8.8 内存回收因为C语言并不具备自动内存回收功能,所以Redis在自己的对象系统中构建了一个引用计数(reference counting)技术实现的内存回收机制,通过这一机制,程序可以通过跟踪对象的引用计数信息,在适当的时候自动释放对象并进行内存回收。每个对象的引用计数信息由redisObject结构的refcount属性记录:typedef struct redisObject转载 2017-01-22 22:16:30 · 289 阅读 · 0 评论 -
Redis- 对象的空转时长(总结)
8.10 对象的空转时长除了前面介绍过的type、encoding、ptr和refcount四个属性之外,redisObject结构包含的最后一个属性为lru属性,该属性记录了对象最后一次被命令程序访问的时间:typedef struct redisObject { // ... unsigned lru:22; // ...} robj;OBJECT转载 2017-01-22 22:19:20 · 1487 阅读 · 0 评论 -
Redis-第9章-数据库
第9章 数据库本章将对Redis服务器的数据库实现进行详细介绍,说明服务器保存数据库的方法,客户端切换数据库的方法,数据库保存键值对的方法,以及针对数据库的添加、删除、查看、更新操作的实现方法等。除此之外,本章还会说明服务器保存键的过期时间的方法,以及服务器自动删除过期键的方法。最后,本章还会说明Redis 2.8新引入的数据库通知功能的实现方法。9.1 服务器中的数据库Redis服务转载 2017-01-22 23:00:31 · 373 阅读 · 0 评论 -
Redis-数据库-9.7 AOF-RDB和复制功能对过期键的处理
9.7 AOF、RDB和复制功能对过期键的处理在这一节,我们将探讨过期键对Redis服务器中其他模块的影响,看看RDB持久化功能、AOF持久化功能以及复制功能是如何处理数据库中的过期键的。9.7.1 生成RDB文件在执行SAVE命令或者BGSAVE命令创建一个新的RDB文件时,程序会对数据库中的键进行检查,已过期的键不会被保存到新创建的RDB文件中。举个例子,如果数据库中包含三个键转载 2017-01-22 23:09:34 · 822 阅读 · 0 评论 -
Redis-9.8 数据库通知
9.8 数据库通知数据库通知是Redis 2.8版本新增加的功能,这个功能可以让客户端通过订阅给定的频道或者模式,来获知数据库中键的变化,以及数据库中命令的执行情况。举个例子,以下代码展示了客户端如何获取0号数据库中针对message键执行的所有命令:127.0.0.1:6379> SUBSCRIBE _ _keyspace@0_ _:messageReading messages转载 2017-01-22 23:15:59 · 623 阅读 · 0 评论 -
Redis-第10章 RDB持久化
第10章 RDB持久化Redis是一个键值对数据库服务器,服务器中通常包含着任意个非空数据库,而每个非空数据库中又可以包含任意个键值对,为了方便起见,我们将服务器中的非空数据库以及它们的键值对统称为数据库状态。举个例子,图10-1展示了一个包含三个非空数据库的Redis服务器,这三个数据库以及数据库中的键值对就是该服务器的数据库状态。图10-1 数据库状态示例因为Redis是内转载 2017-01-23 00:11:20 · 1693 阅读 · 1 评论 -
每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)
http://blog.csdn.net/cywosp/article/details/23397179/转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十转载 2017-03-02 22:32:50 · 228 阅读 · 0 评论 -
Redis对象-5-有序集合对象
8.6 有序集合对象有序集合的编码可以是ziplist或者skiplist。ziplist编码的压缩列表对象使用压缩列表作为底层实现,每个集合元素使用两个紧挨在一起的压缩列表节点来保存,第一个节点保存元素的成员(member),而第二个元素则保存元素的分值(score)。压缩列表内的集合元素按分值从小到大进行排序,分值较小的元素被放置在靠近表头的方向,而分值较大的元素则被放置在靠近表尾转载 2017-01-21 23:30:19 · 1372 阅读 · 0 评论 -
Redis对象-4-集合对象
8.5 集合对象集合对象的编码可以是intset或者hashtable。intset编码的集合对象使用整数集合作为底层实现,集合对象包含的所有元素都被保存在整数集合里面。举个例子,以下代码将创建一个如图8-12所示的intset编码集合对象:redis> SADD numbers 1 3 5(integer) 3另一方面,hashtable编码的集合对象使用字典作为底层实现转载 2017-01-21 23:18:21 · 723 阅读 · 0 评论 -
Redis-数据结构-2-链表
链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度。作为一种常用数据结构,链表内置在很多高级的编程语言里面,因为Redis使用的C语言并没有内置这种数据结构,所以Redis构建了自己的链表实现。链表在Redis中的应用非常广泛,比如列表键的底层实现之一就是链表。当一个列表键包含了数量比较多的元素,又或者列表中包含的元素都是比较长的字符串时,R转载 2017-01-18 21:59:09 · 290 阅读 · 0 评论 -
Redis-数据结构-3-字典
字典,又称为符号表(symbol table)、关联数组(associative array)或映射(map),是一种用于保存键值对(key-value pair)的抽象数据结构。在字典中,一个键(key)可以和一个值(value)进行关联(或者说将键映射为值),这些关联的键和值就称为键值对。字典中的每个键都是独一无二的,程序可以在字典中根据键查找与之关联的值,或者通过键来更新值,又或者根转载 2017-01-18 22:38:28 · 312 阅读 · 0 评论 -
Redis-数据结构-4-跳跃表
跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。跳跃表支持平均O(logN)、最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点。在大部分情况下,跳跃表的效率可以和平衡树相媲美,并且因为跳跃表的实现比平衡树要来得更为简单,所以有不少程序都使用跳跃表来代替平衡树。Redis使用跳跃表作为有序集合键的底层转载 2017-01-18 22:59:39 · 340 阅读 · 0 评论 -
Redis-数据结构-5-整数集合
整数集合(intset)是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现。举个例子,如果我们创建一个只包含五个元素的集合键,并且集合中的所有元素都是整数值,那么这个集合键的底层实现就会是整数集合:redis> SADD numbers 1 3 5 7 9(integer) 5redis> OBJECT转载 2017-01-18 23:22:29 · 298 阅读 · 0 评论 -
Redis-数据结构-6-压缩列表
压缩列表(ziplist)是列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,那么Redis就会使用压缩列表来做列表键的底层实现。例如,执行以下命令将创建一个压缩列表实现的列表键:redis> RPUSH lst 1 3 5 10086 "hello" "world"(integer)6redis> OBJECT转载 2017-01-18 23:52:49 · 474 阅读 · 0 评论 -
Redis对象-1-字符串对象
8.2 字符串对象字符串对象的编码可以是int、raw或者embstr。如果一个字符串对象保存的是整数值,并且这个整数值可以用long类型来表示,那么字符串对象会将整数值保存在字符串对象结构的ptr属性里面(将void*转换成long),并将字符串对象的编码设置为int。图8-1 int编码的字符串对象举个例子,如果我们执行以下SET命令,那么服务器将创建一个如图8-1所示的i转载 2017-01-21 22:33:21 · 528 阅读 · 0 评论 -
Redis对象-3-列表对象
要点总结:当哈希对象可以同时满足以下两个条件时,哈希对象使用ziplist编码:❑哈希对象保存的所有键值对的键和值的字符串长度都小于64字节;❑哈希对象保存的键值对数量小于512个;不能满足这两个条件的哈希对象需要使用hashtable编码。这两个条件的上限值是可以修改的,具体请看配置文件中关于hash-max-ziplist-value选项和hash-max-ziplist-转载 2017-01-21 23:09:04 · 1003 阅读 · 0 评论 -
Redis对象-2-列表对象
要点总结:当列表对象可以同时满足以下两个条件时,列表对象使用ziplist编码:❑列表对象保存的所有字符串元素的长度都小于64字节;❑列表对象保存的元素数量小于512个;不能满足这两个条件的列表对象需要使用linkedlist编码。注意以上两个条件的上限值是可以修改的,具体请看配置文件中关于list-max-ziplist-value选项和list-max-ziplist-en转载 2017-01-21 22:54:08 · 294 阅读 · 0 评论 -
近千节点的Redis Cluster高可用集群案例:优酷蓝鲸优化实战
转载 2017-03-24 09:07:32 · 529 阅读 · 0 评论