如何在Redis中对键的值部分进行范围查询搜索?

时间:2019-06-11 17:28:13

标签: c# redis stackexchange.redis

如何基于Redis的值部分进行范围查询?

我是Redis的新手。我打算将其用于缓存。我在C#中使用StackExchage.Redis库。

例如,我有实体Employee

public class Employee
{
    public int EmployeeId;
    public string Name;
    public float Age;
    public DateTime JoiningDate;
    public DateTime LeavingDate;
    public List<Department> Departments;
    public List<Address> Addresses;
}

其中EmployeeId是我的关键,Employee对象是我的价值。 我的Redis数据库中有100万此类记录。

我想找出某些问题,例如范围查询或按值部分(Employee对象的某些或组合属性)排序,或者Entity是否包含另一个实体(例如,Employee包含Department并且Department有自己的属性)

  1. 获取Employee的加入日期在2017年至2019年之间?
  2. Employee谁加入了5年?
  3. 在存储记录时,以某种属性的排序顺序存储(不想在C#中排序)

我正在使用此处描述的示例将数据存储在db中:Redis for .NET Developer – Redis Hash Datatype

1 个答案:

答案 0 :(得分:0)

您不仅可以使用Redis Hash来实现目标,而且可以将多个 Redis数据结构。

  • 使用哈希存储所有数据(不可避免)
  • 按员工日期排序时:
    • 您可以使用Redis Sorted Set
    • Sorted-Set成员是您的EmployeeId,Sorted-Set分数是员工加入日期
    • 您可以使用ZADD筛选排序的数据,并使用ZRANGEBYSCORE获得所需的排序结果

如果您还有其他排序要求,则必须将sorted属性转换为数字。