Database 如何正确地将用户与Redis中的数据关联,并根据日期字段触发更新

Database 如何正确地将用户与Redis中的数据关联,并根据日期字段触发更新,database,database-design,redis,aws-lambda,node-redis,Database,Database Design,Redis,Aws Lambda,Node Redis,大家好,我需要一些关于架构问题的见解 我想使用Redis来存储大量数据,这些数据不断被访问,每天只更新2-3次。它由aws lambda函数手动更新。问题是Redis表中有一个EndDate列,之后我想更新所有依赖该数据的用户,这些数据的结束日期即将到来。我是否像下面的示例那样将用户列表存储在Redis表中?还是我应该想出一个单独的方法 Id Column1 Column2 User_Id_List End_Date 1 100 100

大家好,我需要一些关于架构问题的见解

我想使用Redis来存储大量数据,这些数据不断被访问,每天只更新2-3次。它由aws lambda函数手动更新。问题是Redis表中有一个
EndDate
列,之后我想更新所有依赖该数据的用户,这些数据的结束日期即将到来。我是否像下面的示例那样将用户列表存储在Redis表中?还是我应该想出一个单独的方法

Id  Column1     Column2     User_Id_List    End_Date
1   100         100         [1,2,3,4]       06-21-2020
2   100         100         [3,5,1,7]       06-22-2020
3   100         100         [9,2,1,4]       06-23-2020
4   100         100         [8,5,6,3]       06-24-2020
5   100         100         [4,8,2,9]       06-25-2020
6   100         100         [9,5,8,1]       06-26-2020

我的建议是将整个数据保存在单个数据类型中,
hash
,但不同的查询使用不同的键。包括
column1
column2
useridlist
在内的每一行将以
id
作为标识符以散列形式保存。另一个散列将负责结合
id
的结束日期。 我没有将
end date
放入第一个散列组,因为它只用于确定应该返回哪些用户标识,但如果需要,也可以将它们作为字段

我用
id:
HSET
初始化了每一行。使用另一个名为
enddates
键的散列将enddates与相应的
id
s放在一起

127.0.0.1:6379> HSET id:1 column1 100 column2 100 users "[1,2,3,4]"
(integer) 3
127.0.0.1:6379> HSET id:2 column1 100 column2 100 users "[3,5,1,7]"
(integer) 3
127.0.0.1:6379> HSET id:3 column1 100 column2 100 users "[9,2,1,4]"
(integer) 3
127.0.0.1:6379> HSET enddates 06-21-2020 1 06-22-2020 2 06-23-2020 3
(integer) 3
127.0.0.1:6379> HGETALL enddates
1) "06-21-2020"
2) "1"
3) "06-22-2020"
4) "2"
5) "06-23-2020"
6) "3"
127.0.0.1:6379>
当您使用
HGET
进行查询时,您可以获得行的id(以下行中的1)。如果
HGET
没有返回任何内容(第二个命令),则可以放弃它

127.0.0.1:6379> HGET enddates 06-21-2020
"1"
127.0.0.1:6379> HGET enddates 06-21-2022
(nil)
127.0.0.1:6379>
由于您获得了
1
,因此可以使用最后一个命令获得用户

127.0.0.1:6379> HGET id:1 users
"[1,2,3,4]"
127.0.0.1:6379>

然后在应用程序层中,您可以对其进行解析,将其传递到更新查询中。

我的建议是将整个数据保存在一个数据类型中,
散列
,但不同的查询使用不同的键。包括
column1
column2
useridlist
在内的每一行将以
id
作为标识符以散列形式保存。另一个散列将负责结合
id
的结束日期。 我没有将
end date
放入第一个散列组,因为它只用于确定应该返回哪些用户标识,但如果需要,也可以将它们作为字段

我用
id:
HSET
初始化了每一行。使用另一个名为
enddates
键的散列将enddates与相应的
id
s放在一起

127.0.0.1:6379> HSET id:1 column1 100 column2 100 users "[1,2,3,4]"
(integer) 3
127.0.0.1:6379> HSET id:2 column1 100 column2 100 users "[3,5,1,7]"
(integer) 3
127.0.0.1:6379> HSET id:3 column1 100 column2 100 users "[9,2,1,4]"
(integer) 3
127.0.0.1:6379> HSET enddates 06-21-2020 1 06-22-2020 2 06-23-2020 3
(integer) 3
127.0.0.1:6379> HGETALL enddates
1) "06-21-2020"
2) "1"
3) "06-22-2020"
4) "2"
5) "06-23-2020"
6) "3"
127.0.0.1:6379>
当您使用
HGET
进行查询时,您可以获得行的id(以下行中的1)。如果
HGET
没有返回任何内容(第二个命令),则可以放弃它

127.0.0.1:6379> HGET enddates 06-21-2020
"1"
127.0.0.1:6379> HGET enddates 06-21-2022
(nil)
127.0.0.1:6379>
由于您获得了
1
,因此可以使用最后一个命令获得用户

127.0.0.1:6379> HGET id:1 users
"[1,2,3,4]"
127.0.0.1:6379>

然后在应用程序层中,您可以对其进行解析,将其传递到更新查询。

Hello Manny,欢迎光临。它是如何访问的?“上来”是什么意思?这个架构需要id、column1和column2吗?大家好!缓存将通过ID访问,它将是我的Redis“密钥”。我的意思是通过传递“EndDate”的日期来表示“即将到来”,因此对于第一行,在6-22-2020,用户id列表中的用户应该在他们的表中更新。。在我的体系结构中需要Column1和Column2是的。我只是简化了命名惯例。你好,曼尼,欢迎。它是如何访问的?“上来”是什么意思?这个架构需要id、column1和column2吗?大家好!缓存将通过ID访问,它将是我的Redis“密钥”。我的意思是通过传递“EndDate”的日期来表示“即将到来”,因此对于第一行,在6-22-2020,用户id列表中的用户应该在他们的表中更新。。在我的体系结构中需要Column1和Column2是的。我只是简化了命名约定。