在Redis中实现引用集

时间:2017-04-06 13:16:33

标签: lua redis

我需要在Redis中构建一个结构来模拟以下问题,这个问题包含3个实体:user,node和socket(所有字符串id)。 例如,用户U1可以通过套接字S1和S2连接到节点N1,但也可以通过套接字S3和S4连接到节点N2。

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

我使用2种集合模拟了问题(我使用了集群的hashtag): 1-一组带有键{u:U1} skt:NX,其中包含连接到例如N1的用户U1的插座 2-一个带有键{u:U1} skts的集合,其中包含其他集合,例如" {u:U1} skt:N1"," {u:U1} skt:N2& #34;,...

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

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

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

1 个答案:

答案 0 :(得分:0)

Redis不会使数据结构失效。内容。在集合中实现到期的常见模式是使用排序集代替,在元素中存储时间戳或版本值。得分了。然后,到期就变成了一个简单的问题,即删除分数足够低的成员(使用ZREMBYSCORE命令)。