数据库—如何正确地将用户与redis中的数据关联起来,并根据日期字段触发更新

mwyxok5s  于 2021-06-10  发布在  Redis
关注(0)|答案(1)|浏览(373)

大家好,我需要一些关于架构问题的见解。
我想使用redis来存储一堆不断被访问的数据,每天只更新2-3次。它由aws lambda函数手动更新。问题是虽然有一个 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
zhte4eai

zhte4eai1#

我的建议是将整个数据保存在一个数据类型中, hash 但是不同的查询有不同的键。每行包括 column1 , column2 以及 useridlist 将与 id 作为标识符。另一个散列将负责使用 id . 我没有把 end date 因为它只用于确定应该返回哪些用户标识,但如果需要,也可以将它们作为字段。
我初始化了每一行 id:<number>HSET . 使用了另一个名为 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>

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

相关问题