Is it possible in Redis to set TTL (time to live) not for a specific key, but for a member for a set?
I am using a structure for tags proposed by Redis documentation - the data are simple key-value pairs, and the tags are sets containing keys corresponding to each tag, e.g.
> SETEX id:id_1 100 'Lorem ipsum'
OK
> SADD tag:tag_1 id:id_1
(integer) 1
The key id:id_1
will expire as expected but i don't see an efficient way to remove the corresponding member from the tag:tag_1
set.
One way I came up is using a cron job containing a script which would remove expired keys from sets periodically - by adding all the tag names to another set and then iterating through all the tags, then all the ids corresponding to each tag and checking if corresponding key exists - if not, calling SREM
.
I don't think it will be an efficient way and I would possibly like to keep the tags as clean as possible, because the size of the sets will probably affect performance of searching by multiple tags (SINTER
). Is there a more "internal" way?