SADD (original) (raw)
Syntax
SADD key member [member ...]
Available since:
Redis Open Source 1.0.0
Time complexity:
O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.
ACL categories:
@write
, @set
, @fast
,
Add the specified members to the set stored at key
. Specified members that are already a member of this set are ignored. If key
does not exist, a new set is created before adding the specified members.
An error is returned when the value stored at key
is not a set.
Examples
>_ Redis CLI
redis> SADD myset "Hello" "World"
(integer) 2
redis> SADD myset "World"
(integer) 0
redis> SMEMBERS myset
1) "Hello"
2) "World"
Are you tired of using redis-cli? Try Redis Insight - the developer GUI for Redis.
Python
import redis
r = redis.Redis(decode_responses=True)
res1 = r.sadd("myset", "Hello", "World")
print(res1) # >>> 2
res2 = r.sadd("myset", "World")
print(res2) # >>> 0
res3 = r.smembers("myset")
print(res3) # >>> {'Hello', 'World'}
res4 = r.sadd("myset", "Hello", "World")
print(res4) # >>> 2
res5 = r.smembers("myset")
print(res5) # >>> {'Hello', 'World'}
Node.js
import { createClient } from 'redis';
const client = createClient();
await client.connect().catch(console.error);
const res1 = await client.sAdd('myset', ['Hello', 'World']);
console.log(res1); // 2
const res2 = await client.sAdd('myset', ['World']);
console.log(res2); // 0
const res3 = await client.sMembers('myset')
console.log(res3); // ['Hello', 'World']
const res4 = await client.sAdd('myset', ['Hello', 'World']);
console.log(res4); // 2
const res5 = await client.sMembers('myset')
console.log(res5); // ['Hello', 'World']
await client.quit();
Java-Sync
import static java.util.stream.Collectors.toList;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.Set;
import redis.clients.jedis.UnifiedJedis;
public class CmdsSetExample {
public void run() {
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
long sAddResult1 = jedis.sadd("myset", "Hello");
System.out.println(sAddResult1); // >>> 1
long sAddResult2 = jedis.sadd("myset", "World");
System.out.println(sAddResult2); // >>> 1
long sAddResult3 = jedis.sadd("myset", "World");
System.out.println(sAddResult3); // >>> 0
Set<String> sAddResult4 = jedis.smembers("myset");
System.out.println(sAddResult4.stream().sorted().collect(toList()));
// >>> [Hello, World]
long sMembersResult1 = jedis.sadd("myset", "Hello", "World");
System.out.println(sMembersResult1); // >>> 2
Set<String> sMembersResult2 = jedis.smembers("myset");
System.out.println(sMembersResult2.stream().sorted().collect(toList()));
// >>> [Hello, World]
jedis.close();
}
}
Go
package example_commands_test
import (
"context"
"fmt"
"github.com/redis/go-redis/v9"
)
func ExampleClient_sadd_cmd() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
sAddResult1, err := rdb.SAdd(ctx, "myset", "Hello").Result()
if err != nil {
panic(err)
}
fmt.Println(sAddResult1) // >>> 1
sAddResult2, err := rdb.SAdd(ctx, "myset", "World").Result()
if err != nil {
panic(err)
}
fmt.Println(sAddResult2) // >>> 1
sAddResult3, err := rdb.SAdd(ctx, "myset", "World").Result()
if err != nil {
panic(err)
}
fmt.Println(sAddResult3) // >>> 0
sMembersResult, err := rdb.SMembers(ctx, "myset").Result()
if err != nil {
panic(err)
}
fmt.Println(sMembersResult) // >>> [Hello World]
}
func ExampleClient_smembers_cmd() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
sAddResult, err := rdb.SAdd(ctx, "myset", "Hello", "World").Result()
if err != nil {
panic(err)
}
fmt.Println(sAddResult) // >>> 2
sMembersResult, err := rdb.SMembers(ctx, "myset").Result()
if err != nil {
panic(err)
}
fmt.Println(sMembersResult) // >>> [Hello World]
}
Give these commands a try in the interactive console:
SADD myset "Hello" "World" SADD myset "World" SMEMBERS myset
RESP2/RESP3 Reply
Integer reply: the number of elements that were added to the set, not including all the elements already present in the set.
History
- Starting with Redis version 2.4.0: Accepts multiple
member
arguments.