redis工作原理 redis工作原理详解_农历_星座分析

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

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

时间:2024-06-03 10:48:38 作者:现在流行

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

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

redis是怎么实现的

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

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

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

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

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

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

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

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

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

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

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

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

hash算法:Bea星座分析

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

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

rehash:Bea星座分析

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

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

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

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

···Bea星座分析

typedef struct listNode {Bea星座分析

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

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

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

}Bea星座分析

typedef struct list {Bea星座分析

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

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

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

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

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

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

}Bea星座分析

···Bea星座分析

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

redis缓存原理

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

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

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

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

扩展资料Bea星座分析

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

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

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

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

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

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

下一篇:更多农历

本文标题:redis工作原理 redis工作原理详解

本文链接:http://m.xzfx123.com/article/119911.html

使劲推荐

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

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于redis工作原理 redis工作原理...

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

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于办公室文员一般做什么工作 文...

清明节立体手工作品图片大全 立体手工作品图片大全 简单
清明节立体手工作品图片大全 立体手工作品图片大全 简单

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于清明节立体手工作品图片大全 ...

儿童节亲子做香包图片大全集 亲子香包制作流程
儿童节亲子做香包图片大全集 亲子香包制作流程

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于儿童节亲子做香包图片大全集 ...

尊重自己的工作岗位 尊重自己的工作读后感
尊重自己的工作岗位 尊重自己的工作读后感

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于尊重自己的工作岗位 尊重自己...

发表评论

相关推荐

审单员工作内容难吗 审单员工作内容是什么
审单员工作内容难吗 审单员工作内容是什么

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于审单员工作内容难吗 审单员工...

真空干燥箱工作原理图 真空干燥箱工作原理是什么
真空干燥箱工作原理图 真空干燥箱工作原理是什么

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于真空干燥箱工作原理图 真空干...

工作心得体会100字 工作心得体会100字左右怎么写
工作心得体会100字 工作心得体会100字左右怎么写

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于工作心得体会100字 工作心得体...

后备干部个人工作总结共4篇 后备干部个人工作总结三个月怎么写
后备干部个人工作总结共4篇 后备干部个人工作总结三个月怎么写

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于后备干部个人工作总结共4篇 后...

城市工作部 城市工作要顺应
城市工作部 城市工作要顺应

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于城市工作部 城市工作要顺应的...

精选农历标签