lua - Implement reference sets in Redis -


i need build structure in redis model following problem involes 3 entities: user, node , socket (all string ids). example, user u1 can connect node n1 sockets s1 , s2, can connect node n2 sockets s3 , s4.

i must able update sockets connected node of specific user, connects or disconnects. also, each socket must expire after amount of time if no action taken. @ given time need know if user connected @ least 1 socket (independently of node).

i modeled problem using 2 kinds of set (i used hashtag cluster): 1- set key {u:u1}skt:nx, contains sockets connected , example, n1 user u1 2- set key {u:u1}skts, contains other sets, example, "{u:u1}skt:n1", "{u:u1}skt:n2", ...

with structure can update sets {u:u1}skt:nx, adding or removing members. can use following lua script check if user connected socket (regardless of node).

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

is right approach? how can implement expire time of member of set?

redis not sport expiry of data structures' contents. common pattern implement expiry in sets use sorted sets instead, storing timestamp or version value in elements' score. expiry becomes simple matter of removing members having low enough scores (with zrembyscore command).


Comments

Popular posts from this blog

inversion of control - Autofac named registration constructor injection -

verilog - Systemverilog dynamic casting issues -

ios - Change Storyboard View using Seague -