local key_prefix = ARGV local key_delimeter = ARGV local subscriber = ARGV local subscription_id = ARGV local subscription_string = ARGV local source = ARGV local now = ARGV
local expiry = “+inf”
– determine if the subscriber is expiring local ttl = redis.call(“ttl”, key_subscription_ids_by_subscriber(key_prefix, key_delimeter, subscriber))
if ttl > -1 then
expiry = now + ttl
end
– store the subscription redis.call(“set”, key_subscription_id(key_prefix, key_delimeter, subscription_id), subscription_string)
– add the subscription to the subscriber's set redis.call(“zadd”, key_subscription_ids_by_subscriber(key_prefix, key_delimeter, subscriber), expiry, subscription_id)
– add the subscriber to the subscription's set redis.call(“zadd”, key_subscribers_by_subscription_id(key_prefix, key_delimeter, subscription_id), expiry, subscriber)
– add the subscription to the source's set redis.call(“zadd”, key_subscription_ids_by_source(key_prefix, key_delimeter, source), “+inf”, subscription_id)
– define what source the subscription is for redis.call(“set”, key_source_for_subscription_id(key_prefix, key_delimeter, subscription_id), source)
if ttl > -1 then
expire_subscription(key_prefix, key_delimeter, subscription_id)
else
persist_subscription(key_prefix, key_delimeter, subscription_id)
end