【问题标题】:Secondary Index in Redis via StackExchange.Redis通过 StackExchange.Redis 在 Redis 中的二级索引
【发布时间】:2020-01-06 02:48:33
【问题描述】:

使用 Spring data redis @indexed 我可以在 Redis 中设置索引。

像这样定义我的域

@RedisHash("customer")
    public class Customer extends Serializble{

    @Id
    Private String CustomerId;
    @Indexed
    Private String CustmerName;
    …
    }

我正在尝试使用 C# StackExchange.Redis 来实现。成功创建Hash

IDatabase db = redis.GetDatabase(Variables.RedisDatabaseIndex);


db.HashSet(Row.customerId, new HashEntry[] {new HashEntry("customerName", Row.customerName) )

问题是我无法在 spring data redis 中创建类似于 Indexed 选项的索引。我试图从 stackexchange.redis 文档中获取,但找不到任何解决方案。任何指针都会有所帮助

【问题讨论】:

标签: redis stackexchange.redis spring-data-redis


【解决方案1】:

本质上,SE.Redis 只是公开了核心 redis 命令和原语。如果您知道要发出什么命令:SE.Redis 将为您提供帮助。但是,它试图提供更复杂的场景。你通常可以做这些事情——无论是手动还是通过像 RediSearch 这样的工具——但是:你需要自己弄清楚那部分。当你知道你想做什么时,SE.Redis 会帮你请求服务器去做。直接,或通过 NRediSearch 之类的包装器。

【讨论】:

    【解决方案2】:

    StackExchange.Redis 简单地包装了RESP commands。它不会尝试在此之上提供任何抽象。

    Redis 本身没有“二级索引”的概念 - 至少在您可能习惯于传统关系数据库的方式上没有。但是,它提供了许多数据结构,可用于维护有效的二级索引。

    我不熟悉 Spring 的 Redis 客户端,但在上面的示例中,您必须手动维护某种形式的客户名称到客户 ID 的映射,例如每个名称使用另一个哈希或一个键。

    如果您想提供某种形式的搜索,您可能需要查看Trigram-based search

    我写了an article 来讨论如何维护这些索引(通过事务或批处理作业),您可能会觉得这很有用。话虽如此,它主要关注数字索引,而您似乎正在寻找某种形式的搜索。

    【讨论】:

      猜你喜欢
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多