此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实现使用哪种数据类型?的主要内容,如果未能解决你的问题,请参考以下文章
使用哪种 SQL Server sql 数据类型来保留 UTC 日期时间