我想实现的想法是一个 id 表。基本上它具有结构 (user_id, lecture_id),其中 user_id 指的是我的 User 表中的主键,lecture_id 指的是我的 Lecturer 表中的主键。
我正在尝试在 Redis 中实现这一点,但是如果我将 key 设置为用户的主 ID,当我尝试运行类似get all the records with lector id=5 的查询时,因为讲师是不是关键,而是值(value)我将无法在 O(1) 时间内达到它。
如何形成像我上面提到的id表这样的结构,或者Redis不支持这种结构?
最佳答案
在使用 Redis 时,您可以快速学到的一件事是,您可以围绕访问需求设计数据结构,特别是涉及关系时(毕竟它不是关系数据库)
正如您已经注意到的那样,无法按时间复杂度为 O(1) 的“值”进行搜索,但是有一些方法可以使用 redis 来处理您所描述的内容。以下是我的建议:
- 像您已经在做的那样,按用户 ID(例如哈希)存储您的用户数据。
- 为每个讲师 ID 设置一个附加集,其中包含与相关讲师 ID 相对应的所有用户 ID。
这看起来像是在复制关系数据,因为您的用户数据必须存储讲座 ID,而您的讲座数据将存储用户 ID,但如果要建立关系,这是要付出的(微小)代价在像 redis 这样的非关系数据存储中。实际上,这很有效;内存很少成为小型数据集的瓶颈(想想成千上万的 ID)。
为了更好地了解人们如何使用 Redis 为具有关系的应用程序建模,我建议阅读 Design and implementation of a simple Twitter clone和 Lamernews 的源代码,都是redis作者写的Salvatore Sanfilippo .
关于redis - 按值查找键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12745818/