Redis Set
Redis Set 简介
Redis Set 是一个无序的、包含唯一字符串(成员)的集合。您可以高效地使用 Redis Set 来
- 追踪唯一项(例如,追踪访问给定博客文章的所有唯一 IP 地址)。
- 表示关系(例如,拥有给定角色的所有用户集合)。
- 执行常见的集合操作,例如交集、并集和差集。
基本命令
SADD
命令向集合添加新成员。SREM
命令从集合中移除指定成员。SISMEMBER
命令测试字符串是否为集合成员。SINTER
命令返回两个或多个集合共有的成员集合(即交集)。SCARD
命令返回集合的大小(也称基数)。
查看 完整的 Set 命令列表。
示例
-
存储在法国和美国比赛的自行车集合。请注意,如果您添加已存在的成员,该成员将被忽略。
> SADD bikes:racing:france bike:1 (integer) 1 > SADD bikes:racing:france bike:1 (integer) 0 > SADD bikes:racing:france bike:2 bike:3 (integer) 2 > SADD bikes:racing:usa bike:1 bike:4 (integer) 2
厌倦了使用 redis-cli?试试 Redis Insight - 适用于 Redis 的开发者 GUI。""" Code samples for Set doc pages: https://redis.ac.cn/docs/latest/develop/data-types/sets/ """ import redis r = redis.Redis(decode_responses=True) res1 = r.sadd("bikes:racing:france", "bike:1") print(res1) # >>> 1 res2 = r.sadd("bikes:racing:france", "bike:1") print(res2) # >>> 0 res3 = r.sadd("bikes:racing:france", "bike:2", "bike:3") print(res3) # >>> 2 res4 = r.sadd("bikes:racing:usa", "bike:1", "bike:4") print(res4) # >>> 2 r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") r.sadd("bikes:racing:usa", "bike:1", "bike:4") res5 = r.sismember("bikes:racing:usa", "bike:1") print(res5) # >>> 1 res6 = r.sismember("bikes:racing:usa", "bike:2") print(res6) # >>> 0 r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") r.sadd("bikes:racing:usa", "bike:1", "bike:4") res7 = r.sinter("bikes:racing:france", "bikes:racing:usa") print(res7) # >>> {'bike:1'} r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") res8 = r.scard("bikes:racing:france") print(res8) # >>> 3 res9 = r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") print(res9) # >>> 3 res10 = r.smembers("bikes:racing:france") print(res10) # >>> {'bike:1', 'bike:2', 'bike:3'} res11 = r.sismember("bikes:racing:france", "bike:1") print(res11) # >>> 1 res12 = r.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4") print(res12) # >>> [1, 1, 0] r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") r.sadd("bikes:racing:usa", "bike:1", "bike:4") res13 = r.sdiff("bikes:racing:france", "bikes:racing:usa") print(res13) # >>> {'bike:2', 'bike:3'} r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") r.sadd("bikes:racing:usa", "bike:1", "bike:4") r.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4") res13 = r.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy") print(res13) # >>> {'bike:1'} res14 = r.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy") print(res14) # >>> {'bike:1', 'bike:2', 'bike:3', 'bike:4'} res15 = r.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy") print(res15) # >>> {} res16 = r.sdiff("bikes:racing:usa", "bikes:racing:france") print(res16) # >>> {'bike:4'} res17 = r.sdiff("bikes:racing:france", "bikes:racing:usa") print(res17) # >>> {'bike:2', 'bike:3'} r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5") res18 = r.srem("bikes:racing:france", "bike:1") print(res18) # >>> 1 res19 = r.spop("bikes:racing:france") print(res19) # >>> bike:3 res20 = r.smembers("bikes:racing:france") print(res20) # >>> {'bike:2', 'bike:4', 'bike:5'} res21 = r.srandmember("bikes:racing:france") print(res21) # >>> bike:4
import assert from 'assert'; import { createClient } from 'redis'; const client = await createClient(); await client.connect(); const res1 = await client.sAdd('bikes:racing:france', 'bike:1') console.log(res1) // >>> 1 const res2 = await client.sAdd('bikes:racing:france', 'bike:1') console.log(res2) // >>> 0 const res3 = await client.sAdd('bikes:racing:france', ['bike:2', 'bike:3']) console.log(res3) // >>> 2 const res4 = await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4']) console.log(res4) // >>> 2 await client.del('bikes:racing:france') await client.del('bikes:racing:usa') await client.sAdd('bikes:racing:france', 'bike:1', 'bike:2', 'bike:3') await client.sAdd('bikes:racing:usa', 'bike:1', 'bike:4') const res5 = await client.sIsMember('bikes:racing:usa', 'bike:1') console.log(res5) // >>> true const res6 = await client.sIsMember('bikes:racing:usa', 'bike:2') console.log(res6) // >>> false await client.del('bikes:racing:france') await client.del('bikes:racing:usa') await client.sAdd('bikes:racing:france', 'bike:1', 'bike:2', 'bike:3') await client.sAdd('bikes:racing:usa', 'bike:1', 'bike:4') const res7 = await client.sInter('bikes:racing:france', 'bikes:racing:usa') console.log(res7) // >>> {'bike:1'} await client.del('bikes:racing:france') await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3']) const res8 = await client.sCard('bikes:racing:france') console.log(res8) // >>> 3 const res9 = await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3']) console.log(res9) // >>> 3 const res10 = await client.sMembers('bikes:racing:france') console.log(res10) // >>> ['bike:1', 'bike:2', 'bike:3'] const res11 = await client.sIsMember('bikes:racing:france', 'bike:1') console.log(res11) // >>> true const res12 = await client.smIsMember('bikes:racing:france', ['bike:2', 'bike:3', 'bike:4']) console.log(res12) // >>> [true, true, false] await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3']) await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4']) const res13 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa']) console.log(res13) // >>> [ 'bike:2', 'bike:3' ] await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3']) await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4']) await client.sAdd('bikes:racing:italy', ['bike:1', 'bike:2', 'bike:3', 'bike:4']) const res14 = await client.sInter( ['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy'] ) console.log(res14) // >>> ['bike:1'] const res15 = await client.sUnion( ['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy'] ) console.log(res15) // >>> ['bike:1', 'bike:2', 'bike:3', 'bike:4'] const res16 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy']) console.log(res16) // >>> [] const res17 = await client.sDiff(['bikes:racing:usa', 'bikes:racing:france']) console.log(res17) // >>> ['bike:4'] const res18 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa']) console.log(res18) // >>> ['bike:2', 'bike:3'] debugger; await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5']) const res19 = await client.sRem('bikes:racing:france', 'bike:1') console.log(res19) // >>> 1 const res20 = await client.sPop('bikes:racing:france') console.log(res20) // >>> bike:3 or other random value const res21 = await client.sMembers('bikes:racing:france') console.log(res21) // >>> ['bike:2', 'bike:4', 'bike:5']; depends on previous result const res22 = await client.sRandMember('bikes:racing:france') console.log(res22) // >>> bike:4 or other random value
package io.redis.examples; import redis.clients.jedis.UnifiedJedis; import org.junit.jupiter.api.Test; import java.util.List; import java.util.Set; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertEquals; public class SetsExample { public void run() { UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379"); long res1 = jedis.sadd("bikes:racing:france", "bike:1"); System.out.println(res1); // >>> 1 long res2 = jedis.sadd("bikes:racing:france", "bike:1"); System.out.println(res2); // >>> 0 long res3 = jedis.sadd("bikes:racing:france", "bike:2", "bike:3"); System.out.println(res3); // >>> 2 long res4 = jedis.sadd("bikes:racing:usa", "bike:1", "bike:4"); System.out.println(res4); // >>> 2 jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); jedis.sadd("bikes:racing:usa", "bike:1", "bike:4"); boolean res5 = jedis.sismember("bikes:racing:usa", "bike:1"); System.out.println(res5); // >>> true boolean res6 = jedis.sismember("bikes:racing:usa", "bike:2"); System.out.println(res6); // >>> false jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); jedis.sadd("bikes:racing:usa", "bike:1", "bike:4"); Set<String> res7 = jedis.sinter("bikes:racing:france", "bikes:racing:usa"); System.out.println(res7); // >>> [bike:1] jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); long res8 = jedis.scard("bikes:racing:france"); System.out.println(res8); // >>> 3 long res9 = jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); System.out.println(res9); // >>> 3 Set<String> res10 = jedis.smembers("bikes:racing:france"); System.out.println(res10); // >>> [bike:1, bike:2, bike:3] boolean res11 = jedis.sismember("bikes:racing:france", "bike:1"); System.out.println(res11); // >>> true List<Boolean> res12 = jedis.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4"); System.out.println(res12); // >>> [true,true,false] jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); jedis.sadd("bikes:racing:usa", "bike:1", "bike:4"); Set<String> res13 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa"); System.out.println(res13); // >>> [bike:2, bike:3] jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); jedis.sadd("bikes:racing:usa", "bike:1", "bike:4"); jedis.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4"); Set<String> res14 = jedis.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); System.out.println(res14); // >>> [bike:1] Set<String> res15 = jedis.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); System.out.println(res15); // >>> [bike:1, bike:2, bike:3, bike:4] Set<String> res16 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); System.out.println(res16); // >>> [] Set<String> res17 = jedis.sdiff("bikes:racing:usa", "bikes:racing:france"); System.out.println(res17); // >>> [bike:4] Set<String> res18 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa"); System.out.println(res18); // >>> [bike:2, bike:3] jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); long res19 = jedis.srem("bikes:racing:france", "bike:1"); System.out.println(res18); // >>> 1 String res20 = jedis.spop("bikes:racing:france"); System.out.println(res20); // >>> bike:3 Set<String> res21 = jedis.smembers("bikes:racing:france"); System.out.println(res21); // >>> [bike:2, bike:4, bike:5] String res22 = jedis.srandmember("bikes:racing:france"); System.out.println(res22); // >>> bike:4 jedis.close(); } }
package io.redis.examples.async; import io.lettuce.core.*; import io.lettuce.core.api.async.RedisAsyncCommands; import io.lettuce.core.api.StatefulRedisConnection; import java.util.*; import static java.util.stream.Collectors.*; import java.util.concurrent.CompletableFuture; public class SetExample { public void run() { RedisClient redisClient = RedisClient.create("redis://localhost:6379"); try (StatefulRedisConnection<String, String> connection = redisClient.connect()) { RedisAsyncCommands<String, String> asyncCommands = connection.async(); CompletableFuture<Void> sAdd = asyncCommands.sadd("bikes:racing:france", "bike:1").thenCompose(res1 -> { System.out.println(res1); // >>> 1 return asyncCommands.sadd("bikes:racing:france", "bike:1"); }).thenCompose(res2 -> { System.out.println(res2); // >>> 0 return asyncCommands.sadd("bikes:racing:france", "bike:2", "bike:3"); }).thenCompose(res3 -> { System.out.println(res3); // >>> 2 return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4"); }) .thenAccept(System.out::println) // >>> 2 .toCompletableFuture(); CompletableFuture<Void> sIsMember = sAdd.thenCompose(r -> { return asyncCommands.sismember("bikes:racing:usa", "bike:1"); }).thenCompose(res4 -> { System.out.println(res4); // >>> true return asyncCommands.sismember("bikes:racing:usa", "bike:2"); }) .thenAccept(System.out::println) // >>> false .toCompletableFuture(); CompletableFuture<Void> sInter = sIsMember.thenCompose(r -> { return asyncCommands.sinter("bikes:racing:france", "bikes:racing:usa"); }) .thenAccept(System.out::println) // >>> ["bike:1"] .toCompletableFuture(); CompletableFuture<Void> sCard = sInter.thenCompose(r -> { return asyncCommands.scard("bikes:racing:france"); }) .thenAccept(System.out::println) // >>> 3 .toCompletableFuture(); CompletableFuture<Void> sAddSMembers = sCard.thenCompose(r -> { return asyncCommands.del("bikes:racing:france"); }).thenCompose(r -> { return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); }).thenCompose(res5 -> { System.out.println(res5); // >>> 3 return asyncCommands.smembers("bikes:racing:france"); }) .thenAccept(System.out::println) // >>> [bike:1, bike:2, bike:3] .toCompletableFuture(); CompletableFuture<Void> sMIsMember = sAddSMembers.thenCompose(r -> { return asyncCommands.sismember("bikes:racing:france", "bike:1"); }).thenCompose(res6 -> { System.out.println(res6); // >>> True return asyncCommands.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4"); }) .thenAccept(System.out::println) // >>> [true, true, false] .toCompletableFuture(); CompletableFuture<Void> sDiff = sMIsMember.thenCompose(r -> { return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); }).thenCompose(r -> { return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4"); }).thenCompose(r -> { return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa"); }) .thenAccept(System.out::println) // >>> [bike:2, bike:3] .toCompletableFuture(); CompletableFuture<Void> multisets = sDiff.thenCompose(r -> { return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); }).thenCompose(r -> { return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4"); }).thenCompose(r -> { return asyncCommands.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4"); }).thenCompose(r -> { return asyncCommands.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); }).thenCompose(res7 -> { System.out.println(res7); // >>> [bike:1] return asyncCommands.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); }).thenCompose(res8 -> { System.out.println(res8); // >>> [bike:1, bike:2, bike:3, bike:4] return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); }).thenCompose(res9 -> { System.out.println(res9); // >>> [] return asyncCommands.sdiff("bikes:racing:usa", "bikes:racing:france"); }).thenCompose(res10 -> { System.out.println(res10); // >>> [bike:4] return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa"); }) .thenAccept(System.out::println) // >>> [bike:2, bike:3] .toCompletableFuture(); CompletableFuture<Void> sRem = multisets.thenCompose(r -> { return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); }).thenCompose(r -> { return asyncCommands.srem("bikes:racing:france", "bike:1"); }).thenCompose(res11 -> { System.out.println(res11); // >>> 1 return asyncCommands.spop("bikes:racing:france"); }).thenCompose(res12 -> { System.out.println(res12); // >>> bike:3 (for example) return asyncCommands.smembers("bikes:racing:france"); }).thenCompose(res13 -> { System.out.println(res13); // >>> [bike:2, bike:4, bike:5] return asyncCommands.srandmember("bikes:racing:france"); }).thenAccept(System.out::println) // >>> bike:4 .toCompletableFuture(); CompletableFuture.allOf( sRem).join(); } finally { redisClient.shutdown(); } } }
package example_commands_test import ( "context" "fmt" "sort" "github.com/redis/go-redis/v9" ) func ExampleClient_sadd() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res1, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res1) // >>> 1 res2, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res2) // >>> 0 res3, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res3) // >>> 2 res4, err := rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result() if err != nil { panic(err) } fmt.Println(res4) // >>> 2 } func ExampleClient_sismember() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } _, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result() if err != nil { panic(err) } res5, err := rdb.SIsMember(ctx, "bikes:racing:usa", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res5) // >>> true res6, err := rdb.SIsMember(ctx, "bikes:racing:usa", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res6) // >>> false } func ExampleClient_sinter() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } _, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result() if err != nil { panic(err) } res7, err := rdb.SInter(ctx, "bikes:racing:france", "bikes:racing:usa").Result() if err != nil { panic(err) } fmt.Println(res7) // >>> [bike:1] } func ExampleClient_scard() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } res8, err := rdb.SCard(ctx, "bikes:racing:france").Result() if err != nil { panic(err) } fmt.Println(res8) // >>> 3 } func ExampleClient_saddsmembers() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res9, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res9) // >>> 3 res10, err := rdb.SMembers(ctx, "bikes:racing:france").Result() if err != nil { panic(err) } // Sort the strings in the slice to make sure the output is lexicographical sort.Strings(res10) fmt.Println(res10) // >>> [bike:1 bike:2 bike:3] } func ExampleClient_smismember() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } res11, err := rdb.SIsMember(ctx, "bikes:racing:france", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res11) // >>> true res12, err := rdb.SMIsMember(ctx, "bikes:racing:france", "bike:2", "bike:3", "bike:4").Result() if err != nil { panic(err) } fmt.Println(res12) // >>> [true true false] } func ExampleClient_sdiff() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } _, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result() res13, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa").Result() if err != nil { panic(err) } // Sort the strings in the slice to make sure the output is lexicographical sort.Strings(res13) fmt.Println(res13) // >>> [bike:2 bike:3] } func ExampleClient_multisets() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } _, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result() if err != nil { panic(err) } _, err = rdb.SAdd(ctx, "bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4").Result() if err != nil { panic(err) } res14, err := rdb.SInter(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result() if err != nil { panic(err) } fmt.Println(res14) // >>> [bike:1] res15, err := rdb.SUnion(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result() if err != nil { panic(err) } // Sort the strings in the slice to make sure the output is lexicographical sort.Strings(res15) fmt.Println(res15) // >>> [bike:1 bike:2 bike:3 bike:4] res16, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result() if err != nil { panic(err) } fmt.Println(res16) // >>> [] res17, err := rdb.SDiff(ctx, "bikes:racing:usa", "bikes:racing:france").Result() if err != nil { panic(err) } fmt.Println(res17) // >>> [bike:4] res18, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa").Result() if err != nil { panic(err) } // Sort the strings in the slice to make sure the output is lexicographical sort.Strings(res18) fmt.Println(res18) // >>> [bike:2 bike:3] } func ExampleClient_srem() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result() if err != nil { panic(err) } res19, err := rdb.SRem(ctx, "bikes:racing:france", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res19) // >>> 1 res20, err := rdb.SPop(ctx, "bikes:racing:france").Result() if err != nil { panic(err) } fmt.Println(res20) // >>> <random element> res21, err := rdb.SMembers(ctx, "bikes:racing:france").Result() if err != nil { panic(err) } fmt.Println(res21) // >>> <remaining elements> res22, err := rdb.SRandMember(ctx, "bikes:racing:france").Result() if err != nil { panic(err) } fmt.Println(res22) // >>> <random element> // Testable examples not available because the test output // is not deterministic. }
using System.Data.Common; using NRedisStack.Tests; using StackExchange.Redis; public class SetsExample { public void run() { var muxer = ConnectionMultiplexer.Connect("localhost:6379"); var db = muxer.GetDatabase(); long res1 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1" }); Console.WriteLine(res1); // >>> 1 long res2 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1" }); Console.WriteLine(res2); // >>> 0 long res3 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:2", "bike:3" }); Console.WriteLine(res3); // >>> 2 long res4 = db.SetAdd("bikes:racing:usa", new RedisValue[] { "bike:1", "bike:4" }); Console.WriteLine(res4); // >>> 2 // Tests for 'sadd' step. bool res5 = db.SetContains("bikes:racing:france", "bike:1"); Console.WriteLine(res5); // >>> True bool res6 = db.SetContains("bikes:racing:usa", "bike:2"); Console.WriteLine(res6); // >>> False // Tests for 'sismember' step. long res7 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" }); long res8 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" }); RedisValue[] res9 = db.SetCombine(SetOperation.Intersect, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" }); Console.WriteLine(string.Join(", ", res9)); // >>> bike:1 // Tests for 'sinter' step. long res10 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" }); long res11 = db.SetLength("bikes:racing:france"); Console.WriteLine(res11); // >>> 3 // Tests for 'scard' step. long res12 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" }); RedisValue[] res13 = db.SetMembers("bikes:racing:france"); Console.WriteLine(string.Join(", ", res13)); // >>> bike:3, bike:2, bike:1 // Tests for 'sadd_smembers' step. bool res14 = db.SetContains("bikes:racing:france", "bike:1"); Console.WriteLine(res14); // >>> true bool[] res15 = db.SetContains("bikes:racing:france", new RedisValue[] { "bike:2", "bike:3", "bike:4" }); Console.WriteLine(string.Join(", ", res15)); // >>> True, True, False // Tests for 'smismember' step. long res16 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" }); long res17 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" }); RedisValue[] res18 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" }); Console.WriteLine(string.Join(", ", res18)); // >>> bike:2, bike:3 // Tests for 'sdiff' step. long res19 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" }); long res20 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" }); long res21 = db.SetAdd("{bikes:racing}:italy", new RedisValue[] { "bike:1", "bike:2", "bike:3", "bike:4" }); RedisValue[] res22 = db.SetCombine(SetOperation.Intersect, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" }); Console.WriteLine(string.Join(", ", res22)); // >>> bike:1 RedisValue[] res23 = db.SetCombine(SetOperation.Union, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" }); Console.WriteLine(string.Join(", ", res23)); // >>> bike:1, bike:2, bike:3, bike:4 RedisValue[] res24 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" }); Console.WriteLine(string.Join(", ", res24)); // >>> <empty set> RedisValue[] res25 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:usa", "{bikes:racing}:france" }); Console.WriteLine(string.Join(", ", res25)); // >>> bike:4 RedisValue[] res26 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" }); Console.WriteLine(string.Join(", ", res26)); // >>> bike:2, bike:3 // Tests for 'multisets' step. long res27 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3", "bike:4", "bike:5" }); bool res28 = db.SetRemove("bikes:racing:france", "bike:1"); Console.WriteLine(res28); // >>> True RedisValue res29 = db.SetPop("bikes:racing:france"); Console.WriteLine(res29); // >>> bike:3 RedisValue[] res30 = db.SetMembers("bikes:racing:france"); Console.WriteLine(string.Join(", ", res30)); // >>> bike:2, bike:4, bike:5 RedisValue res31 = db.SetRandomMember("bikes:racing:france"); Console.WriteLine(res31); // >>> bike:4 // Tests for 'srem' step. } }
-
检查 bike:1 或 bike:2 是否在美国比赛。
> SISMEMBER bikes:racing:usa bike:1 (integer) 1 > SISMEMBER bikes:racing:usa bike:2 (integer) 0
厌倦了使用 redis-cli?试试 Redis Insight - 适用于 Redis 的开发者 GUI。""" Code samples for Set doc pages: https://redis.ac.cn/docs/latest/develop/data-types/sets/ """ import redis r = redis.Redis(decode_responses=True) res1 = r.sadd("bikes:racing:france", "bike:1") print(res1) # >>> 1 res2 = r.sadd("bikes:racing:france", "bike:1") print(res2) # >>> 0 res3 = r.sadd("bikes:racing:france", "bike:2", "bike:3") print(res3) # >>> 2 res4 = r.sadd("bikes:racing:usa", "bike:1", "bike:4") print(res4) # >>> 2 r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") r.sadd("bikes:racing:usa", "bike:1", "bike:4") res5 = r.sismember("bikes:racing:usa", "bike:1") print(res5) # >>> 1 res6 = r.sismember("bikes:racing:usa", "bike:2") print(res6) # >>> 0 r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") r.sadd("bikes:racing:usa", "bike:1", "bike:4") res7 = r.sinter("bikes:racing:france", "bikes:racing:usa") print(res7) # >>> {'bike:1'} r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") res8 = r.scard("bikes:racing:france") print(res8) # >>> 3 res9 = r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") print(res9) # >>> 3 res10 = r.smembers("bikes:racing:france") print(res10) # >>> {'bike:1', 'bike:2', 'bike:3'} res11 = r.sismember("bikes:racing:france", "bike:1") print(res11) # >>> 1 res12 = r.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4") print(res12) # >>> [1, 1, 0] r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") r.sadd("bikes:racing:usa", "bike:1", "bike:4") res13 = r.sdiff("bikes:racing:france", "bikes:racing:usa") print(res13) # >>> {'bike:2', 'bike:3'} r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") r.sadd("bikes:racing:usa", "bike:1", "bike:4") r.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4") res13 = r.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy") print(res13) # >>> {'bike:1'} res14 = r.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy") print(res14) # >>> {'bike:1', 'bike:2', 'bike:3', 'bike:4'} res15 = r.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy") print(res15) # >>> {} res16 = r.sdiff("bikes:racing:usa", "bikes:racing:france") print(res16) # >>> {'bike:4'} res17 = r.sdiff("bikes:racing:france", "bikes:racing:usa") print(res17) # >>> {'bike:2', 'bike:3'} r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5") res18 = r.srem("bikes:racing:france", "bike:1") print(res18) # >>> 1 res19 = r.spop("bikes:racing:france") print(res19) # >>> bike:3 res20 = r.smembers("bikes:racing:france") print(res20) # >>> {'bike:2', 'bike:4', 'bike:5'} res21 = r.srandmember("bikes:racing:france") print(res21) # >>> bike:4
import assert from 'assert'; import { createClient } from 'redis'; const client = await createClient(); await client.connect(); const res1 = await client.sAdd('bikes:racing:france', 'bike:1') console.log(res1) // >>> 1 const res2 = await client.sAdd('bikes:racing:france', 'bike:1') console.log(res2) // >>> 0 const res3 = await client.sAdd('bikes:racing:france', ['bike:2', 'bike:3']) console.log(res3) // >>> 2 const res4 = await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4']) console.log(res4) // >>> 2 await client.del('bikes:racing:france') await client.del('bikes:racing:usa') await client.sAdd('bikes:racing:france', 'bike:1', 'bike:2', 'bike:3') await client.sAdd('bikes:racing:usa', 'bike:1', 'bike:4') const res5 = await client.sIsMember('bikes:racing:usa', 'bike:1') console.log(res5) // >>> true const res6 = await client.sIsMember('bikes:racing:usa', 'bike:2') console.log(res6) // >>> false await client.del('bikes:racing:france') await client.del('bikes:racing:usa') await client.sAdd('bikes:racing:france', 'bike:1', 'bike:2', 'bike:3') await client.sAdd('bikes:racing:usa', 'bike:1', 'bike:4') const res7 = await client.sInter('bikes:racing:france', 'bikes:racing:usa') console.log(res7) // >>> {'bike:1'} await client.del('bikes:racing:france') await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3']) const res8 = await client.sCard('bikes:racing:france') console.log(res8) // >>> 3 const res9 = await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3']) console.log(res9) // >>> 3 const res10 = await client.sMembers('bikes:racing:france') console.log(res10) // >>> ['bike:1', 'bike:2', 'bike:3'] const res11 = await client.sIsMember('bikes:racing:france', 'bike:1') console.log(res11) // >>> true const res12 = await client.smIsMember('bikes:racing:france', ['bike:2', 'bike:3', 'bike:4']) console.log(res12) // >>> [true, true, false] await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3']) await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4']) const res13 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa']) console.log(res13) // >>> [ 'bike:2', 'bike:3' ] await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3']) await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4']) await client.sAdd('bikes:racing:italy', ['bike:1', 'bike:2', 'bike:3', 'bike:4']) const res14 = await client.sInter( ['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy'] ) console.log(res14) // >>> ['bike:1'] const res15 = await client.sUnion( ['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy'] ) console.log(res15) // >>> ['bike:1', 'bike:2', 'bike:3', 'bike:4'] const res16 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy']) console.log(res16) // >>> [] const res17 = await client.sDiff(['bikes:racing:usa', 'bikes:racing:france']) console.log(res17) // >>> ['bike:4'] const res18 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa']) console.log(res18) // >>> ['bike:2', 'bike:3'] debugger; await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5']) const res19 = await client.sRem('bikes:racing:france', 'bike:1') console.log(res19) // >>> 1 const res20 = await client.sPop('bikes:racing:france') console.log(res20) // >>> bike:3 or other random value const res21 = await client.sMembers('bikes:racing:france') console.log(res21) // >>> ['bike:2', 'bike:4', 'bike:5']; depends on previous result const res22 = await client.sRandMember('bikes:racing:france') console.log(res22) // >>> bike:4 or other random value
package io.redis.examples; import redis.clients.jedis.UnifiedJedis; import org.junit.jupiter.api.Test; import java.util.List; import java.util.Set; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertEquals; public class SetsExample { public void run() { UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379"); long res1 = jedis.sadd("bikes:racing:france", "bike:1"); System.out.println(res1); // >>> 1 long res2 = jedis.sadd("bikes:racing:france", "bike:1"); System.out.println(res2); // >>> 0 long res3 = jedis.sadd("bikes:racing:france", "bike:2", "bike:3"); System.out.println(res3); // >>> 2 long res4 = jedis.sadd("bikes:racing:usa", "bike:1", "bike:4"); System.out.println(res4); // >>> 2 jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); jedis.sadd("bikes:racing:usa", "bike:1", "bike:4"); boolean res5 = jedis.sismember("bikes:racing:usa", "bike:1"); System.out.println(res5); // >>> true boolean res6 = jedis.sismember("bikes:racing:usa", "bike:2"); System.out.println(res6); // >>> false jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); jedis.sadd("bikes:racing:usa", "bike:1", "bike:4"); Set<String> res7 = jedis.sinter("bikes:racing:france", "bikes:racing:usa"); System.out.println(res7); // >>> [bike:1] jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); long res8 = jedis.scard("bikes:racing:france"); System.out.println(res8); // >>> 3 long res9 = jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); System.out.println(res9); // >>> 3 Set<String> res10 = jedis.smembers("bikes:racing:france"); System.out.println(res10); // >>> [bike:1, bike:2, bike:3] boolean res11 = jedis.sismember("bikes:racing:france", "bike:1"); System.out.println(res11); // >>> true List<Boolean> res12 = jedis.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4"); System.out.println(res12); // >>> [true,true,false] jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); jedis.sadd("bikes:racing:usa", "bike:1", "bike:4"); Set<String> res13 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa"); System.out.println(res13); // >>> [bike:2, bike:3] jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); jedis.sadd("bikes:racing:usa", "bike:1", "bike:4"); jedis.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4"); Set<String> res14 = jedis.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); System.out.println(res14); // >>> [bike:1] Set<String> res15 = jedis.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); System.out.println(res15); // >>> [bike:1, bike:2, bike:3, bike:4] Set<String> res16 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); System.out.println(res16); // >>> [] Set<String> res17 = jedis.sdiff("bikes:racing:usa", "bikes:racing:france"); System.out.println(res17); // >>> [bike:4] Set<String> res18 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa"); System.out.println(res18); // >>> [bike:2, bike:3] jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); long res19 = jedis.srem("bikes:racing:france", "bike:1"); System.out.println(res18); // >>> 1 String res20 = jedis.spop("bikes:racing:france"); System.out.println(res20); // >>> bike:3 Set<String> res21 = jedis.smembers("bikes:racing:france"); System.out.println(res21); // >>> [bike:2, bike:4, bike:5] String res22 = jedis.srandmember("bikes:racing:france"); System.out.println(res22); // >>> bike:4 jedis.close(); } }
package io.redis.examples.async; import io.lettuce.core.*; import io.lettuce.core.api.async.RedisAsyncCommands; import io.lettuce.core.api.StatefulRedisConnection; import java.util.*; import static java.util.stream.Collectors.*; import java.util.concurrent.CompletableFuture; public class SetExample { public void run() { RedisClient redisClient = RedisClient.create("redis://localhost:6379"); try (StatefulRedisConnection<String, String> connection = redisClient.connect()) { RedisAsyncCommands<String, String> asyncCommands = connection.async(); CompletableFuture<Void> sAdd = asyncCommands.sadd("bikes:racing:france", "bike:1").thenCompose(res1 -> { System.out.println(res1); // >>> 1 return asyncCommands.sadd("bikes:racing:france", "bike:1"); }).thenCompose(res2 -> { System.out.println(res2); // >>> 0 return asyncCommands.sadd("bikes:racing:france", "bike:2", "bike:3"); }).thenCompose(res3 -> { System.out.println(res3); // >>> 2 return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4"); }) .thenAccept(System.out::println) // >>> 2 .toCompletableFuture(); CompletableFuture<Void> sIsMember = sAdd.thenCompose(r -> { return asyncCommands.sismember("bikes:racing:usa", "bike:1"); }).thenCompose(res4 -> { System.out.println(res4); // >>> true return asyncCommands.sismember("bikes:racing:usa", "bike:2"); }) .thenAccept(System.out::println) // >>> false .toCompletableFuture(); CompletableFuture<Void> sInter = sIsMember.thenCompose(r -> { return asyncCommands.sinter("bikes:racing:france", "bikes:racing:usa"); }) .thenAccept(System.out::println) // >>> ["bike:1"] .toCompletableFuture(); CompletableFuture<Void> sCard = sInter.thenCompose(r -> { return asyncCommands.scard("bikes:racing:france"); }) .thenAccept(System.out::println) // >>> 3 .toCompletableFuture(); CompletableFuture<Void> sAddSMembers = sCard.thenCompose(r -> { return asyncCommands.del("bikes:racing:france"); }).thenCompose(r -> { return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); }).thenCompose(res5 -> { System.out.println(res5); // >>> 3 return asyncCommands.smembers("bikes:racing:france"); }) .thenAccept(System.out::println) // >>> [bike:1, bike:2, bike:3] .toCompletableFuture(); CompletableFuture<Void> sMIsMember = sAddSMembers.thenCompose(r -> { return asyncCommands.sismember("bikes:racing:france", "bike:1"); }).thenCompose(res6 -> { System.out.println(res6); // >>> True return asyncCommands.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4"); }) .thenAccept(System.out::println) // >>> [true, true, false] .toCompletableFuture(); CompletableFuture<Void> sDiff = sMIsMember.thenCompose(r -> { return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); }).thenCompose(r -> { return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4"); }).thenCompose(r -> { return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa"); }) .thenAccept(System.out::println) // >>> [bike:2, bike:3] .toCompletableFuture(); CompletableFuture<Void> multisets = sDiff.thenCompose(r -> { return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); }).thenCompose(r -> { return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4"); }).thenCompose(r -> { return asyncCommands.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4"); }).thenCompose(r -> { return asyncCommands.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); }).thenCompose(res7 -> { System.out.println(res7); // >>> [bike:1] return asyncCommands.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); }).thenCompose(res8 -> { System.out.println(res8); // >>> [bike:1, bike:2, bike:3, bike:4] return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); }).thenCompose(res9 -> { System.out.println(res9); // >>> [] return asyncCommands.sdiff("bikes:racing:usa", "bikes:racing:france"); }).thenCompose(res10 -> { System.out.println(res10); // >>> [bike:4] return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa"); }) .thenAccept(System.out::println) // >>> [bike:2, bike:3] .toCompletableFuture(); CompletableFuture<Void> sRem = multisets.thenCompose(r -> { return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); }).thenCompose(r -> { return asyncCommands.srem("bikes:racing:france", "bike:1"); }).thenCompose(res11 -> { System.out.println(res11); // >>> 1 return asyncCommands.spop("bikes:racing:france"); }).thenCompose(res12 -> { System.out.println(res12); // >>> bike:3 (for example) return asyncCommands.smembers("bikes:racing:france"); }).thenCompose(res13 -> { System.out.println(res13); // >>> [bike:2, bike:4, bike:5] return asyncCommands.srandmember("bikes:racing:france"); }).thenAccept(System.out::println) // >>> bike:4 .toCompletableFuture(); CompletableFuture.allOf( sRem).join(); } finally { redisClient.shutdown(); } } }
package example_commands_test import ( "context" "fmt" "sort" "github.com/redis/go-redis/v9" ) func ExampleClient_sadd() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res1, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res1) // >>> 1 res2, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res2) // >>> 0 res3, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res3) // >>> 2 res4, err := rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result() if err != nil { panic(err) } fmt.Println(res4) // >>> 2 } func ExampleClient_sismember() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } _, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result() if err != nil { panic(err) } res5, err := rdb.SIsMember(ctx, "bikes:racing:usa", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res5) // >>> true res6, err := rdb.SIsMember(ctx, "bikes:racing:usa", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res6) // >>> false } func ExampleClient_sinter() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } _, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result() if err != nil { panic(err) } res7, err := rdb.SInter(ctx, "bikes:racing:france", "bikes:racing:usa").Result() if err != nil { panic(err) } fmt.Println(res7) // >>> [bike:1] } func ExampleClient_scard() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } res8, err := rdb.SCard(ctx, "bikes:racing:france").Result() if err != nil { panic(err) } fmt.Println(res8) // >>> 3 } func ExampleClient_saddsmembers() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res9, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res9) // >>> 3 res10, err := rdb.SMembers(ctx, "bikes:racing:france").Result() if err != nil { panic(err) } // Sort the strings in the slice to make sure the output is lexicographical sort.Strings(res10) fmt.Println(res10) // >>> [bike:1 bike:2 bike:3] } func ExampleClient_smismember() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } res11, err := rdb.SIsMember(ctx, "bikes:racing:france", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res11) // >>> true res12, err := rdb.SMIsMember(ctx, "bikes:racing:france", "bike:2", "bike:3", "bike:4").Result() if err != nil { panic(err) } fmt.Println(res12) // >>> [true true false] } func ExampleClient_sdiff() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } _, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result() res13, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa").Result() if err != nil { panic(err) } // Sort the strings in the slice to make sure the output is lexicographical sort.Strings(res13) fmt.Println(res13) // >>> [bike:2 bike:3] } func ExampleClient_multisets() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } _, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result() if err != nil { panic(err) } _, err = rdb.SAdd(ctx, "bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4").Result() if err != nil { panic(err) } res14, err := rdb.SInter(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result() if err != nil { panic(err) } fmt.Println(res14) // >>> [bike:1] res15, err := rdb.SUnion(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result() if err != nil { panic(err) } // Sort the strings in the slice to make sure the output is lexicographical sort.Strings(res15) fmt.Println(res15) // >>> [bike:1 bike:2 bike:3 bike:4] res16, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result() if err != nil { panic(err) } fmt.Println(res16) // >>> [] res17, err := rdb.SDiff(ctx, "bikes:racing:usa", "bikes:racing:france").Result() if err != nil { panic(err) } fmt.Println(res17) // >>> [bike:4] res18, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa").Result() if err != nil { panic(err) } // Sort the strings in the slice to make sure the output is lexicographical sort.Strings(res18) fmt.Println(res18) // >>> [bike:2 bike:3] } func ExampleClient_srem() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result() if err != nil { panic(err) } res19, err := rdb.SRem(ctx, "bikes:racing:france", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res19) // >>> 1 res20, err := rdb.SPop(ctx, "bikes:racing:france").Result() if err != nil { panic(err) } fmt.Println(res20) // >>> <random element> res21, err := rdb.SMembers(ctx, "bikes:racing:france").Result() if err != nil { panic(err) } fmt.Println(res21) // >>> <remaining elements> res22, err := rdb.SRandMember(ctx, "bikes:racing:france").Result() if err != nil { panic(err) } fmt.Println(res22) // >>> <random element> // Testable examples not available because the test output // is not deterministic. }
using System.Data.Common; using NRedisStack.Tests; using StackExchange.Redis; public class SetsExample { public void run() { var muxer = ConnectionMultiplexer.Connect("localhost:6379"); var db = muxer.GetDatabase(); long res1 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1" }); Console.WriteLine(res1); // >>> 1 long res2 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1" }); Console.WriteLine(res2); // >>> 0 long res3 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:2", "bike:3" }); Console.WriteLine(res3); // >>> 2 long res4 = db.SetAdd("bikes:racing:usa", new RedisValue[] { "bike:1", "bike:4" }); Console.WriteLine(res4); // >>> 2 // Tests for 'sadd' step. bool res5 = db.SetContains("bikes:racing:france", "bike:1"); Console.WriteLine(res5); // >>> True bool res6 = db.SetContains("bikes:racing:usa", "bike:2"); Console.WriteLine(res6); // >>> False // Tests for 'sismember' step. long res7 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" }); long res8 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" }); RedisValue[] res9 = db.SetCombine(SetOperation.Intersect, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" }); Console.WriteLine(string.Join(", ", res9)); // >>> bike:1 // Tests for 'sinter' step. long res10 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" }); long res11 = db.SetLength("bikes:racing:france"); Console.WriteLine(res11); // >>> 3 // Tests for 'scard' step. long res12 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" }); RedisValue[] res13 = db.SetMembers("bikes:racing:france"); Console.WriteLine(string.Join(", ", res13)); // >>> bike:3, bike:2, bike:1 // Tests for 'sadd_smembers' step. bool res14 = db.SetContains("bikes:racing:france", "bike:1"); Console.WriteLine(res14); // >>> true bool[] res15 = db.SetContains("bikes:racing:france", new RedisValue[] { "bike:2", "bike:3", "bike:4" }); Console.WriteLine(string.Join(", ", res15)); // >>> True, True, False // Tests for 'smismember' step. long res16 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" }); long res17 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" }); RedisValue[] res18 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" }); Console.WriteLine(string.Join(", ", res18)); // >>> bike:2, bike:3 // Tests for 'sdiff' step. long res19 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" }); long res20 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" }); long res21 = db.SetAdd("{bikes:racing}:italy", new RedisValue[] { "bike:1", "bike:2", "bike:3", "bike:4" }); RedisValue[] res22 = db.SetCombine(SetOperation.Intersect, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" }); Console.WriteLine(string.Join(", ", res22)); // >>> bike:1 RedisValue[] res23 = db.SetCombine(SetOperation.Union, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" }); Console.WriteLine(string.Join(", ", res23)); // >>> bike:1, bike:2, bike:3, bike:4 RedisValue[] res24 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" }); Console.WriteLine(string.Join(", ", res24)); // >>> <empty set> RedisValue[] res25 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:usa", "{bikes:racing}:france" }); Console.WriteLine(string.Join(", ", res25)); // >>> bike:4 RedisValue[] res26 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" }); Console.WriteLine(string.Join(", ", res26)); // >>> bike:2, bike:3 // Tests for 'multisets' step. long res27 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3", "bike:4", "bike:5" }); bool res28 = db.SetRemove("bikes:racing:france", "bike:1"); Console.WriteLine(res28); // >>> True RedisValue res29 = db.SetPop("bikes:racing:france"); Console.WriteLine(res29); // >>> bike:3 RedisValue[] res30 = db.SetMembers("bikes:racing:france"); Console.WriteLine(string.Join(", ", res30)); // >>> bike:2, bike:4, bike:5 RedisValue res31 = db.SetRandomMember("bikes:racing:france"); Console.WriteLine(res31); // >>> bike:4 // Tests for 'srem' step. } }
-
哪些自行车在两场比赛中都参赛?
> SINTER bikes:racing:france bikes:racing:usa 1) "bike:1"
厌倦了使用 redis-cli?试试 Redis Insight - 适用于 Redis 的开发者 GUI。""" Code samples for Set doc pages: https://redis.ac.cn/docs/latest/develop/data-types/sets/ """ import redis r = redis.Redis(decode_responses=True) res1 = r.sadd("bikes:racing:france", "bike:1") print(res1) # >>> 1 res2 = r.sadd("bikes:racing:france", "bike:1") print(res2) # >>> 0 res3 = r.sadd("bikes:racing:france", "bike:2", "bike:3") print(res3) # >>> 2 res4 = r.sadd("bikes:racing:usa", "bike:1", "bike:4") print(res4) # >>> 2 r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") r.sadd("bikes:racing:usa", "bike:1", "bike:4") res5 = r.sismember("bikes:racing:usa", "bike:1") print(res5) # >>> 1 res6 = r.sismember("bikes:racing:usa", "bike:2") print(res6) # >>> 0 r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") r.sadd("bikes:racing:usa", "bike:1", "bike:4") res7 = r.sinter("bikes:racing:france", "bikes:racing:usa") print(res7) # >>> {'bike:1'} r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") res8 = r.scard("bikes:racing:france") print(res8) # >>> 3 res9 = r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") print(res9) # >>> 3 res10 = r.smembers("bikes:racing:france") print(res10) # >>> {'bike:1', 'bike:2', 'bike:3'} res11 = r.sismember("bikes:racing:france", "bike:1") print(res11) # >>> 1 res12 = r.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4") print(res12) # >>> [1, 1, 0] r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") r.sadd("bikes:racing:usa", "bike:1", "bike:4") res13 = r.sdiff("bikes:racing:france", "bikes:racing:usa") print(res13) # >>> {'bike:2', 'bike:3'} r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") r.sadd("bikes:racing:usa", "bike:1", "bike:4") r.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4") res13 = r.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy") print(res13) # >>> {'bike:1'} res14 = r.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy") print(res14) # >>> {'bike:1', 'bike:2', 'bike:3', 'bike:4'} res15 = r.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy") print(res15) # >>> {} res16 = r.sdiff("bikes:racing:usa", "bikes:racing:france") print(res16) # >>> {'bike:4'} res17 = r.sdiff("bikes:racing:france", "bikes:racing:usa") print(res17) # >>> {'bike:2', 'bike:3'} r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5") res18 = r.srem("bikes:racing:france", "bike:1") print(res18) # >>> 1 res19 = r.spop("bikes:racing:france") print(res19) # >>> bike:3 res20 = r.smembers("bikes:racing:france") print(res20) # >>> {'bike:2', 'bike:4', 'bike:5'} res21 = r.srandmember("bikes:racing:france") print(res21) # >>> bike:4
import assert from 'assert'; import { createClient } from 'redis'; const client = await createClient(); await client.connect(); const res1 = await client.sAdd('bikes:racing:france', 'bike:1') console.log(res1) // >>> 1 const res2 = await client.sAdd('bikes:racing:france', 'bike:1') console.log(res2) // >>> 0 const res3 = await client.sAdd('bikes:racing:france', ['bike:2', 'bike:3']) console.log(res3) // >>> 2 const res4 = await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4']) console.log(res4) // >>> 2 await client.del('bikes:racing:france') await client.del('bikes:racing:usa') await client.sAdd('bikes:racing:france', 'bike:1', 'bike:2', 'bike:3') await client.sAdd('bikes:racing:usa', 'bike:1', 'bike:4') const res5 = await client.sIsMember('bikes:racing:usa', 'bike:1') console.log(res5) // >>> true const res6 = await client.sIsMember('bikes:racing:usa', 'bike:2') console.log(res6) // >>> false await client.del('bikes:racing:france') await client.del('bikes:racing:usa') await client.sAdd('bikes:racing:france', 'bike:1', 'bike:2', 'bike:3') await client.sAdd('bikes:racing:usa', 'bike:1', 'bike:4') const res7 = await client.sInter('bikes:racing:france', 'bikes:racing:usa') console.log(res7) // >>> {'bike:1'} await client.del('bikes:racing:france') await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3']) const res8 = await client.sCard('bikes:racing:france') console.log(res8) // >>> 3 const res9 = await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3']) console.log(res9) // >>> 3 const res10 = await client.sMembers('bikes:racing:france') console.log(res10) // >>> ['bike:1', 'bike:2', 'bike:3'] const res11 = await client.sIsMember('bikes:racing:france', 'bike:1') console.log(res11) // >>> true const res12 = await client.smIsMember('bikes:racing:france', ['bike:2', 'bike:3', 'bike:4']) console.log(res12) // >>> [true, true, false] await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3']) await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4']) const res13 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa']) console.log(res13) // >>> [ 'bike:2', 'bike:3' ] await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3']) await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4']) await client.sAdd('bikes:racing:italy', ['bike:1', 'bike:2', 'bike:3', 'bike:4']) const res14 = await client.sInter( ['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy'] ) console.log(res14) // >>> ['bike:1'] const res15 = await client.sUnion( ['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy'] ) console.log(res15) // >>> ['bike:1', 'bike:2', 'bike:3', 'bike:4'] const res16 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy']) console.log(res16) // >>> [] const res17 = await client.sDiff(['bikes:racing:usa', 'bikes:racing:france']) console.log(res17) // >>> ['bike:4'] const res18 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa']) console.log(res18) // >>> ['bike:2', 'bike:3'] debugger; await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5']) const res19 = await client.sRem('bikes:racing:france', 'bike:1') console.log(res19) // >>> 1 const res20 = await client.sPop('bikes:racing:france') console.log(res20) // >>> bike:3 or other random value const res21 = await client.sMembers('bikes:racing:france') console.log(res21) // >>> ['bike:2', 'bike:4', 'bike:5']; depends on previous result const res22 = await client.sRandMember('bikes:racing:france') console.log(res22) // >>> bike:4 or other random value
package io.redis.examples; import redis.clients.jedis.UnifiedJedis; import org.junit.jupiter.api.Test; import java.util.List; import java.util.Set; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertEquals; public class SetsExample { public void run() { UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379"); long res1 = jedis.sadd("bikes:racing:france", "bike:1"); System.out.println(res1); // >>> 1 long res2 = jedis.sadd("bikes:racing:france", "bike:1"); System.out.println(res2); // >>> 0 long res3 = jedis.sadd("bikes:racing:france", "bike:2", "bike:3"); System.out.println(res3); // >>> 2 long res4 = jedis.sadd("bikes:racing:usa", "bike:1", "bike:4"); System.out.println(res4); // >>> 2 jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); jedis.sadd("bikes:racing:usa", "bike:1", "bike:4"); boolean res5 = jedis.sismember("bikes:racing:usa", "bike:1"); System.out.println(res5); // >>> true boolean res6 = jedis.sismember("bikes:racing:usa", "bike:2"); System.out.println(res6); // >>> false jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); jedis.sadd("bikes:racing:usa", "bike:1", "bike:4"); Set<String> res7 = jedis.sinter("bikes:racing:france", "bikes:racing:usa"); System.out.println(res7); // >>> [bike:1] jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); long res8 = jedis.scard("bikes:racing:france"); System.out.println(res8); // >>> 3 long res9 = jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); System.out.println(res9); // >>> 3 Set<String> res10 = jedis.smembers("bikes:racing:france"); System.out.println(res10); // >>> [bike:1, bike:2, bike:3] boolean res11 = jedis.sismember("bikes:racing:france", "bike:1"); System.out.println(res11); // >>> true List<Boolean> res12 = jedis.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4"); System.out.println(res12); // >>> [true,true,false] jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); jedis.sadd("bikes:racing:usa", "bike:1", "bike:4"); Set<String> res13 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa"); System.out.println(res13); // >>> [bike:2, bike:3] jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); jedis.sadd("bikes:racing:usa", "bike:1", "bike:4"); jedis.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4"); Set<String> res14 = jedis.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); System.out.println(res14); // >>> [bike:1] Set<String> res15 = jedis.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); System.out.println(res15); // >>> [bike:1, bike:2, bike:3, bike:4] Set<String> res16 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); System.out.println(res16); // >>> [] Set<String> res17 = jedis.sdiff("bikes:racing:usa", "bikes:racing:france"); System.out.println(res17); // >>> [bike:4] Set<String> res18 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa"); System.out.println(res18); // >>> [bike:2, bike:3] jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); long res19 = jedis.srem("bikes:racing:france", "bike:1"); System.out.println(res18); // >>> 1 String res20 = jedis.spop("bikes:racing:france"); System.out.println(res20); // >>> bike:3 Set<String> res21 = jedis.smembers("bikes:racing:france"); System.out.println(res21); // >>> [bike:2, bike:4, bike:5] String res22 = jedis.srandmember("bikes:racing:france"); System.out.println(res22); // >>> bike:4 jedis.close(); } }
package io.redis.examples.async; import io.lettuce.core.*; import io.lettuce.core.api.async.RedisAsyncCommands; import io.lettuce.core.api.StatefulRedisConnection; import java.util.*; import static java.util.stream.Collectors.*; import java.util.concurrent.CompletableFuture; public class SetExample { public void run() { RedisClient redisClient = RedisClient.create("redis://localhost:6379"); try (StatefulRedisConnection<String, String> connection = redisClient.connect()) { RedisAsyncCommands<String, String> asyncCommands = connection.async(); CompletableFuture<Void> sAdd = asyncCommands.sadd("bikes:racing:france", "bike:1").thenCompose(res1 -> { System.out.println(res1); // >>> 1 return asyncCommands.sadd("bikes:racing:france", "bike:1"); }).thenCompose(res2 -> { System.out.println(res2); // >>> 0 return asyncCommands.sadd("bikes:racing:france", "bike:2", "bike:3"); }).thenCompose(res3 -> { System.out.println(res3); // >>> 2 return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4"); }) .thenAccept(System.out::println) // >>> 2 .toCompletableFuture(); CompletableFuture<Void> sIsMember = sAdd.thenCompose(r -> { return asyncCommands.sismember("bikes:racing:usa", "bike:1"); }).thenCompose(res4 -> { System.out.println(res4); // >>> true return asyncCommands.sismember("bikes:racing:usa", "bike:2"); }) .thenAccept(System.out::println) // >>> false .toCompletableFuture(); CompletableFuture<Void> sInter = sIsMember.thenCompose(r -> { return asyncCommands.sinter("bikes:racing:france", "bikes:racing:usa"); }) .thenAccept(System.out::println) // >>> ["bike:1"] .toCompletableFuture(); CompletableFuture<Void> sCard = sInter.thenCompose(r -> { return asyncCommands.scard("bikes:racing:france"); }) .thenAccept(System.out::println) // >>> 3 .toCompletableFuture(); CompletableFuture<Void> sAddSMembers = sCard.thenCompose(r -> { return asyncCommands.del("bikes:racing:france"); }).thenCompose(r -> { return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); }).thenCompose(res5 -> { System.out.println(res5); // >>> 3 return asyncCommands.smembers("bikes:racing:france"); }) .thenAccept(System.out::println) // >>> [bike:1, bike:2, bike:3] .toCompletableFuture(); CompletableFuture<Void> sMIsMember = sAddSMembers.thenCompose(r -> { return asyncCommands.sismember("bikes:racing:france", "bike:1"); }).thenCompose(res6 -> { System.out.println(res6); // >>> True return asyncCommands.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4"); }) .thenAccept(System.out::println) // >>> [true, true, false] .toCompletableFuture(); CompletableFuture<Void> sDiff = sMIsMember.thenCompose(r -> { return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); }).thenCompose(r -> { return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4"); }).thenCompose(r -> { return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa"); }) .thenAccept(System.out::println) // >>> [bike:2, bike:3] .toCompletableFuture(); CompletableFuture<Void> multisets = sDiff.thenCompose(r -> { return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); }).thenCompose(r -> { return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4"); }).thenCompose(r -> { return asyncCommands.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4"); }).thenCompose(r -> { return asyncCommands.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); }).thenCompose(res7 -> { System.out.println(res7); // >>> [bike:1] return asyncCommands.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); }).thenCompose(res8 -> { System.out.println(res8); // >>> [bike:1, bike:2, bike:3, bike:4] return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); }).thenCompose(res9 -> { System.out.println(res9); // >>> [] return asyncCommands.sdiff("bikes:racing:usa", "bikes:racing:france"); }).thenCompose(res10 -> { System.out.println(res10); // >>> [bike:4] return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa"); }) .thenAccept(System.out::println) // >>> [bike:2, bike:3] .toCompletableFuture(); CompletableFuture<Void> sRem = multisets.thenCompose(r -> { return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); }).thenCompose(r -> { return asyncCommands.srem("bikes:racing:france", "bike:1"); }).thenCompose(res11 -> { System.out.println(res11); // >>> 1 return asyncCommands.spop("bikes:racing:france"); }).thenCompose(res12 -> { System.out.println(res12); // >>> bike:3 (for example) return asyncCommands.smembers("bikes:racing:france"); }).thenCompose(res13 -> { System.out.println(res13); // >>> [bike:2, bike:4, bike:5] return asyncCommands.srandmember("bikes:racing:france"); }).thenAccept(System.out::println) // >>> bike:4 .toCompletableFuture(); CompletableFuture.allOf( sRem).join(); } finally { redisClient.shutdown(); } } }
package example_commands_test import ( "context" "fmt" "sort" "github.com/redis/go-redis/v9" ) func ExampleClient_sadd() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res1, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res1) // >>> 1 res2, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res2) // >>> 0 res3, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res3) // >>> 2 res4, err := rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result() if err != nil { panic(err) } fmt.Println(res4) // >>> 2 } func ExampleClient_sismember() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } _, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result() if err != nil { panic(err) } res5, err := rdb.SIsMember(ctx, "bikes:racing:usa", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res5) // >>> true res6, err := rdb.SIsMember(ctx, "bikes:racing:usa", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res6) // >>> false } func ExampleClient_sinter() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } _, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result() if err != nil { panic(err) } res7, err := rdb.SInter(ctx, "bikes:racing:france", "bikes:racing:usa").Result() if err != nil { panic(err) } fmt.Println(res7) // >>> [bike:1] } func ExampleClient_scard() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } res8, err := rdb.SCard(ctx, "bikes:racing:france").Result() if err != nil { panic(err) } fmt.Println(res8) // >>> 3 } func ExampleClient_saddsmembers() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res9, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res9) // >>> 3 res10, err := rdb.SMembers(ctx, "bikes:racing:france").Result() if err != nil { panic(err) } // Sort the strings in the slice to make sure the output is lexicographical sort.Strings(res10) fmt.Println(res10) // >>> [bike:1 bike:2 bike:3] } func ExampleClient_smismember() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } res11, err := rdb.SIsMember(ctx, "bikes:racing:france", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res11) // >>> true res12, err := rdb.SMIsMember(ctx, "bikes:racing:france", "bike:2", "bike:3", "bike:4").Result() if err != nil { panic(err) } fmt.Println(res12) // >>> [true true false] } func ExampleClient_sdiff() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } _, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result() res13, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa").Result() if err != nil { panic(err) } // Sort the strings in the slice to make sure the output is lexicographical sort.Strings(res13) fmt.Println(res13) // >>> [bike:2 bike:3] } func ExampleClient_multisets() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } _, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result() if err != nil { panic(err) } _, err = rdb.SAdd(ctx, "bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4").Result() if err != nil { panic(err) } res14, err := rdb.SInter(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result() if err != nil { panic(err) } fmt.Println(res14) // >>> [bike:1] res15, err := rdb.SUnion(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result() if err != nil { panic(err) } // Sort the strings in the slice to make sure the output is lexicographical sort.Strings(res15) fmt.Println(res15) // >>> [bike:1 bike:2 bike:3 bike:4] res16, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result() if err != nil { panic(err) } fmt.Println(res16) // >>> [] res17, err := rdb.SDiff(ctx, "bikes:racing:usa", "bikes:racing:france").Result() if err != nil { panic(err) } fmt.Println(res17) // >>> [bike:4] res18, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa").Result() if err != nil { panic(err) } // Sort the strings in the slice to make sure the output is lexicographical sort.Strings(res18) fmt.Println(res18) // >>> [bike:2 bike:3] } func ExampleClient_srem() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result() if err != nil { panic(err) } res19, err := rdb.SRem(ctx, "bikes:racing:france", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res19) // >>> 1 res20, err := rdb.SPop(ctx, "bikes:racing:france").Result() if err != nil { panic(err) } fmt.Println(res20) // >>> <random element> res21, err := rdb.SMembers(ctx, "bikes:racing:france").Result() if err != nil { panic(err) } fmt.Println(res21) // >>> <remaining elements> res22, err := rdb.SRandMember(ctx, "bikes:racing:france").Result() if err != nil { panic(err) } fmt.Println(res22) // >>> <random element> // Testable examples not available because the test output // is not deterministic. }
using System.Data.Common; using NRedisStack.Tests; using StackExchange.Redis; public class SetsExample { public void run() { var muxer = ConnectionMultiplexer.Connect("localhost:6379"); var db = muxer.GetDatabase(); long res1 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1" }); Console.WriteLine(res1); // >>> 1 long res2 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1" }); Console.WriteLine(res2); // >>> 0 long res3 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:2", "bike:3" }); Console.WriteLine(res3); // >>> 2 long res4 = db.SetAdd("bikes:racing:usa", new RedisValue[] { "bike:1", "bike:4" }); Console.WriteLine(res4); // >>> 2 // Tests for 'sadd' step. bool res5 = db.SetContains("bikes:racing:france", "bike:1"); Console.WriteLine(res5); // >>> True bool res6 = db.SetContains("bikes:racing:usa", "bike:2"); Console.WriteLine(res6); // >>> False // Tests for 'sismember' step. long res7 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" }); long res8 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" }); RedisValue[] res9 = db.SetCombine(SetOperation.Intersect, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" }); Console.WriteLine(string.Join(", ", res9)); // >>> bike:1 // Tests for 'sinter' step. long res10 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" }); long res11 = db.SetLength("bikes:racing:france"); Console.WriteLine(res11); // >>> 3 // Tests for 'scard' step. long res12 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" }); RedisValue[] res13 = db.SetMembers("bikes:racing:france"); Console.WriteLine(string.Join(", ", res13)); // >>> bike:3, bike:2, bike:1 // Tests for 'sadd_smembers' step. bool res14 = db.SetContains("bikes:racing:france", "bike:1"); Console.WriteLine(res14); // >>> true bool[] res15 = db.SetContains("bikes:racing:france", new RedisValue[] { "bike:2", "bike:3", "bike:4" }); Console.WriteLine(string.Join(", ", res15)); // >>> True, True, False // Tests for 'smismember' step. long res16 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" }); long res17 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" }); RedisValue[] res18 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" }); Console.WriteLine(string.Join(", ", res18)); // >>> bike:2, bike:3 // Tests for 'sdiff' step. long res19 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" }); long res20 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" }); long res21 = db.SetAdd("{bikes:racing}:italy", new RedisValue[] { "bike:1", "bike:2", "bike:3", "bike:4" }); RedisValue[] res22 = db.SetCombine(SetOperation.Intersect, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" }); Console.WriteLine(string.Join(", ", res22)); // >>> bike:1 RedisValue[] res23 = db.SetCombine(SetOperation.Union, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" }); Console.WriteLine(string.Join(", ", res23)); // >>> bike:1, bike:2, bike:3, bike:4 RedisValue[] res24 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" }); Console.WriteLine(string.Join(", ", res24)); // >>> <empty set> RedisValue[] res25 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:usa", "{bikes:racing}:france" }); Console.WriteLine(string.Join(", ", res25)); // >>> bike:4 RedisValue[] res26 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" }); Console.WriteLine(string.Join(", ", res26)); // >>> bike:2, bike:3 // Tests for 'multisets' step. long res27 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3", "bike:4", "bike:5" }); bool res28 = db.SetRemove("bikes:racing:france", "bike:1"); Console.WriteLine(res28); // >>> True RedisValue res29 = db.SetPop("bikes:racing:france"); Console.WriteLine(res29); // >>> bike:3 RedisValue[] res30 = db.SetMembers("bikes:racing:france"); Console.WriteLine(string.Join(", ", res30)); // >>> bike:2, bike:4, bike:5 RedisValue res31 = db.SetRandomMember("bikes:racing:france"); Console.WriteLine(res31); // >>> bike:4 // Tests for 'srem' step. } }
-
有多少辆自行车在法国比赛?
> SCARD bikes:racing:france (integer) 3
厌倦了使用 redis-cli?试试 Redis Insight - 适用于 Redis 的开发者 GUI。""" Code samples for Set doc pages: https://redis.ac.cn/docs/latest/develop/data-types/sets/ """ import redis r = redis.Redis(decode_responses=True) res1 = r.sadd("bikes:racing:france", "bike:1") print(res1) # >>> 1 res2 = r.sadd("bikes:racing:france", "bike:1") print(res2) # >>> 0 res3 = r.sadd("bikes:racing:france", "bike:2", "bike:3") print(res3) # >>> 2 res4 = r.sadd("bikes:racing:usa", "bike:1", "bike:4") print(res4) # >>> 2 r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") r.sadd("bikes:racing:usa", "bike:1", "bike:4") res5 = r.sismember("bikes:racing:usa", "bike:1") print(res5) # >>> 1 res6 = r.sismember("bikes:racing:usa", "bike:2") print(res6) # >>> 0 r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") r.sadd("bikes:racing:usa", "bike:1", "bike:4") res7 = r.sinter("bikes:racing:france", "bikes:racing:usa") print(res7) # >>> {'bike:1'} r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") res8 = r.scard("bikes:racing:france") print(res8) # >>> 3 res9 = r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") print(res9) # >>> 3 res10 = r.smembers("bikes:racing:france") print(res10) # >>> {'bike:1', 'bike:2', 'bike:3'} res11 = r.sismember("bikes:racing:france", "bike:1") print(res11) # >>> 1 res12 = r.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4") print(res12) # >>> [1, 1, 0] r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") r.sadd("bikes:racing:usa", "bike:1", "bike:4") res13 = r.sdiff("bikes:racing:france", "bikes:racing:usa") print(res13) # >>> {'bike:2', 'bike:3'} r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3") r.sadd("bikes:racing:usa", "bike:1", "bike:4") r.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4") res13 = r.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy") print(res13) # >>> {'bike:1'} res14 = r.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy") print(res14) # >>> {'bike:1', 'bike:2', 'bike:3', 'bike:4'} res15 = r.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy") print(res15) # >>> {} res16 = r.sdiff("bikes:racing:usa", "bikes:racing:france") print(res16) # >>> {'bike:4'} res17 = r.sdiff("bikes:racing:france", "bikes:racing:usa") print(res17) # >>> {'bike:2', 'bike:3'} r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5") res18 = r.srem("bikes:racing:france", "bike:1") print(res18) # >>> 1 res19 = r.spop("bikes:racing:france") print(res19) # >>> bike:3 res20 = r.smembers("bikes:racing:france") print(res20) # >>> {'bike:2', 'bike:4', 'bike:5'} res21 = r.srandmember("bikes:racing:france") print(res21) # >>> bike:4
import assert from 'assert'; import { createClient } from 'redis'; const client = await createClient(); await client.connect(); const res1 = await client.sAdd('bikes:racing:france', 'bike:1') console.log(res1) // >>> 1 const res2 = await client.sAdd('bikes:racing:france', 'bike:1') console.log(res2) // >>> 0 const res3 = await client.sAdd('bikes:racing:france', ['bike:2', 'bike:3']) console.log(res3) // >>> 2 const res4 = await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4']) console.log(res4) // >>> 2 await client.del('bikes:racing:france') await client.del('bikes:racing:usa') await client.sAdd('bikes:racing:france', 'bike:1', 'bike:2', 'bike:3') await client.sAdd('bikes:racing:usa', 'bike:1', 'bike:4') const res5 = await client.sIsMember('bikes:racing:usa', 'bike:1') console.log(res5) // >>> true const res6 = await client.sIsMember('bikes:racing:usa', 'bike:2') console.log(res6) // >>> false await client.del('bikes:racing:france') await client.del('bikes:racing:usa') await client.sAdd('bikes:racing:france', 'bike:1', 'bike:2', 'bike:3') await client.sAdd('bikes:racing:usa', 'bike:1', 'bike:4') const res7 = await client.sInter('bikes:racing:france', 'bikes:racing:usa') console.log(res7) // >>> {'bike:1'} await client.del('bikes:racing:france') await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3']) const res8 = await client.sCard('bikes:racing:france') console.log(res8) // >>> 3 const res9 = await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3']) console.log(res9) // >>> 3 const res10 = await client.sMembers('bikes:racing:france') console.log(res10) // >>> ['bike:1', 'bike:2', 'bike:3'] const res11 = await client.sIsMember('bikes:racing:france', 'bike:1') console.log(res11) // >>> true const res12 = await client.smIsMember('bikes:racing:france', ['bike:2', 'bike:3', 'bike:4']) console.log(res12) // >>> [true, true, false] await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3']) await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4']) const res13 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa']) console.log(res13) // >>> [ 'bike:2', 'bike:3' ] await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3']) await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4']) await client.sAdd('bikes:racing:italy', ['bike:1', 'bike:2', 'bike:3', 'bike:4']) const res14 = await client.sInter( ['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy'] ) console.log(res14) // >>> ['bike:1'] const res15 = await client.sUnion( ['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy'] ) console.log(res15) // >>> ['bike:1', 'bike:2', 'bike:3', 'bike:4'] const res16 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy']) console.log(res16) // >>> [] const res17 = await client.sDiff(['bikes:racing:usa', 'bikes:racing:france']) console.log(res17) // >>> ['bike:4'] const res18 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa']) console.log(res18) // >>> ['bike:2', 'bike:3'] debugger; await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5']) const res19 = await client.sRem('bikes:racing:france', 'bike:1') console.log(res19) // >>> 1 const res20 = await client.sPop('bikes:racing:france') console.log(res20) // >>> bike:3 or other random value const res21 = await client.sMembers('bikes:racing:france') console.log(res21) // >>> ['bike:2', 'bike:4', 'bike:5']; depends on previous result const res22 = await client.sRandMember('bikes:racing:france') console.log(res22) // >>> bike:4 or other random value
package io.redis.examples; import redis.clients.jedis.UnifiedJedis; import org.junit.jupiter.api.Test; import java.util.List; import java.util.Set; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertEquals; public class SetsExample { public void run() { UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379"); long res1 = jedis.sadd("bikes:racing:france", "bike:1"); System.out.println(res1); // >>> 1 long res2 = jedis.sadd("bikes:racing:france", "bike:1"); System.out.println(res2); // >>> 0 long res3 = jedis.sadd("bikes:racing:france", "bike:2", "bike:3"); System.out.println(res3); // >>> 2 long res4 = jedis.sadd("bikes:racing:usa", "bike:1", "bike:4"); System.out.println(res4); // >>> 2 jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); jedis.sadd("bikes:racing:usa", "bike:1", "bike:4"); boolean res5 = jedis.sismember("bikes:racing:usa", "bike:1"); System.out.println(res5); // >>> true boolean res6 = jedis.sismember("bikes:racing:usa", "bike:2"); System.out.println(res6); // >>> false jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); jedis.sadd("bikes:racing:usa", "bike:1", "bike:4"); Set<String> res7 = jedis.sinter("bikes:racing:france", "bikes:racing:usa"); System.out.println(res7); // >>> [bike:1] jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); long res8 = jedis.scard("bikes:racing:france"); System.out.println(res8); // >>> 3 long res9 = jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); System.out.println(res9); // >>> 3 Set<String> res10 = jedis.smembers("bikes:racing:france"); System.out.println(res10); // >>> [bike:1, bike:2, bike:3] boolean res11 = jedis.sismember("bikes:racing:france", "bike:1"); System.out.println(res11); // >>> true List<Boolean> res12 = jedis.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4"); System.out.println(res12); // >>> [true,true,false] jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); jedis.sadd("bikes:racing:usa", "bike:1", "bike:4"); Set<String> res13 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa"); System.out.println(res13); // >>> [bike:2, bike:3] jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); jedis.sadd("bikes:racing:usa", "bike:1", "bike:4"); jedis.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4"); Set<String> res14 = jedis.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); System.out.println(res14); // >>> [bike:1] Set<String> res15 = jedis.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); System.out.println(res15); // >>> [bike:1, bike:2, bike:3, bike:4] Set<String> res16 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); System.out.println(res16); // >>> [] Set<String> res17 = jedis.sdiff("bikes:racing:usa", "bikes:racing:france"); System.out.println(res17); // >>> [bike:4] Set<String> res18 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa"); System.out.println(res18); // >>> [bike:2, bike:3] jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); long res19 = jedis.srem("bikes:racing:france", "bike:1"); System.out.println(res18); // >>> 1 String res20 = jedis.spop("bikes:racing:france"); System.out.println(res20); // >>> bike:3 Set<String> res21 = jedis.smembers("bikes:racing:france"); System.out.println(res21); // >>> [bike:2, bike:4, bike:5] String res22 = jedis.srandmember("bikes:racing:france"); System.out.println(res22); // >>> bike:4 jedis.close(); } }
package io.redis.examples.async; import io.lettuce.core.*; import io.lettuce.core.api.async.RedisAsyncCommands; import io.lettuce.core.api.StatefulRedisConnection; import java.util.*; import static java.util.stream.Collectors.*; import java.util.concurrent.CompletableFuture; public class SetExample { public void run() { RedisClient redisClient = RedisClient.create("redis://localhost:6379"); try (StatefulRedisConnection<String, String> connection = redisClient.connect()) { RedisAsyncCommands<String, String> asyncCommands = connection.async(); CompletableFuture<Void> sAdd = asyncCommands.sadd("bikes:racing:france", "bike:1").thenCompose(res1 -> { System.out.println(res1); // >>> 1 return asyncCommands.sadd("bikes:racing:france", "bike:1"); }).thenCompose(res2 -> { System.out.println(res2); // >>> 0 return asyncCommands.sadd("bikes:racing:france", "bike:2", "bike:3"); }).thenCompose(res3 -> { System.out.println(res3); // >>> 2 return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4"); }) .thenAccept(System.out::println) // >>> 2 .toCompletableFuture(); CompletableFuture<Void> sIsMember = sAdd.thenCompose(r -> { return asyncCommands.sismember("bikes:racing:usa", "bike:1"); }).thenCompose(res4 -> { System.out.println(res4); // >>> true return asyncCommands.sismember("bikes:racing:usa", "bike:2"); }) .thenAccept(System.out::println) // >>> false .toCompletableFuture(); CompletableFuture<Void> sInter = sIsMember.thenCompose(r -> { return asyncCommands.sinter("bikes:racing:france", "bikes:racing:usa"); }) .thenAccept(System.out::println) // >>> ["bike:1"] .toCompletableFuture(); CompletableFuture<Void> sCard = sInter.thenCompose(r -> { return asyncCommands.scard("bikes:racing:france"); }) .thenAccept(System.out::println) // >>> 3 .toCompletableFuture(); CompletableFuture<Void> sAddSMembers = sCard.thenCompose(r -> { return asyncCommands.del("bikes:racing:france"); }).thenCompose(r -> { return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); }).thenCompose(res5 -> { System.out.println(res5); // >>> 3 return asyncCommands.smembers("bikes:racing:france"); }) .thenAccept(System.out::println) // >>> [bike:1, bike:2, bike:3] .toCompletableFuture(); CompletableFuture<Void> sMIsMember = sAddSMembers.thenCompose(r -> { return asyncCommands.sismember("bikes:racing:france", "bike:1"); }).thenCompose(res6 -> { System.out.println(res6); // >>> True return asyncCommands.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4"); }) .thenAccept(System.out::println) // >>> [true, true, false] .toCompletableFuture(); CompletableFuture<Void> sDiff = sMIsMember.thenCompose(r -> { return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); }).thenCompose(r -> { return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4"); }).thenCompose(r -> { return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa"); }) .thenAccept(System.out::println) // >>> [bike:2, bike:3] .toCompletableFuture(); CompletableFuture<Void> multisets = sDiff.thenCompose(r -> { return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3"); }).thenCompose(r -> { return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4"); }).thenCompose(r -> { return asyncCommands.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4"); }).thenCompose(r -> { return asyncCommands.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); }).thenCompose(res7 -> { System.out.println(res7); // >>> [bike:1] return asyncCommands.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); }).thenCompose(res8 -> { System.out.println(res8); // >>> [bike:1, bike:2, bike:3, bike:4] return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy"); }).thenCompose(res9 -> { System.out.println(res9); // >>> [] return asyncCommands.sdiff("bikes:racing:usa", "bikes:racing:france"); }).thenCompose(res10 -> { System.out.println(res10); // >>> [bike:4] return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa"); }) .thenAccept(System.out::println) // >>> [bike:2, bike:3] .toCompletableFuture(); CompletableFuture<Void> sRem = multisets.thenCompose(r -> { return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); }).thenCompose(r -> { return asyncCommands.srem("bikes:racing:france", "bike:1"); }).thenCompose(res11 -> { System.out.println(res11); // >>> 1 return asyncCommands.spop("bikes:racing:france"); }).thenCompose(res12 -> { System.out.println(res12); // >>> bike:3 (for example) return asyncCommands.smembers("bikes:racing:france"); }).thenCompose(res13 -> { System.out.println(res13); // >>> [bike:2, bike:4, bike:5] return asyncCommands.srandmember("bikes:racing:france"); }).thenAccept(System.out::println) // >>> bike:4 .toCompletableFuture(); CompletableFuture.allOf( sRem).join(); } finally { redisClient.shutdown(); } } }
package example_commands_test import ( "context" "fmt" "sort" "github.com/redis/go-redis/v9" ) func ExampleClient_sadd() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res1, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res1) // >>> 1 res2, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res2) // >>> 0 res3, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res3) // >>> 2 res4, err := rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result() if err != nil { panic(err) } fmt.Println(res4) // >>> 2 } func ExampleClient_sismember() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } _, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result() if err != nil { panic(err) } res5, err := rdb.SIsMember(ctx, "bikes:racing:usa", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res5) // >>> true res6, err := rdb.SIsMember(ctx, "bikes:racing:usa", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res6) // >>> false } func ExampleClient_sinter() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } _, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result() if err != nil { panic(err) } res7, err := rdb.SInter(ctx, "bikes:racing:france", "bikes:racing:usa").Result() if err != nil { panic(err) } fmt.Println(res7) // >>> [bike:1] } func ExampleClient_scard() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } res8, err := rdb.SCard(ctx, "bikes:racing:france").Result() if err != nil { panic(err) } fmt.Println(res8) // >>> 3 } func ExampleClient_saddsmembers() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res9, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res9) // >>> 3 res10, err := rdb.SMembers(ctx, "bikes:racing:france").Result() if err != nil { panic(err) } // Sort the strings in the slice to make sure the output is lexicographical sort.Strings(res10) fmt.Println(res10) // >>> [bike:1 bike:2 bike:3] } func ExampleClient_smismember() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } res11, err := rdb.SIsMember(ctx, "bikes:racing:france", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res11) // >>> true res12, err := rdb.SMIsMember(ctx, "bikes:racing:france", "bike:2", "bike:3", "bike:4").Result() if err != nil { panic(err) } fmt.Println(res12) // >>> [true true false] } func ExampleClient_sdiff() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } _, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result() res13, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa").Result() if err != nil { panic(err) } // Sort the strings in the slice to make sure the output is lexicographical sort.Strings(res13) fmt.Println(res13) // >>> [bike:2 bike:3] } func ExampleClient_multisets() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } _, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result() if err != nil { panic(err) } _, err = rdb.SAdd(ctx, "bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4").Result() if err != nil { panic(err) } res14, err := rdb.SInter(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result() if err != nil { panic(err) } fmt.Println(res14) // >>> [bike:1] res15, err := rdb.SUnion(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result() if err != nil { panic(err) } // Sort the strings in the slice to make sure the output is lexicographical sort.Strings(res15) fmt.Println(res15) // >>> [bike:1 bike:2 bike:3 bike:4] res16, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result() if err != nil { panic(err) } fmt.Println(res16) // >>> [] res17, err := rdb.SDiff(ctx, "bikes:racing:usa", "bikes:racing:france").Result() if err != nil { panic(err) } fmt.Println(res17) // >>> [bike:4] res18, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa").Result() if err != nil { panic(err) } // Sort the strings in the slice to make sure the output is lexicographical sort.Strings(res18) fmt.Println(res18) // >>> [bike:2 bike:3] } func ExampleClient_srem() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) _, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result() if err != nil { panic(err) } res19, err := rdb.SRem(ctx, "bikes:racing:france", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res19) // >>> 1 res20, err := rdb.SPop(ctx, "bikes:racing:france").Result() if err != nil { panic(err) } fmt.Println(res20) // >>> <random element> res21, err := rdb.SMembers(ctx, "bikes:racing:france").Result() if err != nil { panic(err) } fmt.Println(res21) // >>> <remaining elements> res22, err := rdb.SRandMember(ctx, "bikes:racing:france").Result() if err != nil { panic(err) } fmt.Println(res22) // >>> <random element> // Testable examples not available because the test output // is not deterministic. }
using System.Data.Common; using NRedisStack.Tests; using StackExchange.Redis; public class SetsExample { public void run() { var muxer = ConnectionMultiplexer.Connect("localhost:6379"); var db = muxer.GetDatabase(); long res1 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1" }); Console.WriteLine(res1); // >>> 1 long res2 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1" }); Console.WriteLine(res2); // >>> 0 long res3 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:2", "bike:3" }); Console.WriteLine(res3); // >>> 2 long res4 = db.SetAdd("bikes:racing:usa", new RedisValue[] { "bike:1", "bike:4" }); Console.WriteLine(res4); // >>> 2 // Tests for 'sadd' step. bool res5 = db.SetContains("bikes:racing:france", "bike:1"); Console.WriteLine(res5); // >>> True bool res6 = db.SetContains("bikes:racing:usa", "bike:2"); Console.WriteLine(res6); // >>> False // Tests for 'sismember' step. long res7 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" }); long res8 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" }); RedisValue[] res9 = db.SetCombine(SetOperation.Intersect, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" }); Console.WriteLine(string.Join(", ", res9)); // >>> bike:1 // Tests for 'sinter' step. long res10 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" }); long res11 = db.SetLength("bikes:racing:france"); Console.WriteLine(res11); // >>> 3 // Tests for 'scard' step. long res12 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" }); RedisValue[] res13 = db.SetMembers("bikes:racing:france"); Console.WriteLine(string.Join(", ", res13)); // >>> bike:3, bike:2, bike:1 // Tests for 'sadd_smembers' step. bool res14 = db.SetContains("bikes:racing:france", "bike:1"); Console.WriteLine(res14); // >>> true bool[] res15 = db.SetContains("bikes:racing:france", new RedisValue[] { "bike:2", "bike:3", "bike:4" }); Console.WriteLine(string.Join(", ", res15)); // >>> True, True, False // Tests for 'smismember' step. long res16 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" }); long res17 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" }); RedisValue[] res18 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" }); Console.WriteLine(string.Join(", ", res18)); // >>> bike:2, bike:3 // Tests for 'sdiff' step. long res19 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" }); long res20 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" }); long res21 = db.SetAdd("{bikes:racing}:italy", new RedisValue[] { "bike:1", "bike:2", "bike:3", "bike:4" }); RedisValue[] res22 = db.SetCombine(SetOperation.Intersect, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" }); Console.WriteLine(string.Join(", ", res22)); // >>> bike:1 RedisValue[] res23 = db.SetCombine(SetOperation.Union, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" }); Console.WriteLine(string.Join(", ", res23)); // >>> bike:1, bike:2, bike:3, bike:4 RedisValue[] res24 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" }); Console.WriteLine(string.Join(", ", res24)); // >>> <empty set> RedisValue[] res25 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:usa", "{bikes:racing}:france" }); Console.WriteLine(string.Join(", ", res25)); // >>> bike:4 RedisValue[] res26 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" }); Console.WriteLine(string.Join(", ", res26)); // >>> bike:2, bike:3 // Tests for 'multisets' step. long res27 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3", "bike:4", "bike:5" }); bool res28 = db.SetRemove("bikes:racing:france", "bike:1"); Console.WriteLine(res28); // >>> True RedisValue res29 = db.SetPop("bikes:racing:france"); Console.WriteLine(res29); // >>> bike:3 RedisValue[] res30 = db.SetMembers("bikes:racing:france"); Console.WriteLine(string.Join(", ", res30)); // >>> bike:2, bike:4, bike:5 RedisValue res31 = db.SetRandomMember("bikes:racing:france"); Console.WriteLine(res31); // >>> bike:4 // Tests for 'srem' step. } }
教程
SADD
命令向集合添加新元素。还可以对集合执行许多其他操作,例如测试给定元素是否存在、计算多个集合的交集、并集或差集等等。
> SADD bikes:racing:france bike:1 bike:2 bike:3
(integer) 3
> SMEMBERS bikes:racing:france
1) bike:3
2) bike:1
3) bike:2
"""
Code samples for Set doc pages:
https://redis.ac.cn/docs/latest/develop/data-types/sets/
"""
import redis
r = redis.Redis(decode_responses=True)
res1 = r.sadd("bikes:racing:france", "bike:1")
print(res1) # >>> 1
res2 = r.sadd("bikes:racing:france", "bike:1")
print(res2) # >>> 0
res3 = r.sadd("bikes:racing:france", "bike:2", "bike:3")
print(res3) # >>> 2
res4 = r.sadd("bikes:racing:usa", "bike:1", "bike:4")
print(res4) # >>> 2
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
r.sadd("bikes:racing:usa", "bike:1", "bike:4")
res5 = r.sismember("bikes:racing:usa", "bike:1")
print(res5) # >>> 1
res6 = r.sismember("bikes:racing:usa", "bike:2")
print(res6) # >>> 0
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
r.sadd("bikes:racing:usa", "bike:1", "bike:4")
res7 = r.sinter("bikes:racing:france", "bikes:racing:usa")
print(res7) # >>> {'bike:1'}
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
res8 = r.scard("bikes:racing:france")
print(res8) # >>> 3
res9 = r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
print(res9) # >>> 3
res10 = r.smembers("bikes:racing:france")
print(res10) # >>> {'bike:1', 'bike:2', 'bike:3'}
res11 = r.sismember("bikes:racing:france", "bike:1")
print(res11) # >>> 1
res12 = r.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4")
print(res12) # >>> [1, 1, 0]
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
r.sadd("bikes:racing:usa", "bike:1", "bike:4")
res13 = r.sdiff("bikes:racing:france", "bikes:racing:usa")
print(res13) # >>> {'bike:2', 'bike:3'}
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
r.sadd("bikes:racing:usa", "bike:1", "bike:4")
r.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4")
res13 = r.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy")
print(res13) # >>> {'bike:1'}
res14 = r.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy")
print(res14) # >>> {'bike:1', 'bike:2', 'bike:3', 'bike:4'}
res15 = r.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy")
print(res15) # >>> {}
res16 = r.sdiff("bikes:racing:usa", "bikes:racing:france")
print(res16) # >>> {'bike:4'}
res17 = r.sdiff("bikes:racing:france", "bikes:racing:usa")
print(res17) # >>> {'bike:2', 'bike:3'}
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5")
res18 = r.srem("bikes:racing:france", "bike:1")
print(res18) # >>> 1
res19 = r.spop("bikes:racing:france")
print(res19) # >>> bike:3
res20 = r.smembers("bikes:racing:france")
print(res20) # >>> {'bike:2', 'bike:4', 'bike:5'}
res21 = r.srandmember("bikes:racing:france")
print(res21) # >>> bike:4
import assert from 'assert';
import { createClient } from 'redis';
const client = await createClient();
await client.connect();
const res1 = await client.sAdd('bikes:racing:france', 'bike:1')
console.log(res1) // >>> 1
const res2 = await client.sAdd('bikes:racing:france', 'bike:1')
console.log(res2) // >>> 0
const res3 = await client.sAdd('bikes:racing:france', ['bike:2', 'bike:3'])
console.log(res3) // >>> 2
const res4 = await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4'])
console.log(res4) // >>> 2
await client.del('bikes:racing:france')
await client.del('bikes:racing:usa')
await client.sAdd('bikes:racing:france', 'bike:1', 'bike:2', 'bike:3')
await client.sAdd('bikes:racing:usa', 'bike:1', 'bike:4')
const res5 = await client.sIsMember('bikes:racing:usa', 'bike:1')
console.log(res5) // >>> true
const res6 = await client.sIsMember('bikes:racing:usa', 'bike:2')
console.log(res6) // >>> false
await client.del('bikes:racing:france')
await client.del('bikes:racing:usa')
await client.sAdd('bikes:racing:france', 'bike:1', 'bike:2', 'bike:3')
await client.sAdd('bikes:racing:usa', 'bike:1', 'bike:4')
const res7 = await client.sInter('bikes:racing:france', 'bikes:racing:usa')
console.log(res7) // >>> {'bike:1'}
await client.del('bikes:racing:france')
await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3'])
const res8 = await client.sCard('bikes:racing:france')
console.log(res8) // >>> 3
const res9 = await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3'])
console.log(res9) // >>> 3
const res10 = await client.sMembers('bikes:racing:france')
console.log(res10) // >>> ['bike:1', 'bike:2', 'bike:3']
const res11 = await client.sIsMember('bikes:racing:france', 'bike:1')
console.log(res11) // >>> true
const res12 = await client.smIsMember('bikes:racing:france', ['bike:2', 'bike:3', 'bike:4'])
console.log(res12) // >>> [true, true, false]
await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3'])
await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4'])
const res13 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa'])
console.log(res13) // >>> [ 'bike:2', 'bike:3' ]
await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3'])
await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4'])
await client.sAdd('bikes:racing:italy', ['bike:1', 'bike:2', 'bike:3', 'bike:4'])
const res14 = await client.sInter(
['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy']
)
console.log(res14) // >>> ['bike:1']
const res15 = await client.sUnion(
['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy']
)
console.log(res15) // >>> ['bike:1', 'bike:2', 'bike:3', 'bike:4']
const res16 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy'])
console.log(res16) // >>> []
const res17 = await client.sDiff(['bikes:racing:usa', 'bikes:racing:france'])
console.log(res17) // >>> ['bike:4']
const res18 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa'])
console.log(res18) // >>> ['bike:2', 'bike:3']
debugger;
await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'])
const res19 = await client.sRem('bikes:racing:france', 'bike:1')
console.log(res19) // >>> 1
const res20 = await client.sPop('bikes:racing:france')
console.log(res20) // >>> bike:3 or other random value
const res21 = await client.sMembers('bikes:racing:france')
console.log(res21) // >>> ['bike:2', 'bike:4', 'bike:5']; depends on previous result
const res22 = await client.sRandMember('bikes:racing:france')
console.log(res22) // >>> bike:4 or other random value
package io.redis.examples;
import redis.clients.jedis.UnifiedJedis;
import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.Set;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class SetsExample {
public void run() {
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
long res1 = jedis.sadd("bikes:racing:france", "bike:1");
System.out.println(res1); // >>> 1
long res2 = jedis.sadd("bikes:racing:france", "bike:1");
System.out.println(res2); // >>> 0
long res3 = jedis.sadd("bikes:racing:france", "bike:2", "bike:3");
System.out.println(res3); // >>> 2
long res4 = jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
System.out.println(res4); // >>> 2
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
boolean res5 = jedis.sismember("bikes:racing:usa", "bike:1");
System.out.println(res5); // >>> true
boolean res6 = jedis.sismember("bikes:racing:usa", "bike:2");
System.out.println(res6); // >>> false
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
Set<String> res7 = jedis.sinter("bikes:racing:france", "bikes:racing:usa");
System.out.println(res7); // >>> [bike:1]
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
long res8 = jedis.scard("bikes:racing:france");
System.out.println(res8); // >>> 3
long res9 = jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
System.out.println(res9); // >>> 3
Set<String> res10 = jedis.smembers("bikes:racing:france");
System.out.println(res10); // >>> [bike:1, bike:2, bike:3]
boolean res11 = jedis.sismember("bikes:racing:france", "bike:1");
System.out.println(res11); // >>> true
List<Boolean> res12 = jedis.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4");
System.out.println(res12); // >>> [true,true,false]
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
Set<String> res13 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa");
System.out.println(res13); // >>> [bike:2, bike:3]
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
jedis.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4");
Set<String> res14 = jedis.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
System.out.println(res14); // >>> [bike:1]
Set<String> res15 = jedis.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
System.out.println(res15); // >>> [bike:1, bike:2, bike:3, bike:4]
Set<String> res16 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
System.out.println(res16); // >>> []
Set<String> res17 = jedis.sdiff("bikes:racing:usa", "bikes:racing:france");
System.out.println(res17); // >>> [bike:4]
Set<String> res18 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa");
System.out.println(res18); // >>> [bike:2, bike:3]
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5");
long res19 = jedis.srem("bikes:racing:france", "bike:1");
System.out.println(res18); // >>> 1
String res20 = jedis.spop("bikes:racing:france");
System.out.println(res20); // >>> bike:3
Set<String> res21 = jedis.smembers("bikes:racing:france");
System.out.println(res21); // >>> [bike:2, bike:4, bike:5]
String res22 = jedis.srandmember("bikes:racing:france");
System.out.println(res22); // >>> bike:4
jedis.close();
}
}
package io.redis.examples.async;
import io.lettuce.core.*;
import io.lettuce.core.api.async.RedisAsyncCommands;
import io.lettuce.core.api.StatefulRedisConnection;
import java.util.*;
import static java.util.stream.Collectors.*;
import java.util.concurrent.CompletableFuture;
public class SetExample {
public void run() {
RedisClient redisClient = RedisClient.create("redis://localhost:6379");
try (StatefulRedisConnection<String, String> connection = redisClient.connect()) {
RedisAsyncCommands<String, String> asyncCommands = connection.async();
CompletableFuture<Void> sAdd = asyncCommands.sadd("bikes:racing:france", "bike:1").thenCompose(res1 -> {
System.out.println(res1); // >>> 1
return asyncCommands.sadd("bikes:racing:france", "bike:1");
}).thenCompose(res2 -> {
System.out.println(res2); // >>> 0
return asyncCommands.sadd("bikes:racing:france", "bike:2", "bike:3");
}).thenCompose(res3 -> {
System.out.println(res3); // >>> 2
return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4");
})
.thenAccept(System.out::println)
// >>> 2
.toCompletableFuture();
CompletableFuture<Void> sIsMember = sAdd.thenCompose(r -> {
return asyncCommands.sismember("bikes:racing:usa", "bike:1");
}).thenCompose(res4 -> {
System.out.println(res4); // >>> true
return asyncCommands.sismember("bikes:racing:usa", "bike:2");
})
.thenAccept(System.out::println) // >>> false
.toCompletableFuture();
CompletableFuture<Void> sInter = sIsMember.thenCompose(r -> {
return asyncCommands.sinter("bikes:racing:france", "bikes:racing:usa");
})
.thenAccept(System.out::println) // >>> ["bike:1"]
.toCompletableFuture();
CompletableFuture<Void> sCard = sInter.thenCompose(r -> {
return asyncCommands.scard("bikes:racing:france");
})
.thenAccept(System.out::println) // >>> 3
.toCompletableFuture();
CompletableFuture<Void> sAddSMembers = sCard.thenCompose(r -> {
return asyncCommands.del("bikes:racing:france");
}).thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
}).thenCompose(res5 -> {
System.out.println(res5); // >>> 3
return asyncCommands.smembers("bikes:racing:france");
})
.thenAccept(System.out::println)
// >>> [bike:1, bike:2, bike:3]
.toCompletableFuture();
CompletableFuture<Void> sMIsMember = sAddSMembers.thenCompose(r -> {
return asyncCommands.sismember("bikes:racing:france", "bike:1");
}).thenCompose(res6 -> {
System.out.println(res6); // >>> True
return asyncCommands.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4");
})
.thenAccept(System.out::println) // >>> [true, true, false]
.toCompletableFuture();
CompletableFuture<Void> sDiff = sMIsMember.thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
}).thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4");
}).thenCompose(r -> {
return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa");
})
.thenAccept(System.out::println) // >>> [bike:2, bike:3]
.toCompletableFuture();
CompletableFuture<Void> multisets = sDiff.thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
}).thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4");
}).thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4");
}).thenCompose(r -> {
return asyncCommands.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
}).thenCompose(res7 -> {
System.out.println(res7); // >>> [bike:1]
return asyncCommands.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
}).thenCompose(res8 -> {
System.out.println(res8);
// >>> [bike:1, bike:2, bike:3, bike:4]
return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
}).thenCompose(res9 -> {
System.out.println(res9); // >>> []
return asyncCommands.sdiff("bikes:racing:usa", "bikes:racing:france");
}).thenCompose(res10 -> {
System.out.println(res10); // >>> [bike:4]
return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa");
})
.thenAccept(System.out::println) // >>> [bike:2, bike:3]
.toCompletableFuture();
CompletableFuture<Void> sRem = multisets.thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5");
}).thenCompose(r -> {
return asyncCommands.srem("bikes:racing:france", "bike:1");
}).thenCompose(res11 -> {
System.out.println(res11); // >>> 1
return asyncCommands.spop("bikes:racing:france");
}).thenCompose(res12 -> {
System.out.println(res12); // >>> bike:3 (for example)
return asyncCommands.smembers("bikes:racing:france");
}).thenCompose(res13 -> {
System.out.println(res13); // >>> [bike:2, bike:4, bike:5]
return asyncCommands.srandmember("bikes:racing:france");
}).thenAccept(System.out::println) // >>> bike:4
.toCompletableFuture();
CompletableFuture.allOf(
sRem).join();
} finally {
redisClient.shutdown();
}
}
}
package example_commands_test
import (
"context"
"fmt"
"sort"
"github.com/redis/go-redis/v9"
)
func ExampleClient_sadd() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res1, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res1) // >>> 1
res2, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res2) // >>> 0
res3, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res3) // >>> 2
res4, err := rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
if err != nil {
panic(err)
}
fmt.Println(res4) // >>> 2
}
func ExampleClient_sismember() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
if err != nil {
panic(err)
}
res5, err := rdb.SIsMember(ctx, "bikes:racing:usa", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res5) // >>> true
res6, err := rdb.SIsMember(ctx, "bikes:racing:usa", "bike:2").Result()
if err != nil {
panic(err)
}
fmt.Println(res6) // >>> false
}
func ExampleClient_sinter() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
if err != nil {
panic(err)
}
res7, err := rdb.SInter(ctx, "bikes:racing:france", "bikes:racing:usa").Result()
if err != nil {
panic(err)
}
fmt.Println(res7) // >>> [bike:1]
}
func ExampleClient_scard() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
res8, err := rdb.SCard(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res8) // >>> 3
}
func ExampleClient_saddsmembers() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res9, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res9) // >>> 3
res10, err := rdb.SMembers(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
// Sort the strings in the slice to make sure the output is lexicographical
sort.Strings(res10)
fmt.Println(res10) // >>> [bike:1 bike:2 bike:3]
}
func ExampleClient_smismember() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
res11, err := rdb.SIsMember(ctx, "bikes:racing:france", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res11) // >>> true
res12, err := rdb.SMIsMember(ctx, "bikes:racing:france", "bike:2", "bike:3", "bike:4").Result()
if err != nil {
panic(err)
}
fmt.Println(res12) // >>> [true true false]
}
func ExampleClient_sdiff() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
res13, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa").Result()
if err != nil {
panic(err)
}
// Sort the strings in the slice to make sure the output is lexicographical
sort.Strings(res13)
fmt.Println(res13) // >>> [bike:2 bike:3]
}
func ExampleClient_multisets() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4").Result()
if err != nil {
panic(err)
}
res14, err := rdb.SInter(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result()
if err != nil {
panic(err)
}
fmt.Println(res14) // >>> [bike:1]
res15, err := rdb.SUnion(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result()
if err != nil {
panic(err)
}
// Sort the strings in the slice to make sure the output is lexicographical
sort.Strings(res15)
fmt.Println(res15) // >>> [bike:1 bike:2 bike:3 bike:4]
res16, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result()
if err != nil {
panic(err)
}
fmt.Println(res16) // >>> []
res17, err := rdb.SDiff(ctx, "bikes:racing:usa", "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res17) // >>> [bike:4]
res18, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa").Result()
if err != nil {
panic(err)
}
// Sort the strings in the slice to make sure the output is lexicographical
sort.Strings(res18)
fmt.Println(res18) // >>> [bike:2 bike:3]
}
func ExampleClient_srem() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result()
if err != nil {
panic(err)
}
res19, err := rdb.SRem(ctx, "bikes:racing:france", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res19) // >>> 1
res20, err := rdb.SPop(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res20) // >>> <random element>
res21, err := rdb.SMembers(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res21) // >>> <remaining elements>
res22, err := rdb.SRandMember(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res22) // >>> <random element>
// Testable examples not available because the test output
// is not deterministic.
}
using System.Data.Common;
using NRedisStack.Tests;
using StackExchange.Redis;
public class SetsExample
{
public void run()
{
var muxer = ConnectionMultiplexer.Connect("localhost:6379");
var db = muxer.GetDatabase();
long res1 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1" });
Console.WriteLine(res1); // >>> 1
long res2 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1" });
Console.WriteLine(res2); // >>> 0
long res3 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:2", "bike:3" });
Console.WriteLine(res3); // >>> 2
long res4 = db.SetAdd("bikes:racing:usa", new RedisValue[] { "bike:1", "bike:4" });
Console.WriteLine(res4); // >>> 2
// Tests for 'sadd' step.
bool res5 = db.SetContains("bikes:racing:france", "bike:1");
Console.WriteLine(res5); // >>> True
bool res6 = db.SetContains("bikes:racing:usa", "bike:2");
Console.WriteLine(res6); // >>> False
// Tests for 'sismember' step.
long res7 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
long res8 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" });
RedisValue[] res9 = db.SetCombine(SetOperation.Intersect, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" });
Console.WriteLine(string.Join(", ", res9)); // >>> bike:1
// Tests for 'sinter' step.
long res10 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
long res11 = db.SetLength("bikes:racing:france");
Console.WriteLine(res11); // >>> 3
// Tests for 'scard' step.
long res12 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
RedisValue[] res13 = db.SetMembers("bikes:racing:france");
Console.WriteLine(string.Join(", ", res13)); // >>> bike:3, bike:2, bike:1
// Tests for 'sadd_smembers' step.
bool res14 = db.SetContains("bikes:racing:france", "bike:1");
Console.WriteLine(res14); // >>> true
bool[] res15 = db.SetContains("bikes:racing:france", new RedisValue[] { "bike:2", "bike:3", "bike:4" });
Console.WriteLine(string.Join(", ", res15)); // >>> True, True, False
// Tests for 'smismember' step.
long res16 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
long res17 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" });
RedisValue[] res18 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" });
Console.WriteLine(string.Join(", ", res18)); // >>> bike:2, bike:3
// Tests for 'sdiff' step.
long res19 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
long res20 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" });
long res21 = db.SetAdd("{bikes:racing}:italy", new RedisValue[] { "bike:1", "bike:2", "bike:3", "bike:4" });
RedisValue[] res22 = db.SetCombine(SetOperation.Intersect, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" });
Console.WriteLine(string.Join(", ", res22)); // >>> bike:1
RedisValue[] res23 = db.SetCombine(SetOperation.Union, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" });
Console.WriteLine(string.Join(", ", res23)); // >>> bike:1, bike:2, bike:3, bike:4
RedisValue[] res24 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" });
Console.WriteLine(string.Join(", ", res24)); // >>> <empty set>
RedisValue[] res25 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:usa", "{bikes:racing}:france" });
Console.WriteLine(string.Join(", ", res25)); // >>> bike:4
RedisValue[] res26 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" });
Console.WriteLine(string.Join(", ", res26)); // >>> bike:2, bike:3
// Tests for 'multisets' step.
long res27 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3", "bike:4", "bike:5" });
bool res28 = db.SetRemove("bikes:racing:france", "bike:1");
Console.WriteLine(res28); // >>> True
RedisValue res29 = db.SetPop("bikes:racing:france");
Console.WriteLine(res29); // >>> bike:3
RedisValue[] res30 = db.SetMembers("bikes:racing:france");
Console.WriteLine(string.Join(", ", res30)); // >>> bike:2, bike:4, bike:5
RedisValue res31 = db.SetRandomMember("bikes:racing:france");
Console.WriteLine(res31); // >>> bike:4
// Tests for 'srem' step.
}
}
这里我向我的集合添加了三个元素,并告诉 Redis 返回所有元素。集合没有顺序保证。Redis 可以自由地在每次调用时以任何顺序返回元素。
Redis 提供了用于测试集合成员资格的命令。这些命令可以用于单个项目,也可以用于多个项目
> SISMEMBER bikes:racing:france bike:1
(integer) 1
> SMISMEMBER bikes:racing:france bike:2 bike:3 bike:4
1) (integer) 1
2) (integer) 1
3) (integer) 0
"""
Code samples for Set doc pages:
https://redis.ac.cn/docs/latest/develop/data-types/sets/
"""
import redis
r = redis.Redis(decode_responses=True)
res1 = r.sadd("bikes:racing:france", "bike:1")
print(res1) # >>> 1
res2 = r.sadd("bikes:racing:france", "bike:1")
print(res2) # >>> 0
res3 = r.sadd("bikes:racing:france", "bike:2", "bike:3")
print(res3) # >>> 2
res4 = r.sadd("bikes:racing:usa", "bike:1", "bike:4")
print(res4) # >>> 2
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
r.sadd("bikes:racing:usa", "bike:1", "bike:4")
res5 = r.sismember("bikes:racing:usa", "bike:1")
print(res5) # >>> 1
res6 = r.sismember("bikes:racing:usa", "bike:2")
print(res6) # >>> 0
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
r.sadd("bikes:racing:usa", "bike:1", "bike:4")
res7 = r.sinter("bikes:racing:france", "bikes:racing:usa")
print(res7) # >>> {'bike:1'}
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
res8 = r.scard("bikes:racing:france")
print(res8) # >>> 3
res9 = r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
print(res9) # >>> 3
res10 = r.smembers("bikes:racing:france")
print(res10) # >>> {'bike:1', 'bike:2', 'bike:3'}
res11 = r.sismember("bikes:racing:france", "bike:1")
print(res11) # >>> 1
res12 = r.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4")
print(res12) # >>> [1, 1, 0]
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
r.sadd("bikes:racing:usa", "bike:1", "bike:4")
res13 = r.sdiff("bikes:racing:france", "bikes:racing:usa")
print(res13) # >>> {'bike:2', 'bike:3'}
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
r.sadd("bikes:racing:usa", "bike:1", "bike:4")
r.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4")
res13 = r.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy")
print(res13) # >>> {'bike:1'}
res14 = r.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy")
print(res14) # >>> {'bike:1', 'bike:2', 'bike:3', 'bike:4'}
res15 = r.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy")
print(res15) # >>> {}
res16 = r.sdiff("bikes:racing:usa", "bikes:racing:france")
print(res16) # >>> {'bike:4'}
res17 = r.sdiff("bikes:racing:france", "bikes:racing:usa")
print(res17) # >>> {'bike:2', 'bike:3'}
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5")
res18 = r.srem("bikes:racing:france", "bike:1")
print(res18) # >>> 1
res19 = r.spop("bikes:racing:france")
print(res19) # >>> bike:3
res20 = r.smembers("bikes:racing:france")
print(res20) # >>> {'bike:2', 'bike:4', 'bike:5'}
res21 = r.srandmember("bikes:racing:france")
print(res21) # >>> bike:4
import assert from 'assert';
import { createClient } from 'redis';
const client = await createClient();
await client.connect();
const res1 = await client.sAdd('bikes:racing:france', 'bike:1')
console.log(res1) // >>> 1
const res2 = await client.sAdd('bikes:racing:france', 'bike:1')
console.log(res2) // >>> 0
const res3 = await client.sAdd('bikes:racing:france', ['bike:2', 'bike:3'])
console.log(res3) // >>> 2
const res4 = await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4'])
console.log(res4) // >>> 2
await client.del('bikes:racing:france')
await client.del('bikes:racing:usa')
await client.sAdd('bikes:racing:france', 'bike:1', 'bike:2', 'bike:3')
await client.sAdd('bikes:racing:usa', 'bike:1', 'bike:4')
const res5 = await client.sIsMember('bikes:racing:usa', 'bike:1')
console.log(res5) // >>> true
const res6 = await client.sIsMember('bikes:racing:usa', 'bike:2')
console.log(res6) // >>> false
await client.del('bikes:racing:france')
await client.del('bikes:racing:usa')
await client.sAdd('bikes:racing:france', 'bike:1', 'bike:2', 'bike:3')
await client.sAdd('bikes:racing:usa', 'bike:1', 'bike:4')
const res7 = await client.sInter('bikes:racing:france', 'bikes:racing:usa')
console.log(res7) // >>> {'bike:1'}
await client.del('bikes:racing:france')
await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3'])
const res8 = await client.sCard('bikes:racing:france')
console.log(res8) // >>> 3
const res9 = await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3'])
console.log(res9) // >>> 3
const res10 = await client.sMembers('bikes:racing:france')
console.log(res10) // >>> ['bike:1', 'bike:2', 'bike:3']
const res11 = await client.sIsMember('bikes:racing:france', 'bike:1')
console.log(res11) // >>> true
const res12 = await client.smIsMember('bikes:racing:france', ['bike:2', 'bike:3', 'bike:4'])
console.log(res12) // >>> [true, true, false]
await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3'])
await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4'])
const res13 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa'])
console.log(res13) // >>> [ 'bike:2', 'bike:3' ]
await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3'])
await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4'])
await client.sAdd('bikes:racing:italy', ['bike:1', 'bike:2', 'bike:3', 'bike:4'])
const res14 = await client.sInter(
['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy']
)
console.log(res14) // >>> ['bike:1']
const res15 = await client.sUnion(
['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy']
)
console.log(res15) // >>> ['bike:1', 'bike:2', 'bike:3', 'bike:4']
const res16 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy'])
console.log(res16) // >>> []
const res17 = await client.sDiff(['bikes:racing:usa', 'bikes:racing:france'])
console.log(res17) // >>> ['bike:4']
const res18 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa'])
console.log(res18) // >>> ['bike:2', 'bike:3']
debugger;
await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'])
const res19 = await client.sRem('bikes:racing:france', 'bike:1')
console.log(res19) // >>> 1
const res20 = await client.sPop('bikes:racing:france')
console.log(res20) // >>> bike:3 or other random value
const res21 = await client.sMembers('bikes:racing:france')
console.log(res21) // >>> ['bike:2', 'bike:4', 'bike:5']; depends on previous result
const res22 = await client.sRandMember('bikes:racing:france')
console.log(res22) // >>> bike:4 or other random value
package io.redis.examples;
import redis.clients.jedis.UnifiedJedis;
import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.Set;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class SetsExample {
public void run() {
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
long res1 = jedis.sadd("bikes:racing:france", "bike:1");
System.out.println(res1); // >>> 1
long res2 = jedis.sadd("bikes:racing:france", "bike:1");
System.out.println(res2); // >>> 0
long res3 = jedis.sadd("bikes:racing:france", "bike:2", "bike:3");
System.out.println(res3); // >>> 2
long res4 = jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
System.out.println(res4); // >>> 2
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
boolean res5 = jedis.sismember("bikes:racing:usa", "bike:1");
System.out.println(res5); // >>> true
boolean res6 = jedis.sismember("bikes:racing:usa", "bike:2");
System.out.println(res6); // >>> false
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
Set<String> res7 = jedis.sinter("bikes:racing:france", "bikes:racing:usa");
System.out.println(res7); // >>> [bike:1]
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
long res8 = jedis.scard("bikes:racing:france");
System.out.println(res8); // >>> 3
long res9 = jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
System.out.println(res9); // >>> 3
Set<String> res10 = jedis.smembers("bikes:racing:france");
System.out.println(res10); // >>> [bike:1, bike:2, bike:3]
boolean res11 = jedis.sismember("bikes:racing:france", "bike:1");
System.out.println(res11); // >>> true
List<Boolean> res12 = jedis.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4");
System.out.println(res12); // >>> [true,true,false]
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
Set<String> res13 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa");
System.out.println(res13); // >>> [bike:2, bike:3]
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
jedis.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4");
Set<String> res14 = jedis.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
System.out.println(res14); // >>> [bike:1]
Set<String> res15 = jedis.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
System.out.println(res15); // >>> [bike:1, bike:2, bike:3, bike:4]
Set<String> res16 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
System.out.println(res16); // >>> []
Set<String> res17 = jedis.sdiff("bikes:racing:usa", "bikes:racing:france");
System.out.println(res17); // >>> [bike:4]
Set<String> res18 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa");
System.out.println(res18); // >>> [bike:2, bike:3]
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5");
long res19 = jedis.srem("bikes:racing:france", "bike:1");
System.out.println(res18); // >>> 1
String res20 = jedis.spop("bikes:racing:france");
System.out.println(res20); // >>> bike:3
Set<String> res21 = jedis.smembers("bikes:racing:france");
System.out.println(res21); // >>> [bike:2, bike:4, bike:5]
String res22 = jedis.srandmember("bikes:racing:france");
System.out.println(res22); // >>> bike:4
jedis.close();
}
}
package io.redis.examples.async;
import io.lettuce.core.*;
import io.lettuce.core.api.async.RedisAsyncCommands;
import io.lettuce.core.api.StatefulRedisConnection;
import java.util.*;
import static java.util.stream.Collectors.*;
import java.util.concurrent.CompletableFuture;
public class SetExample {
public void run() {
RedisClient redisClient = RedisClient.create("redis://localhost:6379");
try (StatefulRedisConnection<String, String> connection = redisClient.connect()) {
RedisAsyncCommands<String, String> asyncCommands = connection.async();
CompletableFuture<Void> sAdd = asyncCommands.sadd("bikes:racing:france", "bike:1").thenCompose(res1 -> {
System.out.println(res1); // >>> 1
return asyncCommands.sadd("bikes:racing:france", "bike:1");
}).thenCompose(res2 -> {
System.out.println(res2); // >>> 0
return asyncCommands.sadd("bikes:racing:france", "bike:2", "bike:3");
}).thenCompose(res3 -> {
System.out.println(res3); // >>> 2
return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4");
})
.thenAccept(System.out::println)
// >>> 2
.toCompletableFuture();
CompletableFuture<Void> sIsMember = sAdd.thenCompose(r -> {
return asyncCommands.sismember("bikes:racing:usa", "bike:1");
}).thenCompose(res4 -> {
System.out.println(res4); // >>> true
return asyncCommands.sismember("bikes:racing:usa", "bike:2");
})
.thenAccept(System.out::println) // >>> false
.toCompletableFuture();
CompletableFuture<Void> sInter = sIsMember.thenCompose(r -> {
return asyncCommands.sinter("bikes:racing:france", "bikes:racing:usa");
})
.thenAccept(System.out::println) // >>> ["bike:1"]
.toCompletableFuture();
CompletableFuture<Void> sCard = sInter.thenCompose(r -> {
return asyncCommands.scard("bikes:racing:france");
})
.thenAccept(System.out::println) // >>> 3
.toCompletableFuture();
CompletableFuture<Void> sAddSMembers = sCard.thenCompose(r -> {
return asyncCommands.del("bikes:racing:france");
}).thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
}).thenCompose(res5 -> {
System.out.println(res5); // >>> 3
return asyncCommands.smembers("bikes:racing:france");
})
.thenAccept(System.out::println)
// >>> [bike:1, bike:2, bike:3]
.toCompletableFuture();
CompletableFuture<Void> sMIsMember = sAddSMembers.thenCompose(r -> {
return asyncCommands.sismember("bikes:racing:france", "bike:1");
}).thenCompose(res6 -> {
System.out.println(res6); // >>> True
return asyncCommands.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4");
})
.thenAccept(System.out::println) // >>> [true, true, false]
.toCompletableFuture();
CompletableFuture<Void> sDiff = sMIsMember.thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
}).thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4");
}).thenCompose(r -> {
return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa");
})
.thenAccept(System.out::println) // >>> [bike:2, bike:3]
.toCompletableFuture();
CompletableFuture<Void> multisets = sDiff.thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
}).thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4");
}).thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4");
}).thenCompose(r -> {
return asyncCommands.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
}).thenCompose(res7 -> {
System.out.println(res7); // >>> [bike:1]
return asyncCommands.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
}).thenCompose(res8 -> {
System.out.println(res8);
// >>> [bike:1, bike:2, bike:3, bike:4]
return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
}).thenCompose(res9 -> {
System.out.println(res9); // >>> []
return asyncCommands.sdiff("bikes:racing:usa", "bikes:racing:france");
}).thenCompose(res10 -> {
System.out.println(res10); // >>> [bike:4]
return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa");
})
.thenAccept(System.out::println) // >>> [bike:2, bike:3]
.toCompletableFuture();
CompletableFuture<Void> sRem = multisets.thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5");
}).thenCompose(r -> {
return asyncCommands.srem("bikes:racing:france", "bike:1");
}).thenCompose(res11 -> {
System.out.println(res11); // >>> 1
return asyncCommands.spop("bikes:racing:france");
}).thenCompose(res12 -> {
System.out.println(res12); // >>> bike:3 (for example)
return asyncCommands.smembers("bikes:racing:france");
}).thenCompose(res13 -> {
System.out.println(res13); // >>> [bike:2, bike:4, bike:5]
return asyncCommands.srandmember("bikes:racing:france");
}).thenAccept(System.out::println) // >>> bike:4
.toCompletableFuture();
CompletableFuture.allOf(
sRem).join();
} finally {
redisClient.shutdown();
}
}
}
package example_commands_test
import (
"context"
"fmt"
"sort"
"github.com/redis/go-redis/v9"
)
func ExampleClient_sadd() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res1, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res1) // >>> 1
res2, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res2) // >>> 0
res3, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res3) // >>> 2
res4, err := rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
if err != nil {
panic(err)
}
fmt.Println(res4) // >>> 2
}
func ExampleClient_sismember() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
if err != nil {
panic(err)
}
res5, err := rdb.SIsMember(ctx, "bikes:racing:usa", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res5) // >>> true
res6, err := rdb.SIsMember(ctx, "bikes:racing:usa", "bike:2").Result()
if err != nil {
panic(err)
}
fmt.Println(res6) // >>> false
}
func ExampleClient_sinter() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
if err != nil {
panic(err)
}
res7, err := rdb.SInter(ctx, "bikes:racing:france", "bikes:racing:usa").Result()
if err != nil {
panic(err)
}
fmt.Println(res7) // >>> [bike:1]
}
func ExampleClient_scard() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
res8, err := rdb.SCard(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res8) // >>> 3
}
func ExampleClient_saddsmembers() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res9, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res9) // >>> 3
res10, err := rdb.SMembers(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
// Sort the strings in the slice to make sure the output is lexicographical
sort.Strings(res10)
fmt.Println(res10) // >>> [bike:1 bike:2 bike:3]
}
func ExampleClient_smismember() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
res11, err := rdb.SIsMember(ctx, "bikes:racing:france", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res11) // >>> true
res12, err := rdb.SMIsMember(ctx, "bikes:racing:france", "bike:2", "bike:3", "bike:4").Result()
if err != nil {
panic(err)
}
fmt.Println(res12) // >>> [true true false]
}
func ExampleClient_sdiff() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
res13, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa").Result()
if err != nil {
panic(err)
}
// Sort the strings in the slice to make sure the output is lexicographical
sort.Strings(res13)
fmt.Println(res13) // >>> [bike:2 bike:3]
}
func ExampleClient_multisets() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4").Result()
if err != nil {
panic(err)
}
res14, err := rdb.SInter(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result()
if err != nil {
panic(err)
}
fmt.Println(res14) // >>> [bike:1]
res15, err := rdb.SUnion(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result()
if err != nil {
panic(err)
}
// Sort the strings in the slice to make sure the output is lexicographical
sort.Strings(res15)
fmt.Println(res15) // >>> [bike:1 bike:2 bike:3 bike:4]
res16, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result()
if err != nil {
panic(err)
}
fmt.Println(res16) // >>> []
res17, err := rdb.SDiff(ctx, "bikes:racing:usa", "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res17) // >>> [bike:4]
res18, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa").Result()
if err != nil {
panic(err)
}
// Sort the strings in the slice to make sure the output is lexicographical
sort.Strings(res18)
fmt.Println(res18) // >>> [bike:2 bike:3]
}
func ExampleClient_srem() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result()
if err != nil {
panic(err)
}
res19, err := rdb.SRem(ctx, "bikes:racing:france", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res19) // >>> 1
res20, err := rdb.SPop(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res20) // >>> <random element>
res21, err := rdb.SMembers(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res21) // >>> <remaining elements>
res22, err := rdb.SRandMember(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res22) // >>> <random element>
// Testable examples not available because the test output
// is not deterministic.
}
using System.Data.Common;
using NRedisStack.Tests;
using StackExchange.Redis;
public class SetsExample
{
public void run()
{
var muxer = ConnectionMultiplexer.Connect("localhost:6379");
var db = muxer.GetDatabase();
long res1 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1" });
Console.WriteLine(res1); // >>> 1
long res2 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1" });
Console.WriteLine(res2); // >>> 0
long res3 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:2", "bike:3" });
Console.WriteLine(res3); // >>> 2
long res4 = db.SetAdd("bikes:racing:usa", new RedisValue[] { "bike:1", "bike:4" });
Console.WriteLine(res4); // >>> 2
// Tests for 'sadd' step.
bool res5 = db.SetContains("bikes:racing:france", "bike:1");
Console.WriteLine(res5); // >>> True
bool res6 = db.SetContains("bikes:racing:usa", "bike:2");
Console.WriteLine(res6); // >>> False
// Tests for 'sismember' step.
long res7 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
long res8 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" });
RedisValue[] res9 = db.SetCombine(SetOperation.Intersect, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" });
Console.WriteLine(string.Join(", ", res9)); // >>> bike:1
// Tests for 'sinter' step.
long res10 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
long res11 = db.SetLength("bikes:racing:france");
Console.WriteLine(res11); // >>> 3
// Tests for 'scard' step.
long res12 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
RedisValue[] res13 = db.SetMembers("bikes:racing:france");
Console.WriteLine(string.Join(", ", res13)); // >>> bike:3, bike:2, bike:1
// Tests for 'sadd_smembers' step.
bool res14 = db.SetContains("bikes:racing:france", "bike:1");
Console.WriteLine(res14); // >>> true
bool[] res15 = db.SetContains("bikes:racing:france", new RedisValue[] { "bike:2", "bike:3", "bike:4" });
Console.WriteLine(string.Join(", ", res15)); // >>> True, True, False
// Tests for 'smismember' step.
long res16 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
long res17 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" });
RedisValue[] res18 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" });
Console.WriteLine(string.Join(", ", res18)); // >>> bike:2, bike:3
// Tests for 'sdiff' step.
long res19 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
long res20 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" });
long res21 = db.SetAdd("{bikes:racing}:italy", new RedisValue[] { "bike:1", "bike:2", "bike:3", "bike:4" });
RedisValue[] res22 = db.SetCombine(SetOperation.Intersect, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" });
Console.WriteLine(string.Join(", ", res22)); // >>> bike:1
RedisValue[] res23 = db.SetCombine(SetOperation.Union, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" });
Console.WriteLine(string.Join(", ", res23)); // >>> bike:1, bike:2, bike:3, bike:4
RedisValue[] res24 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" });
Console.WriteLine(string.Join(", ", res24)); // >>> <empty set>
RedisValue[] res25 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:usa", "{bikes:racing}:france" });
Console.WriteLine(string.Join(", ", res25)); // >>> bike:4
RedisValue[] res26 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" });
Console.WriteLine(string.Join(", ", res26)); // >>> bike:2, bike:3
// Tests for 'multisets' step.
long res27 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3", "bike:4", "bike:5" });
bool res28 = db.SetRemove("bikes:racing:france", "bike:1");
Console.WriteLine(res28); // >>> True
RedisValue res29 = db.SetPop("bikes:racing:france");
Console.WriteLine(res29); // >>> bike:3
RedisValue[] res30 = db.SetMembers("bikes:racing:france");
Console.WriteLine(string.Join(", ", res30)); // >>> bike:2, bike:4, bike:5
RedisValue res31 = db.SetRandomMember("bikes:racing:france");
Console.WriteLine(res31); // >>> bike:4
// Tests for 'srem' step.
}
}
我们还可以找到两个集合之间的差集。例如,我们可能想知道哪些自行车在法国比赛但不在美国比赛
> SADD bikes:racing:usa bike:1 bike:4
(integer) 2
> SDIFF bikes:racing:france bikes:racing:usa
1) "bike:3"
2) "bike:2"
"""
Code samples for Set doc pages:
https://redis.ac.cn/docs/latest/develop/data-types/sets/
"""
import redis
r = redis.Redis(decode_responses=True)
res1 = r.sadd("bikes:racing:france", "bike:1")
print(res1) # >>> 1
res2 = r.sadd("bikes:racing:france", "bike:1")
print(res2) # >>> 0
res3 = r.sadd("bikes:racing:france", "bike:2", "bike:3")
print(res3) # >>> 2
res4 = r.sadd("bikes:racing:usa", "bike:1", "bike:4")
print(res4) # >>> 2
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
r.sadd("bikes:racing:usa", "bike:1", "bike:4")
res5 = r.sismember("bikes:racing:usa", "bike:1")
print(res5) # >>> 1
res6 = r.sismember("bikes:racing:usa", "bike:2")
print(res6) # >>> 0
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
r.sadd("bikes:racing:usa", "bike:1", "bike:4")
res7 = r.sinter("bikes:racing:france", "bikes:racing:usa")
print(res7) # >>> {'bike:1'}
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
res8 = r.scard("bikes:racing:france")
print(res8) # >>> 3
res9 = r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
print(res9) # >>> 3
res10 = r.smembers("bikes:racing:france")
print(res10) # >>> {'bike:1', 'bike:2', 'bike:3'}
res11 = r.sismember("bikes:racing:france", "bike:1")
print(res11) # >>> 1
res12 = r.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4")
print(res12) # >>> [1, 1, 0]
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
r.sadd("bikes:racing:usa", "bike:1", "bike:4")
res13 = r.sdiff("bikes:racing:france", "bikes:racing:usa")
print(res13) # >>> {'bike:2', 'bike:3'}
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
r.sadd("bikes:racing:usa", "bike:1", "bike:4")
r.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4")
res13 = r.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy")
print(res13) # >>> {'bike:1'}
res14 = r.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy")
print(res14) # >>> {'bike:1', 'bike:2', 'bike:3', 'bike:4'}
res15 = r.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy")
print(res15) # >>> {}
res16 = r.sdiff("bikes:racing:usa", "bikes:racing:france")
print(res16) # >>> {'bike:4'}
res17 = r.sdiff("bikes:racing:france", "bikes:racing:usa")
print(res17) # >>> {'bike:2', 'bike:3'}
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5")
res18 = r.srem("bikes:racing:france", "bike:1")
print(res18) # >>> 1
res19 = r.spop("bikes:racing:france")
print(res19) # >>> bike:3
res20 = r.smembers("bikes:racing:france")
print(res20) # >>> {'bike:2', 'bike:4', 'bike:5'}
res21 = r.srandmember("bikes:racing:france")
print(res21) # >>> bike:4
import assert from 'assert';
import { createClient } from 'redis';
const client = await createClient();
await client.connect();
const res1 = await client.sAdd('bikes:racing:france', 'bike:1')
console.log(res1) // >>> 1
const res2 = await client.sAdd('bikes:racing:france', 'bike:1')
console.log(res2) // >>> 0
const res3 = await client.sAdd('bikes:racing:france', ['bike:2', 'bike:3'])
console.log(res3) // >>> 2
const res4 = await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4'])
console.log(res4) // >>> 2
await client.del('bikes:racing:france')
await client.del('bikes:racing:usa')
await client.sAdd('bikes:racing:france', 'bike:1', 'bike:2', 'bike:3')
await client.sAdd('bikes:racing:usa', 'bike:1', 'bike:4')
const res5 = await client.sIsMember('bikes:racing:usa', 'bike:1')
console.log(res5) // >>> true
const res6 = await client.sIsMember('bikes:racing:usa', 'bike:2')
console.log(res6) // >>> false
await client.del('bikes:racing:france')
await client.del('bikes:racing:usa')
await client.sAdd('bikes:racing:france', 'bike:1', 'bike:2', 'bike:3')
await client.sAdd('bikes:racing:usa', 'bike:1', 'bike:4')
const res7 = await client.sInter('bikes:racing:france', 'bikes:racing:usa')
console.log(res7) // >>> {'bike:1'}
await client.del('bikes:racing:france')
await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3'])
const res8 = await client.sCard('bikes:racing:france')
console.log(res8) // >>> 3
const res9 = await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3'])
console.log(res9) // >>> 3
const res10 = await client.sMembers('bikes:racing:france')
console.log(res10) // >>> ['bike:1', 'bike:2', 'bike:3']
const res11 = await client.sIsMember('bikes:racing:france', 'bike:1')
console.log(res11) // >>> true
const res12 = await client.smIsMember('bikes:racing:france', ['bike:2', 'bike:3', 'bike:4'])
console.log(res12) // >>> [true, true, false]
await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3'])
await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4'])
const res13 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa'])
console.log(res13) // >>> [ 'bike:2', 'bike:3' ]
await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3'])
await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4'])
await client.sAdd('bikes:racing:italy', ['bike:1', 'bike:2', 'bike:3', 'bike:4'])
const res14 = await client.sInter(
['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy']
)
console.log(res14) // >>> ['bike:1']
const res15 = await client.sUnion(
['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy']
)
console.log(res15) // >>> ['bike:1', 'bike:2', 'bike:3', 'bike:4']
const res16 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy'])
console.log(res16) // >>> []
const res17 = await client.sDiff(['bikes:racing:usa', 'bikes:racing:france'])
console.log(res17) // >>> ['bike:4']
const res18 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa'])
console.log(res18) // >>> ['bike:2', 'bike:3']
debugger;
await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'])
const res19 = await client.sRem('bikes:racing:france', 'bike:1')
console.log(res19) // >>> 1
const res20 = await client.sPop('bikes:racing:france')
console.log(res20) // >>> bike:3 or other random value
const res21 = await client.sMembers('bikes:racing:france')
console.log(res21) // >>> ['bike:2', 'bike:4', 'bike:5']; depends on previous result
const res22 = await client.sRandMember('bikes:racing:france')
console.log(res22) // >>> bike:4 or other random value
package io.redis.examples;
import redis.clients.jedis.UnifiedJedis;
import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.Set;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class SetsExample {
public void run() {
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
long res1 = jedis.sadd("bikes:racing:france", "bike:1");
System.out.println(res1); // >>> 1
long res2 = jedis.sadd("bikes:racing:france", "bike:1");
System.out.println(res2); // >>> 0
long res3 = jedis.sadd("bikes:racing:france", "bike:2", "bike:3");
System.out.println(res3); // >>> 2
long res4 = jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
System.out.println(res4); // >>> 2
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
boolean res5 = jedis.sismember("bikes:racing:usa", "bike:1");
System.out.println(res5); // >>> true
boolean res6 = jedis.sismember("bikes:racing:usa", "bike:2");
System.out.println(res6); // >>> false
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
Set<String> res7 = jedis.sinter("bikes:racing:france", "bikes:racing:usa");
System.out.println(res7); // >>> [bike:1]
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
long res8 = jedis.scard("bikes:racing:france");
System.out.println(res8); // >>> 3
long res9 = jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
System.out.println(res9); // >>> 3
Set<String> res10 = jedis.smembers("bikes:racing:france");
System.out.println(res10); // >>> [bike:1, bike:2, bike:3]
boolean res11 = jedis.sismember("bikes:racing:france", "bike:1");
System.out.println(res11); // >>> true
List<Boolean> res12 = jedis.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4");
System.out.println(res12); // >>> [true,true,false]
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
Set<String> res13 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa");
System.out.println(res13); // >>> [bike:2, bike:3]
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
jedis.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4");
Set<String> res14 = jedis.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
System.out.println(res14); // >>> [bike:1]
Set<String> res15 = jedis.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
System.out.println(res15); // >>> [bike:1, bike:2, bike:3, bike:4]
Set<String> res16 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
System.out.println(res16); // >>> []
Set<String> res17 = jedis.sdiff("bikes:racing:usa", "bikes:racing:france");
System.out.println(res17); // >>> [bike:4]
Set<String> res18 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa");
System.out.println(res18); // >>> [bike:2, bike:3]
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5");
long res19 = jedis.srem("bikes:racing:france", "bike:1");
System.out.println(res18); // >>> 1
String res20 = jedis.spop("bikes:racing:france");
System.out.println(res20); // >>> bike:3
Set<String> res21 = jedis.smembers("bikes:racing:france");
System.out.println(res21); // >>> [bike:2, bike:4, bike:5]
String res22 = jedis.srandmember("bikes:racing:france");
System.out.println(res22); // >>> bike:4
jedis.close();
}
}
package io.redis.examples.async;
import io.lettuce.core.*;
import io.lettuce.core.api.async.RedisAsyncCommands;
import io.lettuce.core.api.StatefulRedisConnection;
import java.util.*;
import static java.util.stream.Collectors.*;
import java.util.concurrent.CompletableFuture;
public class SetExample {
public void run() {
RedisClient redisClient = RedisClient.create("redis://localhost:6379");
try (StatefulRedisConnection<String, String> connection = redisClient.connect()) {
RedisAsyncCommands<String, String> asyncCommands = connection.async();
CompletableFuture<Void> sAdd = asyncCommands.sadd("bikes:racing:france", "bike:1").thenCompose(res1 -> {
System.out.println(res1); // >>> 1
return asyncCommands.sadd("bikes:racing:france", "bike:1");
}).thenCompose(res2 -> {
System.out.println(res2); // >>> 0
return asyncCommands.sadd("bikes:racing:france", "bike:2", "bike:3");
}).thenCompose(res3 -> {
System.out.println(res3); // >>> 2
return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4");
})
.thenAccept(System.out::println)
// >>> 2
.toCompletableFuture();
CompletableFuture<Void> sIsMember = sAdd.thenCompose(r -> {
return asyncCommands.sismember("bikes:racing:usa", "bike:1");
}).thenCompose(res4 -> {
System.out.println(res4); // >>> true
return asyncCommands.sismember("bikes:racing:usa", "bike:2");
})
.thenAccept(System.out::println) // >>> false
.toCompletableFuture();
CompletableFuture<Void> sInter = sIsMember.thenCompose(r -> {
return asyncCommands.sinter("bikes:racing:france", "bikes:racing:usa");
})
.thenAccept(System.out::println) // >>> ["bike:1"]
.toCompletableFuture();
CompletableFuture<Void> sCard = sInter.thenCompose(r -> {
return asyncCommands.scard("bikes:racing:france");
})
.thenAccept(System.out::println) // >>> 3
.toCompletableFuture();
CompletableFuture<Void> sAddSMembers = sCard.thenCompose(r -> {
return asyncCommands.del("bikes:racing:france");
}).thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
}).thenCompose(res5 -> {
System.out.println(res5); // >>> 3
return asyncCommands.smembers("bikes:racing:france");
})
.thenAccept(System.out::println)
// >>> [bike:1, bike:2, bike:3]
.toCompletableFuture();
CompletableFuture<Void> sMIsMember = sAddSMembers.thenCompose(r -> {
return asyncCommands.sismember("bikes:racing:france", "bike:1");
}).thenCompose(res6 -> {
System.out.println(res6); // >>> True
return asyncCommands.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4");
})
.thenAccept(System.out::println) // >>> [true, true, false]
.toCompletableFuture();
CompletableFuture<Void> sDiff = sMIsMember.thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
}).thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4");
}).thenCompose(r -> {
return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa");
})
.thenAccept(System.out::println) // >>> [bike:2, bike:3]
.toCompletableFuture();
CompletableFuture<Void> multisets = sDiff.thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
}).thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4");
}).thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4");
}).thenCompose(r -> {
return asyncCommands.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
}).thenCompose(res7 -> {
System.out.println(res7); // >>> [bike:1]
return asyncCommands.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
}).thenCompose(res8 -> {
System.out.println(res8);
// >>> [bike:1, bike:2, bike:3, bike:4]
return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
}).thenCompose(res9 -> {
System.out.println(res9); // >>> []
return asyncCommands.sdiff("bikes:racing:usa", "bikes:racing:france");
}).thenCompose(res10 -> {
System.out.println(res10); // >>> [bike:4]
return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa");
})
.thenAccept(System.out::println) // >>> [bike:2, bike:3]
.toCompletableFuture();
CompletableFuture<Void> sRem = multisets.thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5");
}).thenCompose(r -> {
return asyncCommands.srem("bikes:racing:france", "bike:1");
}).thenCompose(res11 -> {
System.out.println(res11); // >>> 1
return asyncCommands.spop("bikes:racing:france");
}).thenCompose(res12 -> {
System.out.println(res12); // >>> bike:3 (for example)
return asyncCommands.smembers("bikes:racing:france");
}).thenCompose(res13 -> {
System.out.println(res13); // >>> [bike:2, bike:4, bike:5]
return asyncCommands.srandmember("bikes:racing:france");
}).thenAccept(System.out::println) // >>> bike:4
.toCompletableFuture();
CompletableFuture.allOf(
sRem).join();
} finally {
redisClient.shutdown();
}
}
}
package example_commands_test
import (
"context"
"fmt"
"sort"
"github.com/redis/go-redis/v9"
)
func ExampleClient_sadd() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res1, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res1) // >>> 1
res2, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res2) // >>> 0
res3, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res3) // >>> 2
res4, err := rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
if err != nil {
panic(err)
}
fmt.Println(res4) // >>> 2
}
func ExampleClient_sismember() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
if err != nil {
panic(err)
}
res5, err := rdb.SIsMember(ctx, "bikes:racing:usa", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res5) // >>> true
res6, err := rdb.SIsMember(ctx, "bikes:racing:usa", "bike:2").Result()
if err != nil {
panic(err)
}
fmt.Println(res6) // >>> false
}
func ExampleClient_sinter() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
if err != nil {
panic(err)
}
res7, err := rdb.SInter(ctx, "bikes:racing:france", "bikes:racing:usa").Result()
if err != nil {
panic(err)
}
fmt.Println(res7) // >>> [bike:1]
}
func ExampleClient_scard() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
res8, err := rdb.SCard(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res8) // >>> 3
}
func ExampleClient_saddsmembers() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res9, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res9) // >>> 3
res10, err := rdb.SMembers(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
// Sort the strings in the slice to make sure the output is lexicographical
sort.Strings(res10)
fmt.Println(res10) // >>> [bike:1 bike:2 bike:3]
}
func ExampleClient_smismember() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
res11, err := rdb.SIsMember(ctx, "bikes:racing:france", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res11) // >>> true
res12, err := rdb.SMIsMember(ctx, "bikes:racing:france", "bike:2", "bike:3", "bike:4").Result()
if err != nil {
panic(err)
}
fmt.Println(res12) // >>> [true true false]
}
func ExampleClient_sdiff() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
res13, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa").Result()
if err != nil {
panic(err)
}
// Sort the strings in the slice to make sure the output is lexicographical
sort.Strings(res13)
fmt.Println(res13) // >>> [bike:2 bike:3]
}
func ExampleClient_multisets() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4").Result()
if err != nil {
panic(err)
}
res14, err := rdb.SInter(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result()
if err != nil {
panic(err)
}
fmt.Println(res14) // >>> [bike:1]
res15, err := rdb.SUnion(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result()
if err != nil {
panic(err)
}
// Sort the strings in the slice to make sure the output is lexicographical
sort.Strings(res15)
fmt.Println(res15) // >>> [bike:1 bike:2 bike:3 bike:4]
res16, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result()
if err != nil {
panic(err)
}
fmt.Println(res16) // >>> []
res17, err := rdb.SDiff(ctx, "bikes:racing:usa", "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res17) // >>> [bike:4]
res18, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa").Result()
if err != nil {
panic(err)
}
// Sort the strings in the slice to make sure the output is lexicographical
sort.Strings(res18)
fmt.Println(res18) // >>> [bike:2 bike:3]
}
func ExampleClient_srem() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result()
if err != nil {
panic(err)
}
res19, err := rdb.SRem(ctx, "bikes:racing:france", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res19) // >>> 1
res20, err := rdb.SPop(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res20) // >>> <random element>
res21, err := rdb.SMembers(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res21) // >>> <remaining elements>
res22, err := rdb.SRandMember(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res22) // >>> <random element>
// Testable examples not available because the test output
// is not deterministic.
}
using System.Data.Common;
using NRedisStack.Tests;
using StackExchange.Redis;
public class SetsExample
{
public void run()
{
var muxer = ConnectionMultiplexer.Connect("localhost:6379");
var db = muxer.GetDatabase();
long res1 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1" });
Console.WriteLine(res1); // >>> 1
long res2 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1" });
Console.WriteLine(res2); // >>> 0
long res3 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:2", "bike:3" });
Console.WriteLine(res3); // >>> 2
long res4 = db.SetAdd("bikes:racing:usa", new RedisValue[] { "bike:1", "bike:4" });
Console.WriteLine(res4); // >>> 2
// Tests for 'sadd' step.
bool res5 = db.SetContains("bikes:racing:france", "bike:1");
Console.WriteLine(res5); // >>> True
bool res6 = db.SetContains("bikes:racing:usa", "bike:2");
Console.WriteLine(res6); // >>> False
// Tests for 'sismember' step.
long res7 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
long res8 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" });
RedisValue[] res9 = db.SetCombine(SetOperation.Intersect, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" });
Console.WriteLine(string.Join(", ", res9)); // >>> bike:1
// Tests for 'sinter' step.
long res10 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
long res11 = db.SetLength("bikes:racing:france");
Console.WriteLine(res11); // >>> 3
// Tests for 'scard' step.
long res12 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
RedisValue[] res13 = db.SetMembers("bikes:racing:france");
Console.WriteLine(string.Join(", ", res13)); // >>> bike:3, bike:2, bike:1
// Tests for 'sadd_smembers' step.
bool res14 = db.SetContains("bikes:racing:france", "bike:1");
Console.WriteLine(res14); // >>> true
bool[] res15 = db.SetContains("bikes:racing:france", new RedisValue[] { "bike:2", "bike:3", "bike:4" });
Console.WriteLine(string.Join(", ", res15)); // >>> True, True, False
// Tests for 'smismember' step.
long res16 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
long res17 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" });
RedisValue[] res18 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" });
Console.WriteLine(string.Join(", ", res18)); // >>> bike:2, bike:3
// Tests for 'sdiff' step.
long res19 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
long res20 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" });
long res21 = db.SetAdd("{bikes:racing}:italy", new RedisValue[] { "bike:1", "bike:2", "bike:3", "bike:4" });
RedisValue[] res22 = db.SetCombine(SetOperation.Intersect, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" });
Console.WriteLine(string.Join(", ", res22)); // >>> bike:1
RedisValue[] res23 = db.SetCombine(SetOperation.Union, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" });
Console.WriteLine(string.Join(", ", res23)); // >>> bike:1, bike:2, bike:3, bike:4
RedisValue[] res24 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" });
Console.WriteLine(string.Join(", ", res24)); // >>> <empty set>
RedisValue[] res25 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:usa", "{bikes:racing}:france" });
Console.WriteLine(string.Join(", ", res25)); // >>> bike:4
RedisValue[] res26 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" });
Console.WriteLine(string.Join(", ", res26)); // >>> bike:2, bike:3
// Tests for 'multisets' step.
long res27 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3", "bike:4", "bike:5" });
bool res28 = db.SetRemove("bikes:racing:france", "bike:1");
Console.WriteLine(res28); // >>> True
RedisValue res29 = db.SetPop("bikes:racing:france");
Console.WriteLine(res29); // >>> bike:3
RedisValue[] res30 = db.SetMembers("bikes:racing:france");
Console.WriteLine(string.Join(", ", res30)); // >>> bike:2, bike:4, bike:5
RedisValue res31 = db.SetRandomMember("bikes:racing:france");
Console.WriteLine(res31); // >>> bike:4
// Tests for 'srem' step.
}
}
还有其他一些非平凡操作,使用正确的 Redis 命令仍然很容易实现。例如,我们可能想要一个在法国、美国和其他一些比赛中参赛的所有自行车的列表。我们可以使用 SINTER
命令来做到这一点,该命令执行不同集合之间的交集操作。除了交集,您还可以执行并集、差集等操作。例如,如果我们添加第三场比赛,我们可以看到其中一些命令的实际应用
> SADD bikes:racing:france bike:1 bike:2 bike:3
(integer) 3
> SADD bikes:racing:usa bike:1 bike:4
(integer) 2
> SADD bikes:racing:italy bike:1 bike:2 bike:3 bike:4
(integer) 4
> SINTER bikes:racing:france bikes:racing:usa bikes:racing:italy
1) "bike:1"
> SUNION bikes:racing:france bikes:racing:usa bikes:racing:italy
1) "bike:2"
2) "bike:1"
3) "bike:4"
4) "bike:3"
> SDIFF bikes:racing:france bikes:racing:usa bikes:racing:italy
(empty array)
> SDIFF bikes:racing:france bikes:racing:usa
1) "bike:3"
2) "bike:2"
> SDIFF bikes:racing:usa bikes:racing:france
1) "bike:4"
"""
Code samples for Set doc pages:
https://redis.ac.cn/docs/latest/develop/data-types/sets/
"""
import redis
r = redis.Redis(decode_responses=True)
res1 = r.sadd("bikes:racing:france", "bike:1")
print(res1) # >>> 1
res2 = r.sadd("bikes:racing:france", "bike:1")
print(res2) # >>> 0
res3 = r.sadd("bikes:racing:france", "bike:2", "bike:3")
print(res3) # >>> 2
res4 = r.sadd("bikes:racing:usa", "bike:1", "bike:4")
print(res4) # >>> 2
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
r.sadd("bikes:racing:usa", "bike:1", "bike:4")
res5 = r.sismember("bikes:racing:usa", "bike:1")
print(res5) # >>> 1
res6 = r.sismember("bikes:racing:usa", "bike:2")
print(res6) # >>> 0
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
r.sadd("bikes:racing:usa", "bike:1", "bike:4")
res7 = r.sinter("bikes:racing:france", "bikes:racing:usa")
print(res7) # >>> {'bike:1'}
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
res8 = r.scard("bikes:racing:france")
print(res8) # >>> 3
res9 = r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
print(res9) # >>> 3
res10 = r.smembers("bikes:racing:france")
print(res10) # >>> {'bike:1', 'bike:2', 'bike:3'}
res11 = r.sismember("bikes:racing:france", "bike:1")
print(res11) # >>> 1
res12 = r.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4")
print(res12) # >>> [1, 1, 0]
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
r.sadd("bikes:racing:usa", "bike:1", "bike:4")
res13 = r.sdiff("bikes:racing:france", "bikes:racing:usa")
print(res13) # >>> {'bike:2', 'bike:3'}
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
r.sadd("bikes:racing:usa", "bike:1", "bike:4")
r.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4")
res13 = r.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy")
print(res13) # >>> {'bike:1'}
res14 = r.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy")
print(res14) # >>> {'bike:1', 'bike:2', 'bike:3', 'bike:4'}
res15 = r.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy")
print(res15) # >>> {}
res16 = r.sdiff("bikes:racing:usa", "bikes:racing:france")
print(res16) # >>> {'bike:4'}
res17 = r.sdiff("bikes:racing:france", "bikes:racing:usa")
print(res17) # >>> {'bike:2', 'bike:3'}
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5")
res18 = r.srem("bikes:racing:france", "bike:1")
print(res18) # >>> 1
res19 = r.spop("bikes:racing:france")
print(res19) # >>> bike:3
res20 = r.smembers("bikes:racing:france")
print(res20) # >>> {'bike:2', 'bike:4', 'bike:5'}
res21 = r.srandmember("bikes:racing:france")
print(res21) # >>> bike:4
import assert from 'assert';
import { createClient } from 'redis';
const client = await createClient();
await client.connect();
const res1 = await client.sAdd('bikes:racing:france', 'bike:1')
console.log(res1) // >>> 1
const res2 = await client.sAdd('bikes:racing:france', 'bike:1')
console.log(res2) // >>> 0
const res3 = await client.sAdd('bikes:racing:france', ['bike:2', 'bike:3'])
console.log(res3) // >>> 2
const res4 = await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4'])
console.log(res4) // >>> 2
await client.del('bikes:racing:france')
await client.del('bikes:racing:usa')
await client.sAdd('bikes:racing:france', 'bike:1', 'bike:2', 'bike:3')
await client.sAdd('bikes:racing:usa', 'bike:1', 'bike:4')
const res5 = await client.sIsMember('bikes:racing:usa', 'bike:1')
console.log(res5) // >>> true
const res6 = await client.sIsMember('bikes:racing:usa', 'bike:2')
console.log(res6) // >>> false
await client.del('bikes:racing:france')
await client.del('bikes:racing:usa')
await client.sAdd('bikes:racing:france', 'bike:1', 'bike:2', 'bike:3')
await client.sAdd('bikes:racing:usa', 'bike:1', 'bike:4')
const res7 = await client.sInter('bikes:racing:france', 'bikes:racing:usa')
console.log(res7) // >>> {'bike:1'}
await client.del('bikes:racing:france')
await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3'])
const res8 = await client.sCard('bikes:racing:france')
console.log(res8) // >>> 3
const res9 = await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3'])
console.log(res9) // >>> 3
const res10 = await client.sMembers('bikes:racing:france')
console.log(res10) // >>> ['bike:1', 'bike:2', 'bike:3']
const res11 = await client.sIsMember('bikes:racing:france', 'bike:1')
console.log(res11) // >>> true
const res12 = await client.smIsMember('bikes:racing:france', ['bike:2', 'bike:3', 'bike:4'])
console.log(res12) // >>> [true, true, false]
await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3'])
await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4'])
const res13 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa'])
console.log(res13) // >>> [ 'bike:2', 'bike:3' ]
await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3'])
await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4'])
await client.sAdd('bikes:racing:italy', ['bike:1', 'bike:2', 'bike:3', 'bike:4'])
const res14 = await client.sInter(
['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy']
)
console.log(res14) // >>> ['bike:1']
const res15 = await client.sUnion(
['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy']
)
console.log(res15) // >>> ['bike:1', 'bike:2', 'bike:3', 'bike:4']
const res16 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy'])
console.log(res16) // >>> []
const res17 = await client.sDiff(['bikes:racing:usa', 'bikes:racing:france'])
console.log(res17) // >>> ['bike:4']
const res18 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa'])
console.log(res18) // >>> ['bike:2', 'bike:3']
debugger;
await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'])
const res19 = await client.sRem('bikes:racing:france', 'bike:1')
console.log(res19) // >>> 1
const res20 = await client.sPop('bikes:racing:france')
console.log(res20) // >>> bike:3 or other random value
const res21 = await client.sMembers('bikes:racing:france')
console.log(res21) // >>> ['bike:2', 'bike:4', 'bike:5']; depends on previous result
const res22 = await client.sRandMember('bikes:racing:france')
console.log(res22) // >>> bike:4 or other random value
package io.redis.examples;
import redis.clients.jedis.UnifiedJedis;
import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.Set;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class SetsExample {
public void run() {
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
long res1 = jedis.sadd("bikes:racing:france", "bike:1");
System.out.println(res1); // >>> 1
long res2 = jedis.sadd("bikes:racing:france", "bike:1");
System.out.println(res2); // >>> 0
long res3 = jedis.sadd("bikes:racing:france", "bike:2", "bike:3");
System.out.println(res3); // >>> 2
long res4 = jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
System.out.println(res4); // >>> 2
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
boolean res5 = jedis.sismember("bikes:racing:usa", "bike:1");
System.out.println(res5); // >>> true
boolean res6 = jedis.sismember("bikes:racing:usa", "bike:2");
System.out.println(res6); // >>> false
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
Set<String> res7 = jedis.sinter("bikes:racing:france", "bikes:racing:usa");
System.out.println(res7); // >>> [bike:1]
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
long res8 = jedis.scard("bikes:racing:france");
System.out.println(res8); // >>> 3
long res9 = jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
System.out.println(res9); // >>> 3
Set<String> res10 = jedis.smembers("bikes:racing:france");
System.out.println(res10); // >>> [bike:1, bike:2, bike:3]
boolean res11 = jedis.sismember("bikes:racing:france", "bike:1");
System.out.println(res11); // >>> true
List<Boolean> res12 = jedis.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4");
System.out.println(res12); // >>> [true,true,false]
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
Set<String> res13 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa");
System.out.println(res13); // >>> [bike:2, bike:3]
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
jedis.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4");
Set<String> res14 = jedis.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
System.out.println(res14); // >>> [bike:1]
Set<String> res15 = jedis.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
System.out.println(res15); // >>> [bike:1, bike:2, bike:3, bike:4]
Set<String> res16 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
System.out.println(res16); // >>> []
Set<String> res17 = jedis.sdiff("bikes:racing:usa", "bikes:racing:france");
System.out.println(res17); // >>> [bike:4]
Set<String> res18 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa");
System.out.println(res18); // >>> [bike:2, bike:3]
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5");
long res19 = jedis.srem("bikes:racing:france", "bike:1");
System.out.println(res18); // >>> 1
String res20 = jedis.spop("bikes:racing:france");
System.out.println(res20); // >>> bike:3
Set<String> res21 = jedis.smembers("bikes:racing:france");
System.out.println(res21); // >>> [bike:2, bike:4, bike:5]
String res22 = jedis.srandmember("bikes:racing:france");
System.out.println(res22); // >>> bike:4
jedis.close();
}
}
package io.redis.examples.async;
import io.lettuce.core.*;
import io.lettuce.core.api.async.RedisAsyncCommands;
import io.lettuce.core.api.StatefulRedisConnection;
import java.util.*;
import static java.util.stream.Collectors.*;
import java.util.concurrent.CompletableFuture;
public class SetExample {
public void run() {
RedisClient redisClient = RedisClient.create("redis://localhost:6379");
try (StatefulRedisConnection<String, String> connection = redisClient.connect()) {
RedisAsyncCommands<String, String> asyncCommands = connection.async();
CompletableFuture<Void> sAdd = asyncCommands.sadd("bikes:racing:france", "bike:1").thenCompose(res1 -> {
System.out.println(res1); // >>> 1
return asyncCommands.sadd("bikes:racing:france", "bike:1");
}).thenCompose(res2 -> {
System.out.println(res2); // >>> 0
return asyncCommands.sadd("bikes:racing:france", "bike:2", "bike:3");
}).thenCompose(res3 -> {
System.out.println(res3); // >>> 2
return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4");
})
.thenAccept(System.out::println)
// >>> 2
.toCompletableFuture();
CompletableFuture<Void> sIsMember = sAdd.thenCompose(r -> {
return asyncCommands.sismember("bikes:racing:usa", "bike:1");
}).thenCompose(res4 -> {
System.out.println(res4); // >>> true
return asyncCommands.sismember("bikes:racing:usa", "bike:2");
})
.thenAccept(System.out::println) // >>> false
.toCompletableFuture();
CompletableFuture<Void> sInter = sIsMember.thenCompose(r -> {
return asyncCommands.sinter("bikes:racing:france", "bikes:racing:usa");
})
.thenAccept(System.out::println) // >>> ["bike:1"]
.toCompletableFuture();
CompletableFuture<Void> sCard = sInter.thenCompose(r -> {
return asyncCommands.scard("bikes:racing:france");
})
.thenAccept(System.out::println) // >>> 3
.toCompletableFuture();
CompletableFuture<Void> sAddSMembers = sCard.thenCompose(r -> {
return asyncCommands.del("bikes:racing:france");
}).thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
}).thenCompose(res5 -> {
System.out.println(res5); // >>> 3
return asyncCommands.smembers("bikes:racing:france");
})
.thenAccept(System.out::println)
// >>> [bike:1, bike:2, bike:3]
.toCompletableFuture();
CompletableFuture<Void> sMIsMember = sAddSMembers.thenCompose(r -> {
return asyncCommands.sismember("bikes:racing:france", "bike:1");
}).thenCompose(res6 -> {
System.out.println(res6); // >>> True
return asyncCommands.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4");
})
.thenAccept(System.out::println) // >>> [true, true, false]
.toCompletableFuture();
CompletableFuture<Void> sDiff = sMIsMember.thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
}).thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4");
}).thenCompose(r -> {
return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa");
})
.thenAccept(System.out::println) // >>> [bike:2, bike:3]
.toCompletableFuture();
CompletableFuture<Void> multisets = sDiff.thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
}).thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4");
}).thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4");
}).thenCompose(r -> {
return asyncCommands.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
}).thenCompose(res7 -> {
System.out.println(res7); // >>> [bike:1]
return asyncCommands.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
}).thenCompose(res8 -> {
System.out.println(res8);
// >>> [bike:1, bike:2, bike:3, bike:4]
return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
}).thenCompose(res9 -> {
System.out.println(res9); // >>> []
return asyncCommands.sdiff("bikes:racing:usa", "bikes:racing:france");
}).thenCompose(res10 -> {
System.out.println(res10); // >>> [bike:4]
return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa");
})
.thenAccept(System.out::println) // >>> [bike:2, bike:3]
.toCompletableFuture();
CompletableFuture<Void> sRem = multisets.thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5");
}).thenCompose(r -> {
return asyncCommands.srem("bikes:racing:france", "bike:1");
}).thenCompose(res11 -> {
System.out.println(res11); // >>> 1
return asyncCommands.spop("bikes:racing:france");
}).thenCompose(res12 -> {
System.out.println(res12); // >>> bike:3 (for example)
return asyncCommands.smembers("bikes:racing:france");
}).thenCompose(res13 -> {
System.out.println(res13); // >>> [bike:2, bike:4, bike:5]
return asyncCommands.srandmember("bikes:racing:france");
}).thenAccept(System.out::println) // >>> bike:4
.toCompletableFuture();
CompletableFuture.allOf(
sRem).join();
} finally {
redisClient.shutdown();
}
}
}
package example_commands_test
import (
"context"
"fmt"
"sort"
"github.com/redis/go-redis/v9"
)
func ExampleClient_sadd() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res1, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res1) // >>> 1
res2, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res2) // >>> 0
res3, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res3) // >>> 2
res4, err := rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
if err != nil {
panic(err)
}
fmt.Println(res4) // >>> 2
}
func ExampleClient_sismember() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
if err != nil {
panic(err)
}
res5, err := rdb.SIsMember(ctx, "bikes:racing:usa", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res5) // >>> true
res6, err := rdb.SIsMember(ctx, "bikes:racing:usa", "bike:2").Result()
if err != nil {
panic(err)
}
fmt.Println(res6) // >>> false
}
func ExampleClient_sinter() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
if err != nil {
panic(err)
}
res7, err := rdb.SInter(ctx, "bikes:racing:france", "bikes:racing:usa").Result()
if err != nil {
panic(err)
}
fmt.Println(res7) // >>> [bike:1]
}
func ExampleClient_scard() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
res8, err := rdb.SCard(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res8) // >>> 3
}
func ExampleClient_saddsmembers() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res9, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res9) // >>> 3
res10, err := rdb.SMembers(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
// Sort the strings in the slice to make sure the output is lexicographical
sort.Strings(res10)
fmt.Println(res10) // >>> [bike:1 bike:2 bike:3]
}
func ExampleClient_smismember() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
res11, err := rdb.SIsMember(ctx, "bikes:racing:france", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res11) // >>> true
res12, err := rdb.SMIsMember(ctx, "bikes:racing:france", "bike:2", "bike:3", "bike:4").Result()
if err != nil {
panic(err)
}
fmt.Println(res12) // >>> [true true false]
}
func ExampleClient_sdiff() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
res13, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa").Result()
if err != nil {
panic(err)
}
// Sort the strings in the slice to make sure the output is lexicographical
sort.Strings(res13)
fmt.Println(res13) // >>> [bike:2 bike:3]
}
func ExampleClient_multisets() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4").Result()
if err != nil {
panic(err)
}
res14, err := rdb.SInter(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result()
if err != nil {
panic(err)
}
fmt.Println(res14) // >>> [bike:1]
res15, err := rdb.SUnion(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result()
if err != nil {
panic(err)
}
// Sort the strings in the slice to make sure the output is lexicographical
sort.Strings(res15)
fmt.Println(res15) // >>> [bike:1 bike:2 bike:3 bike:4]
res16, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result()
if err != nil {
panic(err)
}
fmt.Println(res16) // >>> []
res17, err := rdb.SDiff(ctx, "bikes:racing:usa", "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res17) // >>> [bike:4]
res18, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa").Result()
if err != nil {
panic(err)
}
// Sort the strings in the slice to make sure the output is lexicographical
sort.Strings(res18)
fmt.Println(res18) // >>> [bike:2 bike:3]
}
func ExampleClient_srem() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result()
if err != nil {
panic(err)
}
res19, err := rdb.SRem(ctx, "bikes:racing:france", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res19) // >>> 1
res20, err := rdb.SPop(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res20) // >>> <random element>
res21, err := rdb.SMembers(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res21) // >>> <remaining elements>
res22, err := rdb.SRandMember(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res22) // >>> <random element>
// Testable examples not available because the test output
// is not deterministic.
}
using System.Data.Common;
using NRedisStack.Tests;
using StackExchange.Redis;
public class SetsExample
{
public void run()
{
var muxer = ConnectionMultiplexer.Connect("localhost:6379");
var db = muxer.GetDatabase();
long res1 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1" });
Console.WriteLine(res1); // >>> 1
long res2 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1" });
Console.WriteLine(res2); // >>> 0
long res3 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:2", "bike:3" });
Console.WriteLine(res3); // >>> 2
long res4 = db.SetAdd("bikes:racing:usa", new RedisValue[] { "bike:1", "bike:4" });
Console.WriteLine(res4); // >>> 2
// Tests for 'sadd' step.
bool res5 = db.SetContains("bikes:racing:france", "bike:1");
Console.WriteLine(res5); // >>> True
bool res6 = db.SetContains("bikes:racing:usa", "bike:2");
Console.WriteLine(res6); // >>> False
// Tests for 'sismember' step.
long res7 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
long res8 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" });
RedisValue[] res9 = db.SetCombine(SetOperation.Intersect, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" });
Console.WriteLine(string.Join(", ", res9)); // >>> bike:1
// Tests for 'sinter' step.
long res10 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
long res11 = db.SetLength("bikes:racing:france");
Console.WriteLine(res11); // >>> 3
// Tests for 'scard' step.
long res12 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
RedisValue[] res13 = db.SetMembers("bikes:racing:france");
Console.WriteLine(string.Join(", ", res13)); // >>> bike:3, bike:2, bike:1
// Tests for 'sadd_smembers' step.
bool res14 = db.SetContains("bikes:racing:france", "bike:1");
Console.WriteLine(res14); // >>> true
bool[] res15 = db.SetContains("bikes:racing:france", new RedisValue[] { "bike:2", "bike:3", "bike:4" });
Console.WriteLine(string.Join(", ", res15)); // >>> True, True, False
// Tests for 'smismember' step.
long res16 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
long res17 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" });
RedisValue[] res18 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" });
Console.WriteLine(string.Join(", ", res18)); // >>> bike:2, bike:3
// Tests for 'sdiff' step.
long res19 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
long res20 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" });
long res21 = db.SetAdd("{bikes:racing}:italy", new RedisValue[] { "bike:1", "bike:2", "bike:3", "bike:4" });
RedisValue[] res22 = db.SetCombine(SetOperation.Intersect, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" });
Console.WriteLine(string.Join(", ", res22)); // >>> bike:1
RedisValue[] res23 = db.SetCombine(SetOperation.Union, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" });
Console.WriteLine(string.Join(", ", res23)); // >>> bike:1, bike:2, bike:3, bike:4
RedisValue[] res24 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" });
Console.WriteLine(string.Join(", ", res24)); // >>> <empty set>
RedisValue[] res25 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:usa", "{bikes:racing}:france" });
Console.WriteLine(string.Join(", ", res25)); // >>> bike:4
RedisValue[] res26 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" });
Console.WriteLine(string.Join(", ", res26)); // >>> bike:2, bike:3
// Tests for 'multisets' step.
long res27 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3", "bike:4", "bike:5" });
bool res28 = db.SetRemove("bikes:racing:france", "bike:1");
Console.WriteLine(res28); // >>> True
RedisValue res29 = db.SetPop("bikes:racing:france");
Console.WriteLine(res29); // >>> bike:3
RedisValue[] res30 = db.SetMembers("bikes:racing:france");
Console.WriteLine(string.Join(", ", res30)); // >>> bike:2, bike:4, bike:5
RedisValue res31 = db.SetRandomMember("bikes:racing:france");
Console.WriteLine(res31); // >>> bike:4
// Tests for 'srem' step.
}
}
您会注意到,当所有集合之间的差集为空时,SDIFF
命令会返回一个空数组。您还会注意到,传递给 SDIFF
命令的集合顺序很重要,因为差集是非交换性的。
当您想从集合中移除项目时,可以使用 SREM
命令移除集合中的一个或多个项目,或者使用 SPOP
命令从集合中移除一个随机项目。您还可以使用 SRANDMEMBER
命令返回集合中的一个随机项目而不将其移除
> SADD bikes:racing:france bike:1 bike:2 bike:3 bike:4 bike:5
(integer) 5
> SREM bikes:racing:france bike:1
(integer) 1
> SPOP bikes:racing:france
"bike:3"
> SMEMBERS bikes:racing:france
1) "bike:2"
2) "bike:4"
3) "bike:5"
> SRANDMEMBER bikes:racing:france
"bike:2"
"""
Code samples for Set doc pages:
https://redis.ac.cn/docs/latest/develop/data-types/sets/
"""
import redis
r = redis.Redis(decode_responses=True)
res1 = r.sadd("bikes:racing:france", "bike:1")
print(res1) # >>> 1
res2 = r.sadd("bikes:racing:france", "bike:1")
print(res2) # >>> 0
res3 = r.sadd("bikes:racing:france", "bike:2", "bike:3")
print(res3) # >>> 2
res4 = r.sadd("bikes:racing:usa", "bike:1", "bike:4")
print(res4) # >>> 2
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
r.sadd("bikes:racing:usa", "bike:1", "bike:4")
res5 = r.sismember("bikes:racing:usa", "bike:1")
print(res5) # >>> 1
res6 = r.sismember("bikes:racing:usa", "bike:2")
print(res6) # >>> 0
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
r.sadd("bikes:racing:usa", "bike:1", "bike:4")
res7 = r.sinter("bikes:racing:france", "bikes:racing:usa")
print(res7) # >>> {'bike:1'}
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
res8 = r.scard("bikes:racing:france")
print(res8) # >>> 3
res9 = r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
print(res9) # >>> 3
res10 = r.smembers("bikes:racing:france")
print(res10) # >>> {'bike:1', 'bike:2', 'bike:3'}
res11 = r.sismember("bikes:racing:france", "bike:1")
print(res11) # >>> 1
res12 = r.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4")
print(res12) # >>> [1, 1, 0]
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
r.sadd("bikes:racing:usa", "bike:1", "bike:4")
res13 = r.sdiff("bikes:racing:france", "bikes:racing:usa")
print(res13) # >>> {'bike:2', 'bike:3'}
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3")
r.sadd("bikes:racing:usa", "bike:1", "bike:4")
r.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4")
res13 = r.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy")
print(res13) # >>> {'bike:1'}
res14 = r.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy")
print(res14) # >>> {'bike:1', 'bike:2', 'bike:3', 'bike:4'}
res15 = r.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy")
print(res15) # >>> {}
res16 = r.sdiff("bikes:racing:usa", "bikes:racing:france")
print(res16) # >>> {'bike:4'}
res17 = r.sdiff("bikes:racing:france", "bikes:racing:usa")
print(res17) # >>> {'bike:2', 'bike:3'}
r.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5")
res18 = r.srem("bikes:racing:france", "bike:1")
print(res18) # >>> 1
res19 = r.spop("bikes:racing:france")
print(res19) # >>> bike:3
res20 = r.smembers("bikes:racing:france")
print(res20) # >>> {'bike:2', 'bike:4', 'bike:5'}
res21 = r.srandmember("bikes:racing:france")
print(res21) # >>> bike:4
import assert from 'assert';
import { createClient } from 'redis';
const client = await createClient();
await client.connect();
const res1 = await client.sAdd('bikes:racing:france', 'bike:1')
console.log(res1) // >>> 1
const res2 = await client.sAdd('bikes:racing:france', 'bike:1')
console.log(res2) // >>> 0
const res3 = await client.sAdd('bikes:racing:france', ['bike:2', 'bike:3'])
console.log(res3) // >>> 2
const res4 = await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4'])
console.log(res4) // >>> 2
await client.del('bikes:racing:france')
await client.del('bikes:racing:usa')
await client.sAdd('bikes:racing:france', 'bike:1', 'bike:2', 'bike:3')
await client.sAdd('bikes:racing:usa', 'bike:1', 'bike:4')
const res5 = await client.sIsMember('bikes:racing:usa', 'bike:1')
console.log(res5) // >>> true
const res6 = await client.sIsMember('bikes:racing:usa', 'bike:2')
console.log(res6) // >>> false
await client.del('bikes:racing:france')
await client.del('bikes:racing:usa')
await client.sAdd('bikes:racing:france', 'bike:1', 'bike:2', 'bike:3')
await client.sAdd('bikes:racing:usa', 'bike:1', 'bike:4')
const res7 = await client.sInter('bikes:racing:france', 'bikes:racing:usa')
console.log(res7) // >>> {'bike:1'}
await client.del('bikes:racing:france')
await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3'])
const res8 = await client.sCard('bikes:racing:france')
console.log(res8) // >>> 3
const res9 = await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3'])
console.log(res9) // >>> 3
const res10 = await client.sMembers('bikes:racing:france')
console.log(res10) // >>> ['bike:1', 'bike:2', 'bike:3']
const res11 = await client.sIsMember('bikes:racing:france', 'bike:1')
console.log(res11) // >>> true
const res12 = await client.smIsMember('bikes:racing:france', ['bike:2', 'bike:3', 'bike:4'])
console.log(res12) // >>> [true, true, false]
await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3'])
await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4'])
const res13 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa'])
console.log(res13) // >>> [ 'bike:2', 'bike:3' ]
await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3'])
await client.sAdd('bikes:racing:usa', ['bike:1', 'bike:4'])
await client.sAdd('bikes:racing:italy', ['bike:1', 'bike:2', 'bike:3', 'bike:4'])
const res14 = await client.sInter(
['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy']
)
console.log(res14) // >>> ['bike:1']
const res15 = await client.sUnion(
['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy']
)
console.log(res15) // >>> ['bike:1', 'bike:2', 'bike:3', 'bike:4']
const res16 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa', 'bikes:racing:italy'])
console.log(res16) // >>> []
const res17 = await client.sDiff(['bikes:racing:usa', 'bikes:racing:france'])
console.log(res17) // >>> ['bike:4']
const res18 = await client.sDiff(['bikes:racing:france', 'bikes:racing:usa'])
console.log(res18) // >>> ['bike:2', 'bike:3']
debugger;
await client.sAdd('bikes:racing:france', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'])
const res19 = await client.sRem('bikes:racing:france', 'bike:1')
console.log(res19) // >>> 1
const res20 = await client.sPop('bikes:racing:france')
console.log(res20) // >>> bike:3 or other random value
const res21 = await client.sMembers('bikes:racing:france')
console.log(res21) // >>> ['bike:2', 'bike:4', 'bike:5']; depends on previous result
const res22 = await client.sRandMember('bikes:racing:france')
console.log(res22) // >>> bike:4 or other random value
package io.redis.examples;
import redis.clients.jedis.UnifiedJedis;
import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.Set;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class SetsExample {
public void run() {
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
long res1 = jedis.sadd("bikes:racing:france", "bike:1");
System.out.println(res1); // >>> 1
long res2 = jedis.sadd("bikes:racing:france", "bike:1");
System.out.println(res2); // >>> 0
long res3 = jedis.sadd("bikes:racing:france", "bike:2", "bike:3");
System.out.println(res3); // >>> 2
long res4 = jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
System.out.println(res4); // >>> 2
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
boolean res5 = jedis.sismember("bikes:racing:usa", "bike:1");
System.out.println(res5); // >>> true
boolean res6 = jedis.sismember("bikes:racing:usa", "bike:2");
System.out.println(res6); // >>> false
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
Set<String> res7 = jedis.sinter("bikes:racing:france", "bikes:racing:usa");
System.out.println(res7); // >>> [bike:1]
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
long res8 = jedis.scard("bikes:racing:france");
System.out.println(res8); // >>> 3
long res9 = jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
System.out.println(res9); // >>> 3
Set<String> res10 = jedis.smembers("bikes:racing:france");
System.out.println(res10); // >>> [bike:1, bike:2, bike:3]
boolean res11 = jedis.sismember("bikes:racing:france", "bike:1");
System.out.println(res11); // >>> true
List<Boolean> res12 = jedis.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4");
System.out.println(res12); // >>> [true,true,false]
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
Set<String> res13 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa");
System.out.println(res13); // >>> [bike:2, bike:3]
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");
jedis.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4");
Set<String> res14 = jedis.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
System.out.println(res14); // >>> [bike:1]
Set<String> res15 = jedis.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
System.out.println(res15); // >>> [bike:1, bike:2, bike:3, bike:4]
Set<String> res16 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
System.out.println(res16); // >>> []
Set<String> res17 = jedis.sdiff("bikes:racing:usa", "bikes:racing:france");
System.out.println(res17); // >>> [bike:4]
Set<String> res18 = jedis.sdiff("bikes:racing:france", "bikes:racing:usa");
System.out.println(res18); // >>> [bike:2, bike:3]
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5");
long res19 = jedis.srem("bikes:racing:france", "bike:1");
System.out.println(res18); // >>> 1
String res20 = jedis.spop("bikes:racing:france");
System.out.println(res20); // >>> bike:3
Set<String> res21 = jedis.smembers("bikes:racing:france");
System.out.println(res21); // >>> [bike:2, bike:4, bike:5]
String res22 = jedis.srandmember("bikes:racing:france");
System.out.println(res22); // >>> bike:4
jedis.close();
}
}
package io.redis.examples.async;
import io.lettuce.core.*;
import io.lettuce.core.api.async.RedisAsyncCommands;
import io.lettuce.core.api.StatefulRedisConnection;
import java.util.*;
import static java.util.stream.Collectors.*;
import java.util.concurrent.CompletableFuture;
public class SetExample {
public void run() {
RedisClient redisClient = RedisClient.create("redis://localhost:6379");
try (StatefulRedisConnection<String, String> connection = redisClient.connect()) {
RedisAsyncCommands<String, String> asyncCommands = connection.async();
CompletableFuture<Void> sAdd = asyncCommands.sadd("bikes:racing:france", "bike:1").thenCompose(res1 -> {
System.out.println(res1); // >>> 1
return asyncCommands.sadd("bikes:racing:france", "bike:1");
}).thenCompose(res2 -> {
System.out.println(res2); // >>> 0
return asyncCommands.sadd("bikes:racing:france", "bike:2", "bike:3");
}).thenCompose(res3 -> {
System.out.println(res3); // >>> 2
return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4");
})
.thenAccept(System.out::println)
// >>> 2
.toCompletableFuture();
CompletableFuture<Void> sIsMember = sAdd.thenCompose(r -> {
return asyncCommands.sismember("bikes:racing:usa", "bike:1");
}).thenCompose(res4 -> {
System.out.println(res4); // >>> true
return asyncCommands.sismember("bikes:racing:usa", "bike:2");
})
.thenAccept(System.out::println) // >>> false
.toCompletableFuture();
CompletableFuture<Void> sInter = sIsMember.thenCompose(r -> {
return asyncCommands.sinter("bikes:racing:france", "bikes:racing:usa");
})
.thenAccept(System.out::println) // >>> ["bike:1"]
.toCompletableFuture();
CompletableFuture<Void> sCard = sInter.thenCompose(r -> {
return asyncCommands.scard("bikes:racing:france");
})
.thenAccept(System.out::println) // >>> 3
.toCompletableFuture();
CompletableFuture<Void> sAddSMembers = sCard.thenCompose(r -> {
return asyncCommands.del("bikes:racing:france");
}).thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
}).thenCompose(res5 -> {
System.out.println(res5); // >>> 3
return asyncCommands.smembers("bikes:racing:france");
})
.thenAccept(System.out::println)
// >>> [bike:1, bike:2, bike:3]
.toCompletableFuture();
CompletableFuture<Void> sMIsMember = sAddSMembers.thenCompose(r -> {
return asyncCommands.sismember("bikes:racing:france", "bike:1");
}).thenCompose(res6 -> {
System.out.println(res6); // >>> True
return asyncCommands.smismember("bikes:racing:france", "bike:2", "bike:3", "bike:4");
})
.thenAccept(System.out::println) // >>> [true, true, false]
.toCompletableFuture();
CompletableFuture<Void> sDiff = sMIsMember.thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
}).thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4");
}).thenCompose(r -> {
return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa");
})
.thenAccept(System.out::println) // >>> [bike:2, bike:3]
.toCompletableFuture();
CompletableFuture<Void> multisets = sDiff.thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
}).thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:usa", "bike:1", "bike:4");
}).thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4");
}).thenCompose(r -> {
return asyncCommands.sinter("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
}).thenCompose(res7 -> {
System.out.println(res7); // >>> [bike:1]
return asyncCommands.sunion("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
}).thenCompose(res8 -> {
System.out.println(res8);
// >>> [bike:1, bike:2, bike:3, bike:4]
return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy");
}).thenCompose(res9 -> {
System.out.println(res9); // >>> []
return asyncCommands.sdiff("bikes:racing:usa", "bikes:racing:france");
}).thenCompose(res10 -> {
System.out.println(res10); // >>> [bike:4]
return asyncCommands.sdiff("bikes:racing:france", "bikes:racing:usa");
})
.thenAccept(System.out::println) // >>> [bike:2, bike:3]
.toCompletableFuture();
CompletableFuture<Void> sRem = multisets.thenCompose(r -> {
return asyncCommands.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5");
}).thenCompose(r -> {
return asyncCommands.srem("bikes:racing:france", "bike:1");
}).thenCompose(res11 -> {
System.out.println(res11); // >>> 1
return asyncCommands.spop("bikes:racing:france");
}).thenCompose(res12 -> {
System.out.println(res12); // >>> bike:3 (for example)
return asyncCommands.smembers("bikes:racing:france");
}).thenCompose(res13 -> {
System.out.println(res13); // >>> [bike:2, bike:4, bike:5]
return asyncCommands.srandmember("bikes:racing:france");
}).thenAccept(System.out::println) // >>> bike:4
.toCompletableFuture();
CompletableFuture.allOf(
sRem).join();
} finally {
redisClient.shutdown();
}
}
}
package example_commands_test
import (
"context"
"fmt"
"sort"
"github.com/redis/go-redis/v9"
)
func ExampleClient_sadd() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res1, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res1) // >>> 1
res2, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res2) // >>> 0
res3, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res3) // >>> 2
res4, err := rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
if err != nil {
panic(err)
}
fmt.Println(res4) // >>> 2
}
func ExampleClient_sismember() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
if err != nil {
panic(err)
}
res5, err := rdb.SIsMember(ctx, "bikes:racing:usa", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res5) // >>> true
res6, err := rdb.SIsMember(ctx, "bikes:racing:usa", "bike:2").Result()
if err != nil {
panic(err)
}
fmt.Println(res6) // >>> false
}
func ExampleClient_sinter() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
if err != nil {
panic(err)
}
res7, err := rdb.SInter(ctx, "bikes:racing:france", "bikes:racing:usa").Result()
if err != nil {
panic(err)
}
fmt.Println(res7) // >>> [bike:1]
}
func ExampleClient_scard() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
res8, err := rdb.SCard(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res8) // >>> 3
}
func ExampleClient_saddsmembers() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res9, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res9) // >>> 3
res10, err := rdb.SMembers(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
// Sort the strings in the slice to make sure the output is lexicographical
sort.Strings(res10)
fmt.Println(res10) // >>> [bike:1 bike:2 bike:3]
}
func ExampleClient_smismember() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
res11, err := rdb.SIsMember(ctx, "bikes:racing:france", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res11) // >>> true
res12, err := rdb.SMIsMember(ctx, "bikes:racing:france", "bike:2", "bike:3", "bike:4").Result()
if err != nil {
panic(err)
}
fmt.Println(res12) // >>> [true true false]
}
func ExampleClient_sdiff() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
res13, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa").Result()
if err != nil {
panic(err)
}
// Sort the strings in the slice to make sure the output is lexicographical
sort.Strings(res13)
fmt.Println(res13) // >>> [bike:2 bike:3]
}
func ExampleClient_multisets() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:usa", "bike:1", "bike:4").Result()
if err != nil {
panic(err)
}
_, err = rdb.SAdd(ctx, "bikes:racing:italy", "bike:1", "bike:2", "bike:3", "bike:4").Result()
if err != nil {
panic(err)
}
res14, err := rdb.SInter(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result()
if err != nil {
panic(err)
}
fmt.Println(res14) // >>> [bike:1]
res15, err := rdb.SUnion(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result()
if err != nil {
panic(err)
}
// Sort the strings in the slice to make sure the output is lexicographical
sort.Strings(res15)
fmt.Println(res15) // >>> [bike:1 bike:2 bike:3 bike:4]
res16, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa", "bikes:racing:italy").Result()
if err != nil {
panic(err)
}
fmt.Println(res16) // >>> []
res17, err := rdb.SDiff(ctx, "bikes:racing:usa", "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res17) // >>> [bike:4]
res18, err := rdb.SDiff(ctx, "bikes:racing:france", "bikes:racing:usa").Result()
if err != nil {
panic(err)
}
// Sort the strings in the slice to make sure the output is lexicographical
sort.Strings(res18)
fmt.Println(res18) // >>> [bike:2 bike:3]
}
func ExampleClient_srem() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
_, err := rdb.SAdd(ctx, "bikes:racing:france", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result()
if err != nil {
panic(err)
}
res19, err := rdb.SRem(ctx, "bikes:racing:france", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res19) // >>> 1
res20, err := rdb.SPop(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res20) // >>> <random element>
res21, err := rdb.SMembers(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res21) // >>> <remaining elements>
res22, err := rdb.SRandMember(ctx, "bikes:racing:france").Result()
if err != nil {
panic(err)
}
fmt.Println(res22) // >>> <random element>
// Testable examples not available because the test output
// is not deterministic.
}
using System.Data.Common;
using NRedisStack.Tests;
using StackExchange.Redis;
public class SetsExample
{
public void run()
{
var muxer = ConnectionMultiplexer.Connect("localhost:6379");
var db = muxer.GetDatabase();
long res1 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1" });
Console.WriteLine(res1); // >>> 1
long res2 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1" });
Console.WriteLine(res2); // >>> 0
long res3 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:2", "bike:3" });
Console.WriteLine(res3); // >>> 2
long res4 = db.SetAdd("bikes:racing:usa", new RedisValue[] { "bike:1", "bike:4" });
Console.WriteLine(res4); // >>> 2
// Tests for 'sadd' step.
bool res5 = db.SetContains("bikes:racing:france", "bike:1");
Console.WriteLine(res5); // >>> True
bool res6 = db.SetContains("bikes:racing:usa", "bike:2");
Console.WriteLine(res6); // >>> False
// Tests for 'sismember' step.
long res7 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
long res8 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" });
RedisValue[] res9 = db.SetCombine(SetOperation.Intersect, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" });
Console.WriteLine(string.Join(", ", res9)); // >>> bike:1
// Tests for 'sinter' step.
long res10 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
long res11 = db.SetLength("bikes:racing:france");
Console.WriteLine(res11); // >>> 3
// Tests for 'scard' step.
long res12 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
RedisValue[] res13 = db.SetMembers("bikes:racing:france");
Console.WriteLine(string.Join(", ", res13)); // >>> bike:3, bike:2, bike:1
// Tests for 'sadd_smembers' step.
bool res14 = db.SetContains("bikes:racing:france", "bike:1");
Console.WriteLine(res14); // >>> true
bool[] res15 = db.SetContains("bikes:racing:france", new RedisValue[] { "bike:2", "bike:3", "bike:4" });
Console.WriteLine(string.Join(", ", res15)); // >>> True, True, False
// Tests for 'smismember' step.
long res16 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
long res17 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" });
RedisValue[] res18 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" });
Console.WriteLine(string.Join(", ", res18)); // >>> bike:2, bike:3
// Tests for 'sdiff' step.
long res19 = db.SetAdd("{bikes:racing}:france", new RedisValue[] { "bike:1", "bike:2", "bike:3" });
long res20 = db.SetAdd("{bikes:racing}:usa", new RedisValue[] { "bike:1", "bike:4" });
long res21 = db.SetAdd("{bikes:racing}:italy", new RedisValue[] { "bike:1", "bike:2", "bike:3", "bike:4" });
RedisValue[] res22 = db.SetCombine(SetOperation.Intersect, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" });
Console.WriteLine(string.Join(", ", res22)); // >>> bike:1
RedisValue[] res23 = db.SetCombine(SetOperation.Union, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" });
Console.WriteLine(string.Join(", ", res23)); // >>> bike:1, bike:2, bike:3, bike:4
RedisValue[] res24 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa", "{bikes:racing}:italy" });
Console.WriteLine(string.Join(", ", res24)); // >>> <empty set>
RedisValue[] res25 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:usa", "{bikes:racing}:france" });
Console.WriteLine(string.Join(", ", res25)); // >>> bike:4
RedisValue[] res26 = db.SetCombine(SetOperation.Difference, new RedisKey[] { "{bikes:racing}:france", "{bikes:racing}:usa" });
Console.WriteLine(string.Join(", ", res26)); // >>> bike:2, bike:3
// Tests for 'multisets' step.
long res27 = db.SetAdd("bikes:racing:france", new RedisValue[] { "bike:1", "bike:2", "bike:3", "bike:4", "bike:5" });
bool res28 = db.SetRemove("bikes:racing:france", "bike:1");
Console.WriteLine(res28); // >>> True
RedisValue res29 = db.SetPop("bikes:racing:france");
Console.WriteLine(res29); // >>> bike:3
RedisValue[] res30 = db.SetMembers("bikes:racing:france");
Console.WriteLine(string.Join(", ", res30)); // >>> bike:2, bike:4, bike:5
RedisValue res31 = db.SetRandomMember("bikes:racing:france");
Console.WriteLine(res31); // >>> bike:4
// Tests for 'srem' step.
}
}
限制
Redis Set 的最大大小是 2^32 - 1 (4,294,967,295) 个成员。
性能
大多数 Set 操作,包括添加、移除和检查项目是否为集合成员,都是 O(1) 的。这意味着它们非常高效。然而,对于包含数十万甚至更多成员的大型集合,在运行 SMEMBERS
命令时应谨慎。此命令是 O(n) 的,并在单个响应中返回整个集合。作为替代方案,请考虑使用 SSCAN
命令,它允许您迭代地检索集合的所有成员。
替代方案
在大型数据集(或流式数据)上进行集合成员资格检查可能会占用大量内存。如果您担心内存使用且不需要完美精度,可以考虑使用 布隆过滤器或布谷鸟过滤器 作为 Set 的替代方案。
Redis Set 经常被用作一种索引。如果您需要索引和查询数据,可以考虑使用 JSON 数据类型 和 Redis 查询引擎 功能。
了解更多
- Redis Sets Explained 和 Redis Sets Elaborated 是两个简短但全面的视频讲解,涵盖了 Redis Set。
- Redis University 的 RU101 详细探讨了 Redis Set。