• Redis底层数据结构总结--视频总结


    Redis 底层是双向链表
    值在键在 值光键亡
    list的数据结果是是quicklist
    元素较少的情况下 会使用一块连续的内存存储,这个结构是ziplist
    也就是压缩链表 它讲所有的元素紧挨着一起存储 分配的是一块连续的内存
    当数据量比较多的时候才改成quicklist 因为普通的链表需要的附加指针空间太大,会比较浪费空间,比如这个
    列表里存的只是int类型的数据,结构上还需要两个额外的指针prev和next
    多个压缩链表相互指向,也就是双向指针。
    Redis讲链表和ziplist结合起来组成了


    set的数据结构是dict字典,Redis的set结构也是一样,它的内部也使用hash结构,所有的value都指向
    同一个内部值。无序集合它底层其实是一个value为null的hash表所以添加,删除,查找的复杂度都是o(1)


    Redis中的hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
    hash类型对应的数据结构是两种“ziplist(压缩列表),hashtable(哈希表)。
    当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable


    Redis有序集合zset,是一个没有重复元素的集合。有序不重复。每个成员都关联了一个评分,
    这个评分被用来按照从最低分到最高分的排序集合中的成员。集合的成员是唯一的,
    但是评分可以是重复的。因为元素是有序的,所以你也可以很快根据评分或者是次序
    来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合
    作为一个没有重复成员的智能列表。
    zset底层使用两个数据结构:
    ①:hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过
    元素value找到相应的score值。
    ②:跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。

    Redis事务不能回滚,提交前检查指令的语法,如果语法正确才会提交,如果一旦提交了,就会全部执行,即便其中有报错
    也要全部执行完,也不会回滚。
    multi:开启事务
    exec:执行事务
    queued:加入到服务器端的队列
    discard:回滚
    其实不应该叫事务,应该叫做批量处理,批量操作
    在exec命令触发的时候,这一批数据要么执行,要么都不执行。

    不能保证连接与连接(客户端与服务器端简历连接)之间的顺序,
    外部与计算机连接,在在计算机内部内核中,建立一个缓冲区,建立socket
    IO模型,多路复用器,1,epoll,是基于事件,2,io的read
    Redis的worker线程只有一个,计算还是串行的,多个io thread进行读取,另外结果输出也是多个线程输出,是并行的,充分利用了CPU
    IO IN -----> 计算------->io input
    Redis 核心数(IO配置线程数) :CPU核心数 - (1|2)
    Redis多线程其实就是利用CPU实现多线程io的读写,但是计算还是串行的,没有加锁

     

    郭慕荣博客园
  • 相关阅读:
    CS academy Binary Flips(dp)
    [POJ 1637] Sightseeing tour(网络流)
    Codeforces 346D Robot Control(01BFS)
    BZOJ 2069: [POI2004]ZAW(Dijkstra + 二进制拆分)
    驱动之SPI,UART,I2C的介绍与应用20170118
    USB驱动之CDC类的介绍与应用20160905
    uCOS-II之移植20160823
    java之面向对象20160818
    Java之基础20160806
    Android之框架20160721
  • 原文地址:https://www.cnblogs.com/jelly12345/p/14989826.html
Copyright © 2020-2023  润新知