zoukankan      html  css  js  c++  java
  • 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的读写,但是计算还是串行的,没有加锁

     

    郭慕荣博客园
  • 相关阅读:
    RMAN 增量备份 的 对象测试
    小论工具类App的盈利之道
    linux下二进制文件比较程序
    [置顶] 对iOS开发有用的一些自动化处理脚本
    [Win8]Windows8开发笔记(八):数据绑定的基础
    NetBeans 时事通讯(刊号 # 116 Sep 11, 2010)
    域名信息证实 JavaEye 已被 CSDN 收购
    插件架构简介
    GAE for Java exception: no matching index found.
    Java 7 最快要到 2012 年中发布
  • 原文地址:https://www.cnblogs.com/jelly12345/p/14989826.html
Copyright © 2011-2022 走看看