redis知识图谱总结

Posted go大鸡腿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis知识图谱总结相关的知识,希望对你有一定的参考价值。

前言

面试

在面很多高级岗位的时候,面试官会时不时来句redis底层数据结构,以及各种扩展,例如:

再如我面过很多大厂也会问我rehash,我当时???好吧,尽量完善自己的知识图谱

redis数据结构

本博客主要是观看《redis设计与实现》,然后进行个人的学习总结~

sds

simple dynamic string
它是字符串实现数据结构,特点:会保存使用字节的数量,以及未使用的字节的数量
好处:不会内存溢出,比如说缓冲区,既然我已经有了这个数值,你如果比我空闲的数量大,我需求进行扩容。数据个数,也不需要进行遍历,直接从属性里头拿就完事了。

扩展的过程

  1. 小于1M的时候会翻倍
  2. 大于1M的时候会扩展1M

好处是可以节约内存空间

字典

dic

如果遇到hash冲突也会变成链表,解决冲突

rehash

主要发生在扩容跟缩容情况下,它需要对之前的字典进行相应的扩展跟缩减,导致当前服务不可用,如果说字典很大的时候,会在复制的时候导致卡顿,所以有了rehash优化。
具体就是在复制阶段,会有ht[0],ht[1],有两张hash表,它会重新计算值在新表的位置,然后记录迁移的剩余数量。
查询的时候,会先去旧表,没有再去新表查询。插入直接往新表插,删除两张表都删除,这样做到同步。

跳表

skiplist
多层索引的列表,每个值1-32层,层数越高搜索越快。
然后它每个节点会记录,头尾节点,这样的话方便进行前进跟后退的遍历。

搜索过程:比如说从header开始,往最高层走,大于这个数,继续前进,小于的话就后退

跳表跟红黑树比较

实现会更简单,插入等等不需要说树的左右节点进行平衡

插入相同值


如果插入相同的值,它会根据节点对象进行排序

压缩列表

它会根据前一个节点的占用内存大小,来保存这个长度

连锁更新


在表头,中间插入新的节点,如果刚好需要在5个节点的长度的时候,后面那个节点也得扩容,一直传递下去。

redis持久化

RDB

全量保存redis命令,

命令
SAVE会阻塞服务,然后进行生成rdb文件
BGSAVE会fork子线程进行复制内存,生成rdb文件

big-key的问题

redis是单线程,会造成阻塞。其次是大key的话,在fork子线程复制的时候也会造成线程阻塞。

AOF

增量模式保存,也就是会缓存一些写的命令,然后到aof文件

复制

命令
sync会要求主服务进行传输rdb文件,还有写命令缓存区进行同步,如果断联之后会重新生成rdb文件
psync如果非首次同步,断联之后只是将丢失的写命令回传

redis 为啥很快

  1. 单线程,避免上下文切换
  2. 多路复用,linux epoll,在内核态跟用户态之间有一层映射mmap,然后有一个链表,如果有返回值往里面塞入

redis 高可用

  1. sentinel 客观、主观下线,raft选举,同步
  2. 集群,1W槽,根据hash算法去划分数据区域,方便扩展

以上是关于redis知识图谱总结的主要内容,如果未能解决你的问题,请参考以下文章

电网知识图谱项目总结从局部文档RDF到全局知识图谱构建

电网知识图谱项目总结从局部文档RDF到全局知识图谱构建

电网知识图谱项目总结从局部文档RDF到全局知识图谱构建

知识图谱抽取总结

知识图谱开发实战:搭建上市公司知识图谱

知识图谱知识图谱入门详细介绍