Skip to content

List 操作

Redis List 是一个简单的字符串列表,按照插入顺序排序。支持从列表两端插入和弹出元素。

LPush - 从左侧插入

插入单个值

vb
oRedis.LPush "mylist", "item1"

插入多个值

vb
oRedis.LPush "mylist", "item2", "item3"

注意: 使用 LPush 插入的元素会出现在列表的开头。

RPush - 从右侧插入

vb
' 从右侧插入
oRedis.RPush "mylist", "item4"

注意: 使用 RPush 插入的元素会出现在列表的末尾。

LPop - 从左侧弹出

vb
Dim sValue As String
sValue = oRedis.LPop("mylist")
Debug.Print sValue  ' 输出最左侧的元素

RPop - 从右侧弹出

vb
sValue = oRedis.RPop("mylist")
Debug.Print sValue  ' 输出最右侧的元素

LLen - 获取列表长度

vb
Dim lLen As Long
lLen = oRedis.lLen("mylist")
Debug.Print "列表长度: " & lLen

LRange - 获取列表范围内的元素

获取所有元素

vb
Dim vItems As Variant
vItems = oRedis.LRange("mylist", 0, -1)

If IsArray(vItems) Then
    Dim i As Long
    For i = 0 To UBound(vItems)
        Debug.Print vItems(i)
    Next
End If

获取前 10 个元素

vb
vItems = oRedis.LRange("mylist", 0, 9)

获取指定范围的元素

vb
' 获取从第 6 个到第 10 个元素(索引从 0 开始)
vItems = oRedis.LRange("mylist", 5, 9)

应用场景

1. 任务队列

vb
Sub TaskQueue()
    Dim oRedis As New cRedisClient

    If Not oRedis.Connect() Then Exit Sub

    Dim sQueue As String
    sQueue = "tasks:queue"

    ' 添加任务到队列
    oRedis.RPush sQueue, "发送邮件给用户1"
    oRedis.RPush sQueue, "生成报表"
    oRedis.RPush sQueue, "备份数据库"
    oRedis.RPush sQueue, "清理缓存"

    ' 查看队列长度
    Debug.Print "待处理任务数: " & oRedis.lLen(sQueue)

    ' 查看所有任务
    Dim vTasks As Variant
    vTasks = oRedis.LRange(sQueue, 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 & "开始处理任务..."
    While oRedis.lLen(sQueue) > 0
        Dim sTask As String
        sTask = oRedis.LPop(sQueue)
        Debug.Print "处理任务: " & sTask
        Debug.Print "剩余任务数: " & oRedis.lLen(sQueue)
    Wend

    oRedis.DisConnect
End Sub

2. 消息队列

vb
Sub MessageQueue()
    Dim oRedis As New cRedisClient

    If Not oRedis.Connect() Then Exit Sub

    Dim sQueue As String
    sQueue = "messages:inbox"

    ' 发送消息(生产者)
    oRedis.RPush sQueue, "消息1: 你好"
    oRedis.RPush sQueue, "消息2: Redis 很棒"
    oRedis.RPush sQueue, "消息3: 学习中"

    ' 接收消息(消费者)
    Debug.Print "收到新消息:"
    Dim lCount As Long
    lCount = oRedis.lLen(sQueue)

    For i = 1 To lCount
        Dim sMsg As String
        sMsg = oRedis.LPop(sQueue)
        Debug.Print "  " & sMsg
    Next

    oRedis.DisConnect
End Sub

3. 历史记录

vb
Sub SearchHistory()
    Dim oRedis As New cRedisClient

    If Not oRedis.Connect() Then Exit Sub

    Dim sUserId As String
    sUserId = "user:123:history"

    ' 添加搜索记录
    oRedis.LPush sUserId, "Redis 教程"
    oRedis.LPush sUserId, "VB6 编程"
    oRedis.LPush sUserId, "数据库设计"

    ' 限制历史记录数量(只保留最近 10 条)
    While oRedis.lLen(sUserId) > 10
        oRedis.RPop sUserId
    Wend

    ' 获取最近搜索记录
    Dim vHistory As Variant
    vHistory = oRedis.LRange(sUserId, 0, 4)  ' 最近 5 条

    Debug.Print "最近搜索记录:"
    Dim i As Long
    If IsArray(vHistory) Then
        For i = 0 To UBound(vHistory)
            Debug.Print "  " & (i + 1) & ". " & vHistory(i)
        Next
    End If

    oRedis.DisConnect
End Sub

4. 最新动态

vb
Sub RecentActivity()
    Dim oRedis As New cRedisClient

    If Not oRedis.Connect() Then Exit Sub

    Dim sKey As String
    sKey = "activity:recent"

    ' 添加动态
    oRedis.LPush sKey, "用户张三发布了新文章"
    oRedis.LPush sKey, "用户李四评论了文章"
    oRedis.LPush sKey, "用户王五点赞了帖子"
    oRedis.LPush sKey, "用户赵六关注了新用户"

    ' 只保留最新 20 条动态
    While oRedis.lLen(sKey) > 20
        oRedis.RPop sKey
    Wend

    ' 显示最新动态
    Dim vActivities As Variant
    vActivities = oRedis.LRange(sKey, 0, 9)

    Debug.Print "最新动态:"
    Dim i As Long
    If IsArray(vActivities) Then
        For i = 0 To UBound(vActivities)
            Debug.Print "  " & (i + 1) & ". " & vActivities(i)
        Next
    End If

    oRedis.DisConnect
End Sub

5. 栈(后进先出)

vb
Sub StackExample()
    Dim oRedis As New cRedisClient

    If Not oRedis.Connect() Then Exit Sub

    Dim sStack As String
    sStack = "stack:operations"

    ' 压栈(Push)
    Debug.Print "压栈操作:"
    oRedis.LPush sStack, "元素A"
    Debug.Print "  压入: 元素A"

    oRedis.LPush sStack, "元素B"
    Debug.Print "  压入: 元素B"

    oRedis.LPush sStack, "元素C"
    Debug.Print "  压入: 元素C"

    Debug.Print "栈深度: " & oRedis.lLen(sStack)

    ' 出栈(Pop)
    Debug.Print vbCrLf & "出栈操作:"
    While oRedis.lLen(sStack) > 0
        Dim sItem As String
        sItem = oRedis.LPop(sStack)
        Debug.Print "  弹出: " & sItem
        Debug.Print "  剩余: " & oRedis.lLen(sStack)
    Wend

    oRedis.DisConnect
End Sub

6. 队列(先进先出)

vb
Sub QueueExample()
    Dim oRedis As New cRedisClient

    If Not oRedis.Connect() Then Exit Sub

    Dim sQueue As String
    sQueue = "queue:customers"

    ' 入队(Enqueue)
    Debug.Print "入队操作:"
    oRedis.RPush sQueue, "客户A"
    Debug.Print "  入队: 客户A"

    oRedis.RPush sQueue, "客户B"
    Debug.Print "  入队: 客户B"

    oRedis.RPush sQueue, "客户C"
    Debug.Print "  入队: 客户C"

    Debug.Print "队列长度: " & oRedis.lLen(sQueue)

    ' 出队(Dequeue)
    Debug.Print vbCrLf & "出队操作:"
    While oRedis.lLen(sQueue) > 0
        Dim sCustomer As String
        sCustomer = oRedis.LPop(sQueue)
        Debug.Print "  服务: " & sCustomer
        Debug.Print "  等待: " & oRedis.lLen(sQueue)
    Wend

    oRedis.DisConnect
End Sub

完整示例

vb
Sub Example_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.LPush "tasks", "紧急任务"

    ' 查看更新后的列表
    vTasks = oRedis.LRange("tasks", 0, -1)
    Debug.Print vbCrLf & "更新后的任务列表:"
    If IsArray(vTasks) Then
        For i = 0 To UBound(vTasks)
            Debug.Print "  " & (i + 1) & ". " & vTasks(i)
        Next
    End If

    oRedis.DisConnect
End Sub

List 操作总结

操作方法说明
左侧插入LPush从列表开头插入
右侧插入RPush从列表末尾插入
左侧弹出LPop从列表开头弹出
右侧弹出RPop从列表末尾弹出
获取长度LLen获取列表元素数量
获取范围LRange获取指定范围内的元素

使用建议

  1. 任务队列:使用 RPush + LPop 实现先进先出
  2. :使用 LPush + LPop 实现后进先出
  3. 限制大小:使用 RPush + RPopLPush + RPop 控制列表长度
  4. 历史记录:使用 LPush 添加新记录,LRANGE 获取最近记录

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