
redis
文章平均质量分 55
不要回头看
好好码代码 好好写博客 该是你的总会来 不该是你的终不会来
展开
-
7.对象
我们知道redis所有的主要数据结构:比如简单动态字符串、双端链表、字典、压缩列表、整数集合、 跳表。Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象,列表对象、哈希对象、集合对象、有序集合对象。对象的类型及编码 Redis中的每个对象都是由一个redisObject结构表示typedef struct redisObject{ //类型 unsigned type:4; //编码 u原创 2021-01-13 11:10:36 · 183 阅读 · 0 评论 -
6.跳跃表
跳跃表是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。 跳跃表支持平均O(logN)、最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点。跳跃表的实现 Redis的跳跃表由redis.h/zskiplistNode和redis.h/zskiplist两个结构定义,其中zskiplistNode结构用于表示跳跃表节点,而zskiplist结构则用于保存跳跃表节点的相关信息,比如节点的数量,以及指向表头节点和表尾节点的指针等等。zski原创 2021-01-09 11:27:28 · 214 阅读 · 0 评论 -
压缩列表
压缩列表(ziplist)是列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,那么redis就会使用压缩列表来做列表键的底层实现。压缩列表的构成 压缩列表是Redis为了节约内存而开发的,由一系列特殊编码的连续内存组成的顺序型数据结构。zlbyteszltailzllenentry1entry2…entryNzlendzlbyteszltailzllenentry1zlby原创 2021-01-09 11:18:56 · 526 阅读 · 0 评论 -
简单动态字符串SDS
Redis没有直接使用C语言传统的字符串表示(以空字符串结尾的字符数组,以下简称C字符串),而是构建了一种名为简单动态字符串的抽象类型,并将SDS用作redis的默认字符串表示。在redis里面,C字符串只会用在一些无需修改的地方,比如打印日志。SDS的定义 每个sds.h/sdshdr结构表示一个SDS值:struct sdshdr{ //记录buf数组中已使用字节的数量,等于sds所保存字符串的数量 int len; //记录buf数组中未使用字节的数量 in原创 2021-01-09 10:39:36 · 173 阅读 · 0 评论 -
字典
字典中的每个键都是独一无二的。结构typedef struct dictht{ dictEntry **table; unsigned long size; unsigned long sizemask = size -1; // 该hash表已有的节点数量 unsigned long used;} dictht;typedef struct dictEntry{ void *key; union{原创 2021-01-09 09:59:19 · 123 阅读 · 0 评论 -
redis-cluster部署及数据迁移
工作原理节选自redis官方文档:http://www.redis.cn/topics/cluster-tutorial.htmlRedis集群介绍Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.Redis ...转载 2018-09-14 17:40:26 · 733 阅读 · 0 评论 -
Redis RDB方式数据备份与恢复
Redis数据备份实例127.0.0.1:6379> bgsaveOK这里为什么用bgsave而不使用save,请参考文章:redis 持久化详解,RDB是什么?Redis恢复数据1、 获取redis备份目录127.0.0.1:6379> CONFIG GET dir1) "dir"2) "D:\\software\\Redis"127.0.0...转载 2018-09-14 17:19:33 · 667 阅读 · 0 评论 -
WARNING: redis-trib.rb is not longer available!
WARNING: redis-trib.rb is not longer available!今天自己安装redis windows下集群的时候 没有注意redis-trib.rb脚本的内容,因为是从官网直接保存的,使用时报上面的警告,原因是因为redis5.0使用redis-cli作为创建集群的命令,使用c语言实现,不再使用ruby语言。...原创 2018-07-15 17:57:53 · 11249 阅读 · 9 评论 -
在windows上搭建redis集群(redis-cluster)
一 所需软件:Redis、Ruby语言运行环境、Redis的Ruby驱动redis-xxxx.gem、创建Redis集群的工具redis-trib.rb二 安装配置redis redis下载地址 https://github.com/MSOpenTech/redis/releases ; 下载Redis-x64-3.2.100.zip。集群规划有三个节点的集群,每个节点有一主一备。需要6台虚...转载 2018-07-15 17:52:29 · 3111 阅读 · 1 评论 -
redis持久化消息队列的简单实现
Redis 的列表经常被用作队列 (queue),用于在不同程序之间有序地交换消息 (message)。一个客户端通过LPUSH 命令将消息放入队列中,而另一个客户端通过RPOP 或者BRPOP 命令取出队列中等待时间最长的消息。不幸的是,上面的队列方法是『不安全』的,因为在这个过程中,一个客户端可能在取出一个消息之后崩溃,而未处理完的消息也就因此丢失。使用RPOPLPUSH 命令 (或者它的阻塞...原创 2018-07-08 17:02:56 · 3218 阅读 · 4 评论 -
redis RPOPLPUSH 命令详解
RPOPLPUSH source destination命令RPOPLPUSH 在一个原子时间内,执行以下两个动作:• 将列表 source 中的最后一个元素 (尾元素) 弹出,并返回给客户端。• 将 source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素。举个例子,你有两个列表 source 和 destination ,source 列表有元...原创 2018-07-08 16:37:02 · 1581 阅读 · 0 评论 -
redis blpop与multi/exec命令配合使用的问题
blpop可以用于流水线 (pipline, 批量地发送多个命令并读入多个回复),但把它用在MULTI / EXEC块当中没有意义。因为这要求整个服务器被阻塞以保证块执行时的原子性,该行为阻止了其他客户端执行LPUSH 或RPUSH 命令。因此,一个被包裹在MULTI / EXEC 块内的BLPOP 命令,行为表现得就像LPOP 一样,对空列表返回nil ,对非空列表弹出列表元素,不进行任何阻塞操...原创 2018-07-08 15:59:42 · 731 阅读 · 0 评论