Redis通过StackExchange.Redis的二级索引

时间:2019-09-03 08:09:16

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

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

仅以此定义我的域

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

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

我正在尝试实现C#StackExchange.Redis附带的功能。成功创建哈希

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


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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:0)

本质上,SE.Redis仅公开了核心redis命令和原语。如果您知道要发出什么命令:SE.Redis将为您提供帮助。它不是,但是尝试提供更复杂的方案。您通常可以执行这些操作-无论是通过RediSearch之类的工具手动执行-:但是,您需要自己弄清楚那部分。当您知道要执行的操作时,SE.Redis将帮助您要求服务器执行此操作。可以直接使用,也可以通过NRediSearch之类的包装器。