作者回复: 这个问题非常好,对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。
作者回复: 了解源码的确会有很好的帮助,后续会综合大家的整体需求,可能会加个餐,来聊聊源码的阅读
作者回复: HiKV的研发驱动力主要有两方面:一个是希望键值数据库对单点操作,例如PUT/GET,以及对范围操作都能高效支持,Redis的全局组织结构是个哈希表,所以对范围操作支持不高效,例如KEYS操作。 另一个考虑是,大容量非易失内存的出现,使得键值数据库的容量可以更大,但Redis并没有支持非易失内存,或者说内存键值数据库应该如何使用非易失内存,这是要做设计考虑的。 欢迎交流讨论。
作者回复: 第一个赞就给你了!:)
作者回复: 加油!加油!
作者回复: Intel去年4月份已经面向市场推出AEP产品了,现在咱们个人也都能买得到,当然主板和CPU还需要做些支持,需要一定型号才行 不过,业界很多大厂更早些时候也在实践NVM。所以这个趋势我觉得是会比较确定的。就像现在SSD应用的很广泛,我们使用也不太会觉得有依赖性,因为使用比较普遍了。我觉得以后NVM也是类似的。
作者回复: 方法论很重要 :)
作者回复: Redis是可以直接作为键值数据库,保存的数据一般为key-value这样的数据。 而你说到的mysql,SQL Server是关系型数据库,保存的数据有关系模型。 这两类数据库在支持的数据模型、增删改查操作、事务支持等方面都有差别,所以有了Redis,并不能取代MySQL这类数据库的。
作者回复: 掌握方法很重要:)