此RedisCache实现使用哪种数据类型?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了此RedisCache实现使用哪种数据类型?相关的知识,希望对你有一定的参考价值。

我具有以下数据库表结构:

Id(string)  Type(string)  BeginDate(datetime) CloseDate(dateime) Source(string)
"+ww100"     "L"           23-JAN-20               23-APRIL-20     XYZ
"+ww100"     "L"           23-JAN-20               23-APRIL-20     XYZ
 ---         ---              ---                      ---         --- 

您可能已经观察到,该表没有任何主键,这意味着可能存在重复数据。现在,我需要将此表数据存储在Redis缓存中,并随后进行检索。示例:即使有多个记录,我仍想基于ID进行搜索,我想全部检索它们并进行处理。由于我是Redis的新手,因此能否请您为我推荐该用例使用哪种数据类型?因为键不是唯一的,所以我认为不可能以字典类型存储数据结构!预先感谢。

答案

由于您对检索或修改记录中的字段不感兴趣,但是在大多数情况下,您可以检索整个记录,因此可以将其序列化为您喜欢的格式,例如JSON或简单地作为:

+ww100|L|23-JAN-20|23-APRIL-20|XYZ

|或您首选的分隔符分隔,请确保分隔符不会成为数据字段的一部分或相应地转义。

使用排序集

由于没有什么可与两个相同的记录区分开,因此您只需保留一个计数器。

说您要存储:

Id(string)  Type(string)  BeginDate(datetime) CloseDate(dateime) Source(string)
"+ww100"     "L"           23-JAN-20               23-APRIL-20     XYZ
"+ww100"     "L"           23-JAN-20               23-APRIL-20     XYZ
"+ww101"     "E"           24-JAN-20               24-APRIL-20     ABC 

您使用ZADD选项插入ZADD。如果是新的,它将插入。如果重复,则会增加计数。

INCR

请注意重复的记录如何出现一次但有计数。

然后您可以使用> ZADD myData INCR 1 +ww100|L|23-JAN-20|23-APRIL-20|XYZ "1" > ZADD myData INCR 1 +ww100|L|23-JAN-20|23-APRIL-20|XYZ "2" > ZADD myData INCR 1 +ww101|E|24-JAN-20|24-APRIL-20|ABC "1" > ZRANGEBYSCORE myData -inf +inf WITHSCORES 1) "+ww101|E|24-JAN-20|24-APRIL-20|ABC" 2) "1" 3) "+ww100|L|23-JAN-20|23-APRIL-20|XYZ" 4) "2" 查询给定的ID以获取与ID匹配的所有记录:

ZSCAN

ZSCAN的缺点是您可能需要多次调用,直到光标恢复为零,并在服务器端遍历所有记录。

使用每个ID的排序列表

如果您希望以最佳性能查询每个ID,则对每个ID使用一个排序集。

保留所有ID的集合。

要存储,然后您首先使用> ZSCAN myData 0 MATCH "+ww100|*" 1) "0" 2) 1) "+ww100|L|23-JAN-20|23-APRIL-20|XYZ" 2) "2" 添加/确保ID:

ZSCAN

这里的缺点是要获取所有记录,您需要调用SADD以获取所有ID,然后为每个ID调用SADD

确保在适当的时候使用> SADD myDataIDs +ww100 (integer) 1 > ZADD myData:+ww100 INCR 1 +ww100|L|23-JAN-20|23-APRIL-20|XYZ "1" 保存往返时间。

并且您可以使用SMEMBERS myDataIDs优化某些操作。例如,在这里获取所有记录:

ZRANGEBYSCORE

以上是关于此RedisCache实现使用哪种数据类型?的主要内容,如果未能解决你的问题,请参考以下文章

哪种数据类型最适合 c++ 中节俭通信中的日期时间?

使用哪种 SQL Server sql 数据类型来保留 UTC 日期时间

哪种激活或传递函数适合对 3 类数据进行分类?

我应该在 React 中使用哪种类型的组件:功能组件或类基础组件?

哪种列类型用于将年份字段存储在具有年度数据行的表中

ABP源码分析十三:缓存Cache实现