skip to Main Content

I need to create a set in Redis:

redis> SADD myset "Hello"
(integer) 1
redis> SADD myset "World"
(integer) 1
redis> SADD myset "World"
(integer) 0
redis> SMEMBERS myset
1) "World"
2) "Hello"

But I need to set expire time for the key myset.

In other words I need a command kind of expire sadd myset... (like SETEX for string values).

Is there any way to execute these commands per one request to Redis server?

2

Answers


  1. There is no built-in command to do this. What you may do is; using transactions. As it is stated in the documentation;

    All the commands in a transaction are serialized and executed sequentially. It can never happen that a request issued by another client is served in the middle of the execution of a Redis transaction. This guarantees that the commands are executed as a single isolated operation.

    127.0.0.1:6379> MULTI
    OK
    127.0.0.1:6379> SADD mynewset a b c d e f g
    QUEUED
    127.0.0.1:6379> SADD mynewset f g h j k l
    QUEUED
    127.0.0.1:6379> EXPIRE mynewset 86400
    QUEUED
    127.0.0.1:6379> EXEC
    1) (integer) 7
    2) (integer) 4
    3) (integer) 1
    127.0.0.1:6379> TTL mynewset
    (integer) 86394
    127.0.0.1:6379>
    
    Login or Signup to reply.
  2. There is also the possibility of using a Lua script to tie the two commands together:

    127.0.0.1:6379> EVAL "redis.call('SADD', KEYS[1], unpack(ARGV)) redis.call('EXPIRE', KEYS[1], 3600)" 1 myset a b c d e
    (nil)
    127.0.0.1:6379> SMEMBERS myset
    1) "c"
    2) "d"
    3) "a"
    4) "b"
    5) "e"
    127.0.0.1:6379> TTL myset
    (integer) 3596
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search