redis - 按值查找键

标签 redis

我想实现的想法是一个 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 cloneLamernews 的源代码,都是redis作者写的Salvatore Sanfilippo .

关于redis - 按值查找键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12745818/

相关文章:

algorithm - Redis 中的跳过列表为什么使用 p=1/4 而不是 1/e?

redis - 将转储文件加载到 redis 数据库的问题

caching - AWS 中的 Redis 缓存问题

redis - 此用例的最佳 Redis 数据结构

node.js - Node Js : Redis job is not completing after finish its task

amazon-web-services - AWS Redis : JedisConnectionException: java.net.SocketException:打开的文件太多

redis - redis 中的多个 RPOPLPUSH

laravel - Ioredis 与 Laradock redis 容器连接超时

docker - node.js docker容器与本地redis服务器(127.0.0.1)的连接

redis - 用windows installer文件打包redis