Redis
SW_LCC
这个作者很懒,什么都没留下…
展开
-
Redis数据结构之跳跃表
跳跃表在每个节点中维持多个指向其他节点的指针,可快速访问节点且有序 跳跃表查找复杂度为平均O(logN),最坏O(N) 跳跃表使用于有序集合元素数量比较多或者元素是比较长的字符串的场景。 跳跃表节点 typedef struct zskiplistNode{ //层 struct zskiplistNode{ //前进指针 ...原创 2020-04-07 23:39:59 · 301 阅读 · 0 评论 -
Redis哈希键冲突问题
哈希算法 在Redis的字典中,当要将一个新的键值对添加字典时,需将键值对的键计算出哈希值和索引,由得出的哈希值决定放在哈希表数组的哪个索引上。 哈希冲突 当两个或以上数量的键被分到哈希表数组同一个位置时,键就发生冲突。 解决哈希冲突 Redis哈希表采用链地址法解决键冲突,每个哈希表的节点会有next指针,被分到同一个位置的键值对节点就会使用单链表连接起来。 如图: rehash 哈希表保存的...原创 2020-04-05 17:45:45 · 2120 阅读 · 0 评论 -
Redis数据结构之字典
字典是用于保存键值对的抽象数据结构,对数据库的增删改查都是构建在对字典的操作上。字典是哈希键的底层实现值一,当一个哈希键包含的键值对较多或键值对中的元素是比较长的字符串时,Redis就使用字典作为哈希键,哈希表是字典的底层实现。 哈希表 typedef struct dictht{ //哈希表数组 dicEntry **table; //哈...原创 2020-04-05 09:03:49 · 182 阅读 · 0 评论 -
Redis数据结构之链表
链表提供高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点调整链表的长度。 在Redis中,当一个列表键包含数量比较多的元素或元素都是比较长的字符串时,Redis就会使用链表作为列表键的底层实现。 链表和链表节点的实现 链表节点: typedef struct listNode{ //前置节点 struct listNode * prev; ...原创 2020-04-04 21:32:00 · 196 阅读 · 0 评论 -
Redis数据结构之SDS
Redis里使用SDS来表示字符串值,用于可变的字符串值。而C字符串用于无须改变的字符串。 例如: Redis>set msg "hello" Redis会在数据库中创建一个新的键值对,其中键 "msg"为SDS,而值为"hello"的SDS。 除了用于保存字符串值,SDS还会被用作缓冲区: AOF模块中的AOF缓冲区 客户端输入状态中的输入缓冲区 SDS的定义 struct sd...原创 2020-04-04 20:54:48 · 346 阅读 · 0 评论 -
Redis Sentinel知识
Sentinel Redis服务器被一到多个Sentinel示例监视,sentinel维持Redis的高可用。 1.sentinel启动 redis-server /redisPath/sentinel.conf --sentinel 或redis-sentinel /redisPath/sentinel.conf sentinel启动步骤包括如下: 1.初始化服务器 2.初始化sentinel...原创 2019-12-07 22:21:17 · 103 阅读 · 0 评论 -
Redis复制
Redis复制 Redis中,用户通过SLAVEOF命令可复制服务器,被复制的服务器为master。 复制的服务器双方数据一致。 旧Redis的实现 旧版本的Redis复制实现分为同步和命令传播。 同步用于把从服务器数据状态更新为主服务器所处的 ...原创 2019-12-07 19:18:37 · 104 阅读 · 0 评论 -
Redis 键属性介绍
Redis数据库介绍 没个Redis客户端都有自己的目标数据库,当客户端执行数据库命令时,目标数据库就是操作对象。 数据库切换 使用select可切换数据库 select 2 切换到2号数据库 键空间 Redis时一个 K-V数据库服务器,每个数据库都有redis.h/redisDb表示,其中redisDb结构里面包含的 dict字典保存了数据库中所有的键值对,即键空间。 键空间的键为字符串对象...原创 2019-11-28 00:34:56 · 478 阅读 · 0 评论 -
Redis对象特点
对象命令 Redis中操作命令分为两种,一种可以命令可以对任何类型的键执行。 如: DEL,RENAME,TYPE,OBJECT。 一种只对特定键执行: SET,GET,APPEND,STRLEN只能堆字符串命令键执行。 HDEL,HSET,HGET,HLEN只能哈希键执行。 RPUSH,LPOP,LINSERT,LLEN只能对列表键执行。 SADD,SPOP,SINTER,SCARD只能对集合键...原创 2019-11-27 11:54:24 · 163 阅读 · 0 评论 -
Redis 哈希对象和集合对象
哈希对象 哈希对象编码实现为ziplist或hashtable ziplist ziplist作为哈希对象底层实现时,当有新兼职加入哈希对象,则会保存键的列表节点放到表尾,再兑入值得列表节点。 即保存同一键值对节点总是相邻,保存键的节点在前,保存值的节点在后。 先添加到哈希对象中的键值对会放在列表表尾。 使用ziplist编码的哈希对象,属性如下: hashtable 使用hashtable编码...原创 2019-11-27 00:22:09 · 885 阅读 · 0 评论 -
Redis 整数集合
整数集合时集合键的底层实现之一,适用于只包含整数值,且数量不多的使用场景。 可用于保存int16_t,int32_t,int64_t的整数值。 整数集合升级 整数集合在存储数值时,如果新的元素长度比久的大,那需要升级。 步骤如下: 根据新元素的类型,扩展整数集合底层数组空间大小,为新元素分配空间。 将底层数组现有元素转成跟新元素相同的类型,并按照有序的顺序防止 新元素添加到底层数组 该操作时间...原创 2019-11-25 23:52:45 · 131 阅读 · 0 评论