【问题标题】:How to store pointer to redis list element in hash object?如何在哈希对象中存储指向 redis 列表元素的指针?
【发布时间】:2017-11-08 18:57:05
【问题描述】:

我知道你不能嵌套 redis 数据结构。让我解释一下我的设计:

我有一个有序集合,集合中的每个元素都是 FIFO redis 列表的键名。

我还需要直接查找要存储在哈希中的每个元素。在哈希中,我希望能够直接指向 redis 列表中的一个元素。

这可能吗?任何想法如何调整这个?

【问题讨论】:

  • 是否将其位置的整数存储在列表中?
  • 但是列表可以更改,项目可以删除和更新。
  • 那么也许反过来。将哈希键存储在列表中吗?
  • 嗯,有这个可能。通过这样做,我可以通过哈希直接查找订单,同时通过列表保持 FIFO 行为。
  • 因为每个哈希键的值中可能有多个对象,我可能必须为每个值生成一个 uuid 以与列表中的哈希键一起存储。

标签: javascript node.js database data-structures redis


【解决方案1】:

列表不适合随机访问(即按索引)- LRANGE 是一项昂贵的操作。换句话说,FIFO + 随机访问它不是链表的工作。

【讨论】:

  • 如果我接受 Jonas W. 的建议并将数据存储在哈希表中,然后存储一个标识列表中每个存储对象的 uuid,那么我可以维护 LIST 的时间排序属性,同时进行 O(1) 查找。唯一的问题是删除。如果我从哈希表中删除一个对象,我还必须将列表名称的键存储在对象中,然后执行 LRANGE 来查找元素......谢天谢地,我预计不会存储超过一打在任何给定时间单个列表中的左右元素。但是,我当然希望它尽可能高效。
  • @MatthewDarnell 如果您的列表最多有十几个,那么尽管效率低下,但这不应该是一个真正的问题。当 N 变大时,O(N) 是一个 PITA。
猜你喜欢
  • 1970-01-01
  • 2014-05-22
  • 2021-02-01
  • 2015-05-26
  • 1970-01-01
  • 2014-12-19
  • 2019-12-18
  • 2021-05-20
  • 2020-01-14
相关资源
最近更新 更多