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 "列表长度: " & lLenLRange - 获取列表范围内的元素
获取所有元素
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 Sub2. 消息队列
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 Sub3. 历史记录
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 Sub4. 最新动态
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 Sub5. 栈(后进先出)
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 Sub6. 队列(先进先出)
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 SubList 操作总结
| 操作 | 方法 | 说明 |
|---|---|---|
| 左侧插入 | LPush | 从列表开头插入 |
| 右侧插入 | RPush | 从列表末尾插入 |
| 左侧弹出 | LPop | 从列表开头弹出 |
| 右侧弹出 | RPop | 从列表末尾弹出 |
| 获取长度 | LLen | 获取列表元素数量 |
| 获取范围 | LRange | 获取指定范围内的元素 |
使用建议
- 任务队列:使用
RPush+LPop实现先进先出 - 栈:使用
LPush+LPop实现后进先出 - 限制大小:使用
RPush+RPop或LPush+RPop控制列表长度 - 历史记录:使用
LPush添加新记录,LRANGE获取最近记录