Set Operations
Redis Set is an unordered collection of unique strings, suitable for storing unique values.
SAdd - Add Set Members
Add Single Member
vb
oRedis.SAdd "myset", "apple"Add Multiple Members
vb
oRedis.SAdd "myset", "banana", "orange", "grape"Note: Sets automatically deduplicate, adding duplicate elements will only keep one.
SMembers - Get All Set Members
vb
' Get all members
Dim vMembers As Variant
vMembers = oRedis.SMembers("myset")
If IsArray(vMembers) Then
Dim i As Long
For i = 0 To UBound(vMembers)
Debug.Print vMembers(i)
Next
End IfSCard - Get Set Member Count
vb
Dim lCount As Long
lCount = oRedis.SCard("myset")
Debug.Print "Set member count: " & lCountSIsMember - Check if Member Exists
vb
If oRedis.SIsMember("myset", "apple") Then
Debug.Print "Member exists"
Else
Debug.Print "Member does not exist"
End IfSRem - Delete Set Members
vb
' Delete single member
oRedis.SRem "myset", "apple"
' Delete multiple members
oRedis.SRem "myset", "banana", "orange"Use Cases
1. Article Tags
vb
Sub ArticleTags()
Dim oRedis As New cRedisClient
If Not oRedis.Connect() Then Exit Sub
Dim sArticleId As String
sArticleId = "post:1:tags"
' Add tags
oRedis.SAdd sArticleId, "Technology", "Programming", "Redis", "VB6", "Database"
' Check tag count
Debug.Print "Article tags count: " & oRedis.SCard(sArticleId)
' Check if specific tag exists
If oRedis.SIsMember(sArticleId, "Redis") Then
Debug.Print "This article contains Redis tag"
End If
' Get all tags
Dim vTags As Variant
vTags = oRedis.SMembers(sArticleId)
Debug.Print vbCrLf & "All tags:"
Dim i As Long
If IsArray(vTags) Then
For i = 0 To UBound(vTags)
Debug.Print " - " & vTags(i)
Next
End If
' Delete specific tag
oRedis.SRem sArticleId, "VB6"
Debug.Print vbCrLf & "After deleting tag, remaining tags count: " & oRedis.SCard(sArticleId)
oRedis.DisConnect
End Sub2. User Following
vb
Sub UserFollowers()
Dim oRedis As New cRedisClient
If Not oRedis.Connect() Then Exit Sub
Dim sUserId As String
sUserId = "user:123"
' Users this user follows
oRedis.SAdd sUserId & ":following", "user:456", "user:789", "user:101"
' Users following this user
oRedis.SAdd sUserId & ":followers", "user:200", "user:300", "user:400"
' Check if following specific user
If oRedis.SIsMember(sUserId & ":following", "user:456") Then
Debug.Print "Already following user 456"
End If
' Get following list
Dim vFollowing As Variant
vFollowing = oRedis.SMembers(sUserId & ":following")
Debug.Print vbCrLf & "Following list:"
Dim i As Long
If IsArray(vFollowing) Then
For i = 0 To UBound(vFollowing)
Debug.Print " " & vFollowing(i)
Next
End If
' Get follower count
Debug.Print vbCrLf & "Follower count: " & oRedis.SCard(sUserId & ":followers")
' Unfollow
oRedis.SRem sUserId & ":following", "user:789"
Debug.Print "After unfollowing, following count: " & oRedis.SCard(sUserId & ":following")
oRedis.DisConnect
End Sub3. Online Users
vb
Sub OnlineUsers()
Dim oRedis As New cRedisClient
If Not oRedis.Connect() Then Exit Sub
Dim sOnlineSet As String
sOnlineSet = "users:online"
' Users come online
oRedis.SAdd sOnlineSet, "user:1001", "user:1002", "user:1003", "user:1004"
' Get online user count
Debug.Print "Online users count: " & oRedis.SCard(sOnlineSet)
' Check if specific user is online
If oRedis.SIsMember(sOnlineSet, "user:1001") Then
Debug.Print "User 1001 is online"
End If
' Get all online users
Dim vUsers As Variant
vUsers = oRedis.SMembers(sOnlineSet)
Debug.Print vbCrLf & "Online user list:"
Dim i As Long
If IsArray(vUsers) Then
For i = 0 To UBound(vUsers)
Debug.Print " " & vUsers(i)
Next
End If
' User goes offline
oRedis.SRem sOnlineSet, "user:1002"
Debug.Print vbCrLf & "User 1002 offline, online users count: " & oRedis.SCard(sOnlineSet)
oRedis.DisConnect
End Sub4. IP Blacklist
vb
Sub IpBlacklist()
Dim oRedis As New cRedisClient
If Not oRedis.Connect() Then Exit Sub
Dim sBlacklist As String
sBlacklist = "security:blacklist"
' Add IP to blacklist
oRedis.SAdd sBlacklist, "192.168.1.100"
oRedis.SAdd sBlacklist, "192.168.1.101"
oRedis.SAdd sBlacklist, "192.168.1.102"
' Check if IP is in blacklist
Dim sCheckIp As String
sCheckIp = "192.168.1.100"
If oRedis.SIsMember(sBlacklist, sCheckIp) Then
Debug.Print "IP " & sCheckIp & " is in blacklist, access denied"
Else
Debug.Print "IP " & sCheckIp & " can access"
End If
' Get all IPs in blacklist
Dim vIps As Variant
vIps = oRedis.SMembers(sBlacklist)
Debug.Print vbCrLf & "IPs in blacklist:"
Dim i As Long
If IsArray(vIps) Then
For i = 0 To UBound(vIps)
Debug.Print " " & vIps(i)
Next
End If
' Remove IP from blacklist
oRedis.SRem sBlacklist, "192.168.1.101"
Debug.Print vbCrLf & "Removed 192.168.1.101 from blacklist"
oRedis.DisConnect
End Sub5. Unique Visitor Statistics
vb
Sub UniqueVisitors()
Dim oRedis As New cRedisClient
If Not oRedis.Connect() Then Exit Sub
Dim sDate As String
sDate = "2024-01-01"
Dim sVisitorKey As String
sVisitorKey = "stats:visitors:" & sDate
' Record visitor IDs
oRedis.SAdd sVisitorKey, "visitor:001"
oRedis.SAdd sVisitorKey, "visitor:002"
oRedis.SAdd sVisitorKey, "visitor:003"
' Same visitor visits again (will not count again)
oRedis.SAdd sVisitorKey, "visitor:001"
oRedis.SAdd sVisitorKey, "visitor:002"
' Get unique visitor count for the day
Debug.Print sDate & " unique visitors: " & oRedis.SCard(sVisitorKey)
' Get all visitor IDs
Dim vVisitors As Variant
vVisitors = oRedis.SMembers(sVisitorKey)
Debug.Print vbCrLf & "Visitor list:"
Dim i As Long
If IsArray(vVisitors) Then
For i = 0 To UBound(vVisitors)
Debug.Print " " & vVisitors(i)
Next
End If
oRedis.DisConnect
End Sub6. Bookmarks
vb
Sub Bookmarks()
Dim oRedis As New cRedisClient
If Not oRedis.Connect() Then Exit Sub
Dim sUserId As String
sUserId = "user:123"
Dim sBookmarksKey As String
sBookmarksKey = sUserId & ":bookmarks"
' Add bookmarks
oRedis.SAdd sBookmarksKey, "article:1"
oRedis.SAdd sBookmarksKey, "article:2"
oRedis.SAdd sBookmarksKey, "article:3"
' Check if article is bookmarked
If oRedis.SIsMember(sBookmarksKey, "article:1") Then
Debug.Print "Article 1 is bookmarked"
End If
' Get bookmark count
Debug.Print "Bookmark count: " & oRedis.SCard(sBookmarksKey)
' Get all bookmarks
Dim vBookmarks As Variant
vBookmarks = oRedis.SMembers(sBookmarksKey)
Debug.Print vbCrLf & "Bookmark list:"
Dim i As Long
If IsArray(vBookmarks) Then
For i = 0 To UBound(vBookmarks)
Debug.Print " " & vBookmarks(i)
Next
End If
' Remove bookmark
oRedis.SRem sBookmarksKey, "article:2"
Debug.Print vbCrLf & "After removing bookmark, remaining count: " & oRedis.SCard(sBookmarksKey)
oRedis.DisConnect
End SubComplete Example
vb
Sub Example_SetOperations()
Dim oRedis As New cRedisClient
If Not oRedis.Connect() Then
Debug.Print "Connection failed: " & oRedis.LastError
Exit Sub
End If
' Use Set to store tags
oRedis.SAdd "post:1:tags", "Technology", "Programming", "Redis", "VB6"
Debug.Print "Article tags count: " & oRedis.SCard("post:1:tags")
Dim vTags As Variant
vTags = oRedis.SMembers("post:1:tags")
Debug.Print "All tags:"
Dim i As Long
For i = 0 To UBound(vTags)
Debug.Print " - " & vTags(i)
Next
' Check if tag exists
If oRedis.SIsMember("post:1:tags", "Redis") Then
Debug.Print vbCrLf & "Contains Redis tag"
End If
' Delete tag
oRedis.SRem "post:1:tags", "VB6"
Debug.Print "After deleting tag, remaining tags count: " & oRedis.SCard("post:1:tags")
' Add again (will not duplicate)
oRedis.SAdd "post:1:tags", "Programming"
Debug.Print "After adding 'Programming' again, tags count: " & oRedis.SCard("post:1:tags")
oRedis.DisConnect
End SubSet vs List Selection
| Scenario | Recommended Type | Reason |
|---|---|---|
| Need unique values | Set | Automatic deduplication |
| Allow duplicates | List | Can store duplicate elements |
| Member check | Set | O(1) time complexity |
| Store in order | List | Maintain insertion order |
| Deduplication needed | Set | Sets naturally support dedup |
| Stack/Queue | List | Supports LPush/LPop/RPush/RPop |
Set Features
- Unordered: Members have no order
- Unique: Duplicate elements not allowed
- Fast lookup: Very fast to check member existence
- Set operations: Supports intersection, union, difference operations (requires extended implementation)