小编典典

在Redis中实现参考集

redis

我需要在Redis中构建一个结构,以建模涉及3个实体的以下问题:用户,节点和套接字(所有字符串ID)。例如,用户U1可以通过插座S1和S2连接到节点N1,但是他也可以通过插座S3和S4连接到节点N2。

当他连接或断开连接时,我必须能够轻松更新连接到特定用户节点的套接字。此外,如果不采取任何措施,则每个套接字必须在一定时间后过期。在任何给定时间,我需要知道用户是否与至少一个套接字(独立于节点)连接。

我使用2种集合(对群集使用井号)对问题进行建模:1-具有密钥{u:U1} skt:NX的集合,其中包含套接字,例如,用户U1连接到N1 2-
a用键{u:U1} skts进行设置,其中包含其他集合,例如“ {u:U1} skt:N1”,“ {u:U1} skt:N2”,…

通过这种结构,我可以通过添加或删除成员来轻松更新集{u:U1} skt:NX。另外,我可以使用以下lua脚本来检查用户是否与套接字连接(无论节点如何)。

local indexes = redis.call("smembers", KEYS[1])
return redis.call("sunion", unpack(indexes))

这是正确的方法吗?如何实现集合成员的过期时间?


阅读 295

收藏
2020-06-20

共1个答案

小编典典

Redis不会终止数据结构的内容。在集合中实现到期的一种常见模式是改用排序集合,将时间戳或版本值存储在元素的分数中。届满将成为一个简单的问题,即删除具有足够低分数的成员(使用该ZREMBYSCORE命令)。

2020-06-20