• 小盖
    置顶
    2020-08-04
    给这个我们打磨了两年的专栏留个印记吧,就像我们编辑说的,希望这不只是一个课程,而且还是一个作品,我们要精益求精,追求卓越。 这不,昨天一上线,我们就发现课程配图虽然够用,但不精致。于是,我们的编辑同学就连夜赶工做了替换。 上周刚做完Java工程师方面的招聘调研,我可以确定地说,绝大多数的一线公司在面试后端岗位时,都会问到Redis相关的问题(RPC、缓存、MQ三驾马车)。咱们就从今天开始,和蒋老师,一起学Redis吧。
    共 13 条评论
    368
  • Geek_48707a
    2020-08-04
    请问一下老师,Redis中sorted set 底层实现是一个dict + 一个zskiplist, Redis底层为什么要如此设计。zadd key score value 这样的形式,那如果底层采用了跳表的数据结构zset到底是如何存储数据的呢?dict中存储的是什么,跳表中存储的又是什么呢

    作者回复: 这个问题非常好,对sorted set的底层实现,观察很仔细。 我们一般用sorted set时,会经常根据集合元素的分数进行范围查询,例如ZRANGEBYSCORE或者ZREVRANGEBYSCORE,这些操作基于跳表就可以实现O(logN)的复杂度。此时,跳表的每个节点同时保存了元素值和它的score。感兴趣可以进一步看下,redis源码的server.h中的zskiplistNode结构体。 然后,就是你说的为什么还设计dict。不知道你有没有注意到,sorted set 还有ZSCORE这样的操作,而且它的操作复杂度为O(1)。如果只有跳表,这个是做不到O(1)的,之所以可以做到O(1),就是因为还用了dict,里面存储的key是sorted set的member,value就是这个member的score。

    共 8 条评论
    59
  • 闫攀
    2020-08-03
    课程最后会梳理怎么更高效的读redis源码吗, 希望可以得到作者的回复

    作者回复: 了解源码的确会有很好的帮助,后续会综合大家的整体需求,可能会加个餐,来聊聊源码的阅读

    共 5 条评论
    38
  • Geek_224f63
    2020-08-03
    蒋老师你好,不知道研发hikv的背景是什么呢?难道redis都不能满足这个需求吗?

    作者回复: HiKV的研发驱动力主要有两方面:一个是希望键值数据库对单点操作,例如PUT/GET,以及对范围操作都能高效支持,Redis的全局组织结构是个哈希表,所以对范围操作支持不高效,例如KEYS操作。 另一个考虑是,大容量非易失内存的出现,使得键值数据库的容量可以更大,但Redis并没有支持非易失内存,或者说内存键值数据库应该如何使用非易失内存,这是要做设计考虑的。 欢迎交流讨论。

    共 10 条评论
    28
  • 张晗_Jeremy
    2020-08-03
    第一个沙发,收到通知就买了。gogogo!

    作者回复: 第一个赞就给你了!:)

    
    19
  • Geek_75d94a
    2020-08-06
    两张图给我很深的启发,很好的归纳零散的知识点,让我想尝试用在其他地方建立一下知识体系。

    作者回复: 加油!加油!

    共 3 条评论
    17
  • 一步
    2020-08-03
    如果使用非易失内存 NVM, 这样设计出来的 高性能的健值数据库 是不是就对硬件的依赖就很大了?

    作者回复: Intel去年4月份已经面向市场推出AEP产品了,现在咱们个人也都能买得到,当然主板和CPU还需要做些支持,需要一定型号才行 不过,业界很多大厂更早些时候也在实践NVM。所以这个趋势我觉得是会比较确定的。就像现在SSD应用的很广泛,我们使用也不太会觉得有依赖性,因为使用比较普遍了。我觉得以后NVM也是类似的。

    共 4 条评论
    16
  • 型火🔥
    2020-08-13
    两大维度和三大主线的系统方法论可以迁移到大部分的中间件体系学习中

    作者回复: 方法论很重要 :)

    
    11
  • 💕
    2020-08-18
    您好,还有就是你说的redis技术,存储数据。是不是说就不用数据库了比如mysql sql server等,直接用redis当数据库了呢?

    作者回复: Redis是可以直接作为键值数据库,保存的数据一般为key-value这样的数据。 而你说到的mysql,SQL Server是关系型数据库,保存的数据有关系模型。 这两类数据库在支持的数据模型、增删改查操作、事务支持等方面都有差别,所以有了Redis,并不能取代MySQL这类数据库的。

    共 2 条评论
    7
  • 与路同飞
    2020-08-03
    老师说的以这种问题画像图这种学习方式挺好的,用什么技术点解决什么场景问题,自己在以后学习也要善于用这种方式去归纳总结,不至于学了不会用

    作者回复: 掌握方法很重要:)

    共 2 条评论
    7