Skip to content

完整示例

本文档包含 Redis 客户端的综合使用示例。

示例 1:基本的 String 操作

vb
Sub Example1_BasicString()
    Dim oRedis As New cRedisClient

    ' 连接
    If Not oRedis.Connect() Then
        Debug.Print "连接失败: " & oRedis.LastError
        Exit Sub
    End If

    ' 设置值
    oRedis.Set_ "name", "张三"
    oRedis.Set_ "age", "25"

    ' 获取值
    Debug.Print "姓名: " & oRedis.Get_("name")
    Debug.Print "年龄: " & oRedis.Get_("age")

    ' 设置过期时间
    oRedis.Expire "name", 300

    ' 检查剩余时间
    Debug.Print "name 的剩余生存时间: " & oRedis.TTL("name") & " 秒"

    ' 断开连接
    oRedis.DisConnect
End Sub

示例 2:Hash 操作

vb
Sub Example2_HashOperations()
    Dim oRedis As New cRedisClient

    If Not oRedis.Connect() Then
        Debug.Print "连接失败: " & oRedis.LastError
        Exit Sub
    End If

    ' 设置用户信息
    oRedis.HSet "user:1001", "name", "李四"
    oRedis.HSet "user:1001", "age", "30"
    oRedis.HSet "user:1001", "city", "上海"
    oRedis.HSet "user:1001", "email", "lisi@example.com"

    ' 获取单个字段
    Debug.Print "用户姓名: " & oRedis.HGet("user:1001", "name")

    ' 获取所有字段
    Dim oDict As Scripting.Dictionary
    Set oDict = oRedis.HGetAll("user:1001")

    Debug.Print vbCrLf & "用户详细信息:"
    Dim vKey As Variant
    For Each vKey In oDict.Keys
        Debug.Print "  " & vKey & ": " & oDict(vKey)
    Next

    oRedis.DisConnect
End Sub

示例 3:List 操作

vb
Sub Example3_ListOperations()
    Dim oRedis As New cRedisClient

    If Not oRedis.Connect() Then
        Debug.Print "连接失败: " & oRedis.LastError
        Exit Sub
    End If

    ' 清空现有列表
    oRedis.Del "tasks"

    ' 添加任务
    oRedis.RPush "tasks", "任务1"
    oRedis.RPush "tasks", "任务2"
    oRedis.RPush "tasks", "任务3"
    oRedis.RPush "tasks", "任务4"
    oRedis.RPush "tasks", "任务5"

    ' 获取列表长度
    Debug.Print "任务列表长度: " & oRedis.lLen("tasks")

    ' 获取所有任务
    Dim vTasks As Variant
    vTasks = oRedis.LRange("tasks", 0, -1)

    Debug.Print vbCrLf & "所有任务:"
    Dim i As Long
    For i = 0 To UBound(vTasks)
        Debug.Print "  " & (i + 1) & ". " & vTasks(i)
    Next

    ' 处理第一个任务
    Debug.Print vbCrLf & "处理任务: " & oRedis.LPop("tasks")
    Debug.Print "剩余任务数: " & oRedis.lLen("tasks")

    oRedis.DisConnect
End Sub

示例 4:事务操作

vb
Sub Example4_Transaction()
    Dim oRedis As New cRedisClient

    If Not oRedis.Connect() Then
        Debug.Print "连接失败: " & oRedis.LastError
        Exit Sub
    End If

    ' 初始化计数器
    oRedis.Set_ "counter", "0"
    Debug.Print "初始计数: " & oRedis.Get_("counter")

    ' 开始事务
    oRedis.Multi

    ' 执行多个自增操作
    oRedis.Incr "counter"
    oRedis.Incr "counter"
    oRedis.Incr "counter"

    ' 提交事务
    Dim vResults As Variant
    vResults = oRedis.Exec()

    Debug.Print "事务执行结果:"
    If IsArray(vResults) Then
        For i = 0 To UBound(vResults)
            Debug.Print "  操作 " & (i + 1) & " 结果: " & vResults(i)
        Next
    End If

    Debug.Print "最终计数: " & oRedis.Get_("counter")

    oRedis.DisConnect
End Sub

示例 5:Set 和 Sorted Set 操作

vb
Sub Example5_Sets()
    Dim oRedis As New cRedisClient

    If Not oRedis.Connect() Then
        Debug.Print "连接失败: " & oRedis.LastError
        Exit Sub
    End If

    ' 使用 Set 存储标签
    oRedis.SAdd "post:1:tags", "技术", "编程", "Redis", "VB6"

    Debug.Print "文章标签数: " & oRedis.SCard("post:1:tags")

    Dim vTags As Variant
    vTags = oRedis.SMembers("post:1:tags")

    Debug.Print "所有标签:"
    Dim i As Long
    For i = 0 To UBound(vTags)
        Debug.Print "  - " & vTags(i)
    Next

    ' 使用 Sorted Set 存储排行榜
    oRedis.ZAdd "leaderboard", 1000, "玩家A"
    oRedis.ZAdd "leaderboard", 1500, "玩家B"
    oRedis.ZAdd "leaderboard", 800, "玩家C"
    oRedis.ZAdd "leaderboard", 2000, "玩家D"

    Debug.Print vbCrLf & "排行榜(按分数升序):"
    vTags = oRedis.ZRange("leaderboard", 0, -1)
    For i = 0 To UBound(vTags)
        Debug.Print "  " & (i + 1) & ". " & vTags(i)
    Next

    Debug.Print vbCrLf & "排行榜(带分数):"
    vTags = oRedis.ZRange("leaderboard", 0, -1, True)
    For i = 0 To UBound(vTags) Step 2
        If i + 1 <= UBound(vTags) Then
            Debug.Print "  " & vTags(i) & ": " & vTags(i + 1) & " 分"
        End If
    Next

    oRedis.DisConnect
End Sub

示例 6:数据库切换和批量操作

vb
Sub Example6_MultipleDb()
    Dim oRedis As New cRedisClient

    If Not oRedis.Connect() Then
        Debug.Print "连接失败: " & oRedis.LastError
        Exit Sub
    End If

    ' 在数据库 0 中存储用户数据
    oRedis.SelectDb 0
    oRedis.Set_ "user:1", "张三"
    oRedis.Set_ "user:2", "李四"
    Debug.Print "数据库0中的用户: "

    Dim vKeys As Variant
    vKeys = oRedis.Keys("user:*")
    Dim i As Long
    If IsArray(vKeys) Then
        For i = 0 To UBound(vKeys)
            Debug.Print "  " & vKeys(i) & ": " & oRedis.Get_(vKeys(i))
        Next
    End If

    ' 在数据库 1 中存储配置数据
    oRedis.SelectDb 1
    oRedis.Set_ "config:appname", "MyApp"
    oRedis.Set_ "config:version", "1.0.0"
    oRedis.Set_ "config:debug", "false"
    Debug.Print vbCrLf & "数据库1中的配置: "

    vKeys = oRedis.Keys("config:*")
    If IsArray(vKeys) Then
        For i = 0 To UBound(vKeys)
            Debug.Print "  " & vKeys(i) & ": " & oRedis.Get_(vKeys(i))
        Next
    End If

    ' 批量获取配置
    Dim vConfigs As Variant
    vConfigs = oRedis.MGet("config:appname", "config:version")
    Debug.Print vbCrLf & "配置信息:"
    If IsArray(vConfigs) Then
        For i = 0 To UBound(vConfigs)
            Debug.Print "  " & vConfigs(i)
        Next
    End If

    ' 切换回数据库 0
    oRedis.SelectDb 0
    Debug.Print vbCrLf & "当前数据库: " & oRedis.DbIndex

    oRedis.DisConnect
End Sub

示例 7:综合应用 - 用户会话管理

vb
Sub Example7_UserSession()
    Dim oRedis As New cRedisClient

    If Not oRedis.Connect() Then
        Debug.Print "连接失败: " & oRedis.LastError
        Exit Sub
    End If

    Dim sUserId As String
    sUserId = "user:123"

    ' 使用 Hash 存储用户信息
    oRedis.HSet sUserId, "name", "张三"
    oRedis.HSet sUserId, "email", "zhangsan@example.com"
    oRedis.HSet sUserId, "login_time", CStr(Now())

    ' 使用 Set 存储用户标签
    oRedis.SAdd sUserId & ":tags", "VIP", "活跃", "已验证"

    ' 使用 List 存储最近操作
    oRedis.RPush sUserId & ":history", "登录"
    oRedis.RPush sUserId & ":history", "浏览商品"
    oRedis.RPush sUserId & ":history", "加入购物车"

    ' 设置会话过期时间(30分钟)
    oRedis.Expire sUserId, 1800
    oRedis.Expire sUserId & ":tags", 1800
    oRedis.Expire sUserId & ":history", 1800

    ' 显示用户信息
    Debug.Print "=== 用户信息 ==="
    Dim oDict As Scripting.Dictionary
    Set oDict = oRedis.HGetAll(sUserId)

    Dim vKey As Variant
    For Each vKey In oDict.Keys
        Debug.Print vKey & ": " & oDict(vKey)
    Next

    ' 显示用户标签
    Debug.Print vbCrLf & "=== 用户标签 ==="
    Dim vTags As Variant
    vTags = oRedis.SMembers(sUserId & ":tags")

    For i = 0 To UBound(vTags)
        Debug.Print "- " & vTags(i)
    Next

    ' 显示最近操作
    Debug.Print vbCrLf & "=== 最近操作 ==="
    Dim vHistory As Variant
    vHistory = oRedis.LRange(sUserId & ":history", -5, -1)

    For i = 0 To UBound(vHistory)
        Debug.Print (i + 1) & ". " & vHistory(i)
    Next

    oRedis.DisConnect
End Sub

示例 8:综合应用 - 电商系统

vb
Sub Example8_ECommerce()
    Dim oRedis As New cRedisClient

    If Not oRedis.Connect() Then
        Debug.Print "连接失败: " & oRedis.LastError
        Exit Sub
    End If

    ' 1. 商品信息(Hash)
    Debug.Print "=== 商品信息 ==="
    oRedis.HSet "product:1001", "name", "iPhone 15"
    oRedis.HSet "product:1001", "price", "5999"
    oRedis.HSet "product:1001", "stock", "100"

    Debug.Print "商品: " & oRedis.HGet("product:1001", "name")
    Debug.Print "价格: ¥" & oRedis.HGet("product:1001", "price")
    Debug.Print "库存: " & oRedis.HGet("product:1001", "stock")

    ' 2. 购物车(Hash)
    Debug.Print vbCrLf & "=== 购物车 ==="
    oRedis.HSet "cart:user123", "product:1001", "2"
    oRedis.HSet "cart:user123", "product:1002", "1"

    Dim oCart As Scripting.Dictionary
    Set oCart = oRedis.HGetAll("cart:user123")

    Dim lTotal As Long
    lTotal = 0
    For Each vKey In oCart.Keys
        Debug.Print vKey & ": " & oCart(vKey) & " 件"
        lTotal = lTotal + CLng(oCart(vKey))
    Next
    Debug.Print "总件数: " & lTotal

    ' 3. 热门商品(Sorted Set)
    Debug.Print vbCrLf & "=== 热门商品 ==="
    oRedis.ZAdd "hot:products", 100, "product:1001"
    oRedis.ZAdd "hot:products", 80, "product:1002"
    oRedis.ZAdd "hot:products", 150, "product:1003"

    Dim vHot As Variant
    vHot = oRedis.ZRange("hot:products", -3, -1)

    For i = UBound(vHot) To 0 Step -1
        Dim sProductId As String
        sProductId = vHot(i)
        Debug.Print (UBound(vHot) - i + 1) & ". " & oRedis.HGet(sProductId, "name")
    Next

    ' 4. 订单队列(List)
    Debug.Print vbCrLf & "=== 订单队列 ==="
    oRedis.RPush "orders:pending", "ORDER001: " & Now()
    oRedis.RPush "orders:pending", "ORDER002: " & Now()

    Dim vOrders As Variant
    vOrders = oRedis.LRange("orders:pending", 0, -1)

    For i = 0 To UBound(vOrders)
        Debug.Print vOrders(i)
    Next

    ' 5. 用户标签(Set)
    Debug.Print vbCrLf & "=== 用户标签 ==="
    oRedis.SAdd "user:123:tags", "VIP", "活跃", "新用户"
    vTags = oRedis.SMembers("user:123:tags")

    For i = 0 To UBound(vTags)
        Debug.Print "- " & vTags(i)
    Next

    oRedis.DisConnect
End Sub

示例 9:错误处理

vb
Sub Example9_ErrorHandling()
    Dim oRedis As New cRedisClient

    ' 连接
    If Not oRedis.Connect() Then
        Debug.Print "连接失败: " & oRedis.LastError
        Exit Sub
    End If

    ' 检查错误
    If oRedis.LastError <> "" Then
        Debug.Print "连接错误: " & oRedis.LastError
        oRedis.DisConnect
        Exit Sub
    End If

    ' 执行操作
    oRedis.Set_ "test", "value"

    If oRedis.LastError <> "" Then
        Debug.Print "操作错误: " & oRedis.LastError
    Else
        Debug.Print "操作成功"
    End If

    ' 获取不存在的键
    Dim sValue As String
    sValue = oRedis.Get_("nonexistent")

    If sValue = "" Then
        Debug.Print "键不存在"
    End If

    oRedis.DisConnect
End Sub

示例 10:连接管理最佳实践

vb
Sub Example10_ConnectionManagement()
    Dim oRedis As cRedisClient
    Set oRedis = New cRedisClient

    ' 连接
    If Not oRedis.Connect() Then
        Debug.Print "连接失败: " & oRedis.LastError
        GoTo Cleanup
    End If

    ' 使用连接
    oRedis.Set_ "key", "value"
    Debug.Print "设置的值: " & oRedis.Get_("key")

Cleanup:
    ' 确保断开连接
    If Not oRedis Is Nothing Then
        If oRedis.Connected Then
            oRedis.DisConnect
        End If
        Set oRedis = Nothing
    End If
End Sub

运行示例

您可以直接复制上述代码到 VB6 或 VBA 环境中运行。确保:

  1. 已添加对 cRedisClient 类的引用
  2. 已添加对 Scripting.Dictionary 的引用(Microsoft Scripting Runtime)
  3. Redis 服务器正在运行并可访问

示例输出

运行上述示例后,您将在立即窗口(Immediate Window)中看到类似以下的输出:

=== 用户信息 ===
name: 张三
email: zhangsan@example.com
login_time: 2024-01-01 10:30:00

=== 用户标签 ===
- VIP
- 活跃
- 已验证

=== 最近操作 ===
1. 登录
2. 浏览商品
3. 加入购物车

更多示例

如需更多特定场景的示例,请参考:

VB6及其LOGO版权为微软公司所有