如何使用Redis列表中的where where条件查找记录?

时间:2016-05-27 10:44:31

标签: redis stackexchange.redis

我正在使用cloud structure redis库来进行redis缓存和redis列表。

// Settings should holds in static variable
public static class RedisServer
{
    public static readonly RedisSettings Default = new RedisSettings("127.0.0.1");
}

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

var mylist = new RedisList<Person>(RedisServer.Default, "test-list-key");
await mylist.LeftPush(new[] { new Person { Name = "Tom" , Age = 12 }, new Person { Name = "Mary" , Age = 23} });
  

我想查找来自mylist

Name=Tom and Age=12的记录

2 个答案:

答案 0 :(得分:1)

Redis 根本不像那样。查询列表时,您无法执行where ...的等效操作。您可以推送,弹出和查询范围等(here's the full list of "list" commands)。 a&#34; [list]&#34;中[content]的索引是什么,但为此您需要知道对象的整个有效负载(完全相同的形式),而不仅仅是单件。您可以 在redis中手动构建索引,但是:这是一个相对高级的主题。

答案 1 :(得分:1)

就像Marc Gravell在他自己的回答中所说,Redis不支持查询,但它可以以一种可以作为原始数据索引的方式进行定制。这就是提供列表,集合,排序集,哈希等数据结构的原因......

例如,如果要检索具有特定名称的人员年龄,则需要以稍后可以获得与整个条件匹配的整个实体的方式对数据编制索引。

  1. 将JSON字符串存储在散列中,其中键是唯一标识符,值是JSON文本。或者,您可以使用简单的set命令将键值对存储在全局Redis键空间中。

  2. 如果您想获得拥有NameAge的人,您可以将人员存储在另一个哈希中,其中密钥将采用某种格式,例如<Name>:<Age>和值将是该人的唯一标识符:Tom:12 =&gt; 1(其中1是唯一标识符。

  3. 一旦您已经创建了第二个哈希以支持名称和年龄条件,它只是执行hget persons:name-and-age Tom:12来获取Tom&# 39; s唯一标识符,稍后执行另一个hget以获取JSON:hget persons 1(其中1是从名称和年龄的哈希中获取的唯一标识符搜索条件。

  4. 综上所述
    hset persons 1 "JSON here"
    hset persons:bycriteria:name-and-age Tom:12 1
    
    hset persons 2 "JSON here"
    hset persons:bycriteria:name-and-age Matias:31 1
    

    现在我想让汤姆满12岁:

    // pseudo-code
    // "Tom" and "12" may come from C# variables that were set by who knows
    // what... For example, a WebAPI request that got these search criteria
    // arguments...
    tomId = hget persons:bycriteria:name-and-age Tom:12
    tom = hget persons tomId
    

    这只是Redis索引数据的一种可能方法,后来能够通过Redis中的某些预定义标准获取数据。

    我建议你在Redis官方网站上发表这篇文章:http://redis.io/topics/indexes