Sets
Set commands for storing unordered collections of unique elements.
Commands
Section titled “Commands”| Command | Syntax | Description |
|---|---|---|
| SADD | SADD key member [member ...] | Add members |
| SREM | SREM key member [member ...] | Remove members |
| SMEMBERS | SMEMBERS key | Get all members |
| SISMEMBER | SISMEMBER key member | Check membership |
| SCARD | SCARD key | Count members |
| SPOP | SPOP key [count] | Remove random members |
| SRANDMEMBER | SRANDMEMBER key [count] | Get random members |
| SDIFF | SDIFF key [key ...] | Difference of sets |
| SINTER | SINTER key [key ...] | Intersection of sets |
| SUNION | SUNION key [key ...] | Union of sets |
| SMOVE | SMOVE source destination member | Move member between sets |
| SDIFFSTORE | SDIFFSTORE destination key [key ...] | Store difference |
| SINTERSTORE | SINTERSTORE destination key [key ...] | Store intersection |
| SUNIONSTORE | SUNIONSTORE destination key [key ...] | Store union |
Examples
Section titled “Examples”Basic Operations
Section titled “Basic Operations”# Add members127.0.0.1:6379> SADD myset "apple" "banana" "cherry"(integer) 3
# Check membership127.0.0.1:6379> SISMEMBER myset "apple"(integer) 1127.0.0.1:6379> SISMEMBER myset "grape"(integer) 0
# Get all members127.0.0.1:6379> SMEMBERS myset1) "apple"2) "banana"3) "cherry"
# Count members127.0.0.1:6379> SCARD myset(integer) 3Remove Members
Section titled “Remove Members”# Remove specific members127.0.0.1:6379> SREM myset "banana"(integer) 1
# Pop random member(s)127.0.0.1:6379> SPOP myset"cherry" # Random member removed
127.0.0.1:6379> SPOP myset 2 # Pop 2 random members1) "apple"2) "grape"Random Selection
Section titled “Random Selection”127.0.0.1:6379> SADD deck "A" "K" "Q" "J" "10"(integer) 5
# Get random member (doesn't remove)127.0.0.1:6379> SRANDMEMBER deck"K"
# Get multiple random members127.0.0.1:6379> SRANDMEMBER deck 31) "A"2) "Q"3) "10"
# Negative count allows repeats127.0.0.1:6379> SRANDMEMBER deck -51) "K"2) "K"3) "A"4) "J"5) "Q"Set Operations
Section titled “Set Operations”127.0.0.1:6379> SADD set1 "a" "b" "c"(integer) 3127.0.0.1:6379> SADD set2 "b" "c" "d"(integer) 3
# Difference (in set1 but not set2)127.0.0.1:6379> SDIFF set1 set21) "a"
# Intersection (in both sets)127.0.0.1:6379> SINTER set1 set21) "b"2) "c"
# Union (in either set)127.0.0.1:6379> SUNION set1 set21) "a"2) "b"3) "c"4) "d"Store Operations
Section titled “Store Operations”# Store results in new set127.0.0.1:6379> SDIFFSTORE diff_result set1 set2(integer) 1 # Number of elements in result
127.0.0.1:6379> SINTERSTORE inter_result set1 set2(integer) 2
127.0.0.1:6379> SUNIONSTORE union_result set1 set2(integer) 4Move Between Sets
Section titled “Move Between Sets”127.0.0.1:6379> SADD active "user:1" "user:2"(integer) 2127.0.0.1:6379> SADD inactive(integer) 0
# Move user to inactive127.0.0.1:6379> SMOVE active inactive "user:1"(integer) 1Library Mode (Rust)
Section titled “Library Mode (Rust)”use redlite::Db;
let db = Db::open("mydata.db")?;
// Add membersdb.sadd("myset", &[b"apple", b"banana", b"cherry"])?;
// Check membershiplet is_member = db.sismember("myset", b"apple")?; // bool
// Get all memberslet members = db.smembers("myset")?; // Vec<Vec<u8>>
// Countlet count = db.scard("myset")?;
// Set operationslet diff = db.sdiff(&["set1", "set2"])?;let inter = db.sinter(&["set1", "set2"])?;let union = db.sunion(&["set1", "set2"])?;
// Store operationsdb.sdiffstore("result", &["set1", "set2"])?;db.sinterstore("result", &["set1", "set2"])?;db.sunionstore("result", &["set1", "set2"])?;
// Move memberdb.smove("source", "destination", b"member")?;Use Cases
Section titled “Use Cases”SADD article:123:tags "rust" "database" "redis"SMEMBERS article:123:tagsSISMEMBER article:123:tags "rust"Unique Visitors
Section titled “Unique Visitors”SADD visitors:2024-01-15 "user:100" "user:200" "user:100" # Duplicates ignoredSCARD visitors:2024-01-15 # Unique visitor countFriends/Followers
Section titled “Friends/Followers”SADD user:1:friends "user:2" "user:3" "user:4"SADD user:2:friends "user:1" "user:3" "user:5"
# Mutual friendsSINTER user:1:friends user:2:friendsOnline Users
Section titled “Online Users”SADD online "user:1" "user:2"SMEMBERS onlineSREM online "user:1" # User goes offline