Redis 列表(List)
| LPUSH | 将一个或多个值插入到列表头部(左侧) | LPUSH key value1 [value2 ...] |
| RPUSH | 将一个或多个值插入到列表尾部(右侧) | RPUSH key value1 [value2 ...] |
| LPOP | 移除并返回列表的第一个元素(左侧) | LPOP key |
| RPOP | 移除并返回列表的最后一个元素(右侧) | RPOP key |
| LRANGE | 获取列表指定范围内的元素 | LRANGE key start stop- start:起始索引(包含),0 表示列表的第一个元素, -1 表示列表的最后一个元素。- stop:结束索引(包含)。 |
| LLEN | 获取列表的长度 | LLEN key |
| LINDEX | 通过索引获取列表中的元素 | LINDEX key index- index:元素的索引,0 表示列表的第一个元素, -1 表示列表的最后一个元素。 |
| LSET | 设置列表中指定索引位置的元素值 | LSET key index value- index:元素的索引,0 表示列表的第一个元素, -1 表示列表的最后一个元素。 |
| LREM | 从列表中删除指定数量的指定元素 | LREM key count value- count:> 0:从列表头部开始向列表尾部搜索,删除 count 个值为 value 的元素。< 0:从列表尾部开始向列表头部搜索,删除 count 绝对值个值为 value 的元素。= 0:删除列表中所有值为 value 的元素。 |
| RPOPLPUSH | 移除列表的最后一个元素(右侧),并将其添加到另一个列表的头部(左侧) | RPOPLPUSH source destination |
场景示例
- 消息队列 假设我们要构建一个简单的消息队列,生产者向队列中发送消息,消费者从队列中获取消息。
生产者(Java 代码示例):
import redis.clients.jedis.Jedis;
public class Producer {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
String queueKey = "message:queue";
String message = "这是一条新消息";
// 从右侧插入消息到队列
jedis.rpush(queueKey, message);
System.out.println("发送消息: " + message);
jedis.close();
}
}
消费者(Java 代码示例):
import redis.clients.jedis.Jedis;
public class Consumer {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
String queueKey = "message:queue";
// 从左侧弹出消息
String message = jedis.lpop(queueKey);
if (message != null) {
System.out.println("接收消息: " + message);
} else {
System.out.println("队列中无消息");
}
jedis.close();
}
}
- 任务队列 假设有一个任务分发系统,将任务添加到任务队列中,工作节点从队列中获取任务并执行。
任务添加(Java 代码示例):
import redis.clients.jedis.Jedis;
public class TaskAdder {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
String taskQueueKey = "task:queue";
String task = "处理用户注册请求";
// 从左侧插入任务到队列
jedis.lpush(taskQueueKey, task);
System.out.println("添加任务: " + task);
jedis.close();
}
}
工作节点获取任务(Java 代码示例):
import redis.clients.jedis.Jedis;
public class Worker {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
String taskQueueKey = "task:queue";
// 从右侧弹出任务
String task = jedis.rpop(taskQueueKey);
if (task != null) {
System.out.println("获取到任务: " + task);
// 模拟任务执行
System.out.println("执行任务: " + task);
} else {
System.out.println("任务队列为空");
}
jedis.close();
}
}
- 最新消息列表 假设我们要展示网站的最新 10 条新闻,每次有新新闻发布时,将新闻添加到列表中,并展示最新的 10 条。
添加新闻(Java 代码示例):
import redis.clients.jedis.Jedis;
public class NewsAdder {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
String newsListKey = "news:list";
String newNews = "最新科技新闻:人工智能取得重大突破";
// 从左侧插入新闻到列表
jedis.lpush(newsListKey, newNews);
// 只保留最新的 10 条新闻
long listLength = jedis.llen(newsListKey);
if (listLength > 10) {
jedis.ltrim(newsListKey, 0, 9);
}
jedis.close();
}
}
展示最新新闻(Java 代码示例):
import redis.clients.jedis.Jedis;
import java.util.List;
public class NewsDisplayer {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
String newsListKey = "news:list";
// 获取最新的 10 条新闻
List<String> latestNews = jedis.lrange(newsListKey, 0, 9);
for (String news : latestNews) {
System.out.println(news);
}
jedis.close();
}
}
#我的2024牛客高光时刻##牛客创作赏金赛#
查看7道真题和解析