redis - 如何使用 Redis 存储和检索复合键值

标签 redis

我想将数据库表中的序列化对象存储在 Redis 中,该数据库表具有两个值的复合主键。这些对象在代码中可能类似于以下内容:

Public Class Contact
    Public Property Instance_Id() As Long
    Public Property Contact_Id() As Long
    Public Property First_Name() As String
    Public Property Last_Name() As String
End Class

Instance_Id 在一组联系人之间共享,Contact_Id 值对于每个联系人都是唯一的。

在 Redis 中存储这些对象的最快和内存效率最高的方法是什么,我可以在 Redis 中检索具有特定 Instance_Id 的所有联系人,或仅检索具有特定 Contact_Id 的联系人?

最佳答案

我会为表单(contact_id => Contact class data)的每个联系人构建一个散列,可以直接通过键(contact_id)查询来解决您的特定查找案例。然后,添加一组(已排序,如果您关心排序)(instance_id => [contact_id1, contact_id2, ... , contact_idN])。要按 instance_id 查找,您需要从一个查询中的索引集中获取 contact_ids,然后针对您返回的每个 ID,对每个 ID 执行特定查找。

从 RDBMS 的角度来看,这听起来很疯狂,我意识到,因为您习惯于将查询视为一项昂贵的操作。 Redis 命令的设计速度非常快,因此发送一大批命令来执行 RDBMS 中的一个查询是相当有效的。

关于redis - 如何使用 Redis 存储和检索复合键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15590112/

相关文章:

amazon-web-services - 使用 Cloudformation 创建新的 Elasticache Redis 实例时参数组合无效

redis - 在安装 gitlab-shell 时遇到问题

namespaces - 没有要加载的文件——redis-namespace

node.js - nodejs-redis(&connect-redis)是如何处理sync和async的?

MySQL 到 Redis - 导入和建模

java - 将 JedisPoolConfig testOnBorrow 设置为 false

scala - 如何使用scala redis客户端添加多个元素

java - 如何确保只有一个实例在预加载过程中将数据放入 Redis 缓存服务器

redis - Redisson CacheConfig中ttl和maxIdletime有什么区别

redis - Redis 6 中的多线程 I/O 在哪些类型的工作负载中有所作为?