星座分析>星座分析>农历

redis工作原理 redis工作原理详解

分类:农历发布者:现在流行

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于redis工作原理 redis工作原理详解的文章,本文对文章redis工作原理 redis工作原理详解好好的分析和解答,希望你能喜欢,只有你喜欢的内容存在,只有你来光临,我们才能继续前行。GNK星座分析

redis是怎么实现的

第一:Redis 是什么?GNK星座分析

Redis是基于内存、可持久化的日志型、Key-Value数据库 高性能存储系统,并提供多种语言的API.GNK星座分析

第二:出现背景GNK星座分析

Redis的五种数据结构及其底层实现原理

redis的字符串类型是由一种叫做简单动态字符串(SDS)的数据类型来实现GNK星座分析

SDC和C语言字符串的区别:GNK星座分析

1:SDS保存了字符串的长度,而C语言不保存,只能遍历找到第一个\0的结束符才能确定字符串的长度GNK星座分析

2:修改SDS,会检查空间是否足够,不足会先扩展空间,防止缓冲区溢出,C字符串不会检查GNK星座分析

3:SDS的预分配空间机制,可以减少为字符串重新分配空间的次数GNK星座分析

备注:重新分配空间方式,小于1M的数据 翻倍+1,例如:13K+13K+1,如果大于1M,每次多分配1M,例如:10M+1M+1,如果字符串变短,并不会立即缩短,而是采用惰性空间释放,有专门的API可以释放多余空间GNK星座分析

hash结构里其实是一个字典,有许多的键值对GNK星座分析

redis的哈希表是一个dictht结构体:GNK星座分析

hash算法:GNK星座分析

当要将一个新的键值对添加到字典里面时, 程序需要先根据键值对的键计算出哈希值和索引值, 然后再根据索引值, 将包含新键值对的哈希表节点放到哈希表数组的指定索引上面。GNK星座分析

hash冲突解决方式:链表法,后入的放到最前面GNK星座分析

rehash:GNK星座分析

键值数据量变动时,时为了让哈希表的负载因子(load factor)维持在一个合理的范围之内, 当哈希表保存的键值对数量太多或者太少时, 程序需要对哈希表的大小进行相应的扩展或者收缩。GNK星座分析

如果是扩充,新数组的空间大小为 大于2*used的2的n次方,比如:used=5,则去大于10的第一个2的n次方,为16GNK星座分析

如果是缩小,新数组的空间大小为第一个不大于used的2的n次方,比如:used=5,则新大小为4GNK星座分析

redis的list列表是使用双向链表来实现的GNK星座分析

···GNK星座分析

typedef struct listNode {GNK星座分析

struct listNode * pre; //前置节点GNK星座分析

struct listNode * next; //后置节点GNK星座分析

void * value; //节点的值GNK星座分析

}GNK星座分析

typedef struct list {GNK星座分析

listNode *head; //表头节点GNK星座分析

listNodetail; //表尾节点GNK星座分析

unsigned long len; //链表所包含的节点数量GNK星座分析

void (dup) (voidptr); //节点值赋值函数 这里有问题GNK星座分析

void (free) (voidptr); //节点值释放函数GNK星座分析

int (match) (void *ptr, void *key) //节点值对比函数GNK星座分析

}GNK星座分析

···GNK星座分析

1:有序集合的底层实现之一是跳表, 除此之外跳表它在 Redis 中没有其他应用。GNK星座分析

2:整数集合(intset)是集合键的底层实现之一: 当一个集合只包含整数值元素, 并且这个集合的元素数量不多时, Redis 就会使用整数集合作为集合键的底层实现。GNK星座分析

3:数据少是,使用ziplist(压缩列表),占用连续内存,每项元素都是(数据+score)的方式连续存储,按照score从小到大排序。ziplist为了节省内存,每个元素占用的空间可以不同,对于大数据(long long),就多用一些字节存储,而对于小的数据(short),就少用一些字节来存储。因此查找的时候需要按顺序遍历。ziplist省内存但是查找效率低。GNK星座分析

无序集合可以用整数集合(intset)或者字典实现GNK星座分析

Redis的5.0版本中,放出一个新的数据结构Stream。其实也是一个队列,没一个不同的key对应的是不同的队列,没个队列的元素,也就是消息,都有一个msgid,并且需要保证msgid是严格递增的。在Stream当中,消息是默认持久化的,即便是Redis重启,也能够读取到信息。GNK星座分析

Stream的多播,与其它队列系统相似,对不同的消费者,也有消费者Group这样的概念,不同的消费组,可以消费通一个消息,对于不同的消费组,都维护一个Idx下标,表示这一个消费群组费到了哪里,每次进行消费,都会更新一下这个下标,往后面一位进行偏移。GNK星座分析

跳跃表是一种有序数据结构,它通过在每个节点中维持多个指向其它节点的指针,从而大道快速访问节点的目的,具有以下性质:GNK星座分析

1:有很多层结构组成GNK星座分析

2:每一层都是一个有序的链表,排列顺序为由高到低,都至少包含两个链表节点,分别是前面的head节点和后面的nil节点GNK星座分析

3:最底层的链表包含了所有的元素GNK星座分析

4:如果一个元素出现在某一层的链表中,那么在该层之下的链表也全部都会出现GNK星座分析

5:链表中的每个节点都包含两个指针,一个指向同一层的下一个链表节点,另一个指向下一层的通一个链表节点GNK星座分析

多个跳跃表节点构成一个跳跃表GNK星座分析

1:搜索,从最高层的链表节点开始,如果比当前节点要大和比当前层的下一个节点要小,那么则往下找,也及时和当前层的下一层的节点下一个节点GNK星座分析

2:插入,首先确定插入的层数,有一种方法是抛一个硬币,如果是正面就累加,直到遇到反面为止,最后记录正面的次数作为插入的层数,当确定插入的层数K后,则需要将新元素插入从底层到K层GNK星座分析

3:删除,在各个层中找到包含指定值得节点,然后将节点从链表中删除即可,如果删除以后只剩下头尾两个节点,则删除这一层。GNK星座分析

整数集合是Redis用于保存整数值集合的抽象数据类型,它可以保存int16_t、int32_t、int64_t的整数值,并且保证集合中不会出现重复元素。GNK星座分析

整数集合的每个元素都是contents数组的一个数据项,他们按照从小到大的顺序排列,并且不包含任何重复项。GNK星座分析

length属性记录了contents数组的大小。GNK星座分析

需要注意的是虽然contents数组声明为int8_t类型,但是实际上contents数组并不保存任何int8_t类型的值,其真正类型由encoding来决定。GNK星座分析

压缩列表(ziplist)是Redis为了节省内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构,一个压缩列表可以包含任意多个节点(entry),每个节点可以保存一个字节数组或一个整数值。GNK星座分析

压缩列表的原理:压缩列表并不是对数据利用某种算法进行压缩的,而是将数据按照一定规则编码在一块连续的内存区域,目的是节省内存。GNK星座分析

redis缓存原理

redis缓存原理是sql语句时key值,查询结果resultSet是value,当同一个查询语句访问时(select * from t_product),只要曾经查询过,调用缓存直接返回resultSet,节省了数据库读取磁盘数据的时间。GNK星座分析

redis的存储分为内存存储、磁盘存储和log文件三部分,配置文件中有三个参数对其进行配置。GNK星座分析

save seconds updates,save配置,指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。这个可以多个条件配合,比如默认配置文件中的设置,就设置了三个条件。GNK星座分析

appendonly yes/no ,appendonly配置,指出是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面的save条件来同步的,所以有的数据会在一段时间内只存在于内存中。GNK星座分析

扩展资料GNK星座分析

redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。GNK星座分析

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。GNK星座分析

存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。GNK星座分析

redis的官网地址,redis.io。(域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地)GNK星座分析

以上内容是小编精心整理的关于redis工作原理 redis工作原理详解的精彩内容,好的文章需要你的分享,喜欢redis工作原理 redis工作原理详解这篇精彩文章的,请您经常光顾吧!GNK星座分析

上一篇:办公室文员一般做什么工作 文员一般做什么工作?

下一篇:更多农历

农历相关文章
更多农历文章

精选农历

农历热点