Redis--List

  • lpush
    从左边(队头)添加数据。

  • rpop
    从右边(队尾)拉取数据

l p u s h + r p o p 可 以 实 现 队 列 。 \color{#FF0000}{ lpush+rpop可以实现队列。} lpush+rpop
l p u s h + l p o p 可 以 实 现 栈 的 功 能 。 \color{#FF0000}{ lpush+lpop可以实现栈的功能。} lpush+lpop
l p u s h + b r p o p \color{#FF0000}{lpush+brpop} lpush+brpop可以实现阻塞队列
l p u s h + l t r i m \color{#FF0000}{lpush+ltrim} lpush+ltrim可以实现固定大小的容器

应用场景案例:Redis用List实现队列。从左端添加数据,从右端消费数据。
//添加任务

		final ScheduledFuture<?> scheduledFuture = SCHEDULED_EXECUTOR_SERVICE.scheduleAtFixedRate(new Runnable() {
			@Override
			public void run() {
				//添加任务
				redisTemplate.executePipelined(new SessionCallback<Object>() {
					@Override
					public Object execute(RedisOperations operations) throws DataAccessException {
						for (int i = 0; i < 2000; i++) {
							operations.opsForList().leftPush(SCHEDULE_TASK_PREFIX, "task:" + atomicInteger.incrementAndGet());
						}
						return null;
					}
				});
			}
		}, 0, 2, TimeUnit.SECONDS);

消费任务

for (int i = 0; i < 10; i++) {
			SCHEDULED_EXECUTOR_SERVICE.scheduleAtFixedRate(new Runnable() {
				@Override
				public void run() {
					//消费任务
					List<Object> objects = redisTemplate.executePipelined(new SessionCallback<Object>() {
						@Override
						public Object execute(RedisOperations operations) throws DataAccessException {
							for (int i = 0; i < 100; i++) {
								operations.opsForList().rightPop(SCHEDULE_TASK_PREFIX);
							}
							return null;
						}
					});
				}
			}, 0, 1, TimeUnit.SECONDS);
		}

主线程监听队列

while (true) {
			Thread.sleep(5000);
			if (atomicInteger.get() > 100000) {
				scheduledFuture.cancel(true);
			}
			System.out.println("当前任务数:" + redisTemplate.opsForList().size(SCHEDULE_TASK_PREFIX));
		}

基于list的延迟队列设计方案
在这里插入图片描述
说明:

  • 主要用到了list类型中阻塞相关的命令。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值