先说今天分享一个之前写的基于redis和kafka实现类似银行叫号前言之前作过某风控系统,系统内会设计调用大量的三方数据,导致每一笔风控审核的时候会出现某一笔的消费延迟导致上游的消费速度显著下降,从而出现严重的卡单(kafka)。确定方案之前通过kafka消费主要是,并发消费,其类比的生活模式是早期银行排队,也就是kafka队列类似银行的多个窗口。假设银行规定,排队之后不能更换窗口,一个数据类似是
转载 2023-09-01 23:09:31
111阅读
首先找到第一个切入口,redis的列表类型有两个命令LPUSH和RPOP,LPUSH命令可以让元素从左侧进入队列,RPOP命令可以让元素从右侧弹出。这样两个命令配合使用就形成了左边进,右边出的形式,间接实现队列的功能。生产者通过LPUSH命令添加任务到某个键中,消费者通过RPOP命令不断从该键中取出任务。这时候问题来了,消费者怎么知道啥时有任务?消费者只能不断循环的读取键对应的队列,如果有任务就
转载 2023-07-08 15:11:51
107阅读
Redis实现简单延队列, 利用zset有序的数据结构, score设置为延时的时间戳. 实现思路:1、使用命令 [zrangebyscore keyName socreMin socreMax] 会返回已score排序由小到大的一个list2、list非空则使用[zrem keyName value]  删除第一个元素, 删除成功即代表消费成功, 可以解决多线程并发消费的问题
转载 2023-05-25 17:24:55
536阅读
应用场景: 例如秒杀。瞬时大量写入订单到数据库,导致数据库无法及时响应。此时可以采用Redis做消息队列,把所有需要写入的数据先写入Redis消息队列中,然后同时在服务器开启php-cli进程循环读取队列中的数据,异步写入数据库。使用redis做消息队列可能会出现消息丢失的情况,因为没有消息接收的确认机制。大型程序,应该使用类似RabitMQ来做专业消息队列。 1、使用publish/subs
转载 2023-08-31 16:31:44
51阅读
redis队列,使用了list列表数据结构,lpush生成,rpop消费模式。 redis队列,使用了list列表数据结构,lpush生成,rpop消费模式。 队列处理命令 <queue_name>是队列的名称,例如:current, position等等, 这只是消费者,即队列处理程序。 这是一个
原创 2021-05-27 15:17:32
313阅读
Redis设计用来做缓存的,但是由于它自身的某种特性使得它可以用来做消息队列。它有几个阻塞式的API可以使用,正是这些阻塞式的API让其有能力做消息队列; 另外,做消息队列的其他特性例如FIFO(先入先出)也很容易实现,只需要一个list对象从头取数据,从尾部塞数据即可。 Redis能做消息队列还得益于其list对象blpop brpop接口以及Pub/Sub(发布/订阅)的某些接口,它们都是阻塞
原创 2021-12-07 15:09:22
364阅读
要根据请求的优先级来处理? 答案:用Redis 详解:
转载 2018-04-24 08:12:00
117阅读
2评论
Redis设计用来做缓存的,但是由于它自身的某种特性使得它可以用来做消息队列。它有几个阻塞式的API可以使用,正是这些阻塞式的API让其有能力做消息队列;另外,做消息队列的其他特性例如FIFO(先入先出)也很容易实现,只需要一个list对象从头取数据,从尾部塞数据即可;Redis能做消息队列还得益于其list对象blpop brpop接口以及Pub/Sub(发布/订阅)的某些接口,它们都是...
原创 2022-03-03 11:18:06
151阅读
## Redis队列实现 Redis是一个开源的高性能键值数据库,提供了多种数据结构类型。其中,队列(Queue)是最常用的一种数据结构之一。本文将介绍如何使用Redis实现一个队列,并提供相应的代码示例。 ### Redis队列简介 队列是一种常见的数据结构,遵循先进先出(First In First Out,FIFO)的原则。在计算机科学中,队列常用于任务调度、消息传递等场景。在Redi
原创 2024-01-03 13:04:02
40阅读
# 基于Redis实现消息队列典型方案 1 概述2 基于List的 LPUSH+BRPOP 的实现3 PUB/SUB,订阅/发布模式4 基于SortedSet有序集合的实现5 基于 Stream 类型的实现6 其他实现  # 1 概述消息队列,Message Queue,常用于解决并发系统中的资源一致性问题,提升峰值的处理能力,同时保证消息的顺序性、可恢复性、必送达性,对应用
转载 2023-09-06 17:01:22
234阅读
队列本身其实是个有序的列表,而Redis是支持list的,我们可以查看Redis的官方文档 http://redis.io/commands#list ,其中我们可以对这个队列的两端分别进行操作,所以其实Redis中的list即可以当做普通的先进先出的queue,也可以作为先进后出的stack。 如果当做队列来用,我们可以用LPUSH(头部插入)和RPOP(尾部弹出)
写在前面需求是做一个秒杀系统,比如大家来抢100台手机,先到先得。查阅了网上很多用redis实现秒杀的demo(java语言),竟然没一个能用的!!!有些是php的,没闲心研究了,现在说说为什么不能用:绝大多数的DEMO都是基于redis的watch特性的事务实现①,个别是基于redis分布式锁实现②。当然还有些用了脚本的,我也没仔细看是lua还是调用redis指令,哪有那个闲心去研究哇。照顾一下
转载 2023-08-22 21:43:50
52阅读
1、字符串相关命令 :set key val ex ex是设置过期时间get keyredis使用可变长的字节数组来存储字符串类型;当更新数据的时候,如果更新的内容超过了数组的长度,在数据小于一定值(1M)的情况下会成倍的增加比如8k->16k;如果超过1m,每次只会增加1M的容量2、列表相关命令 : 入队lpush key val 、rpush key val 出队 lpop key 、r
转载 2023-07-10 23:25:02
124阅读
如何使用Redis实现秒杀作者:Leah如何使用Redis实现秒杀?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。导语:秒杀想必大家都了解,在短时间内请求访问会激增,同时要保证不会超卖和数据的准确,对于技术方面还是有些考验的。可惜的是,一直没有机会在项目中实现。再看了一些资料后,打算实验下。以下代码仅为测试所用,环境比较
最近在使用redis时发现总有一些消息队列中存在大量的处于unacked状态的消息,一般来说,如果队列中ready状态的消息数比较多,可以认为是消费者的处理能力不足,可以通过增加消费者来解决,而unacked消息存在基本是有以下两点原因:消费者取走消息后没有及时做消息确认,对于开启手动确认机制的,不进行ack则消息会一直以unacked状态留在队列中。消费者处理能力不足。生产者投放消息的速度较快,
1. Redis分布式锁实现原理分布式锁本质上要实现的目标就是在Redis里面占一个“茅坑”,当别的进程也要来占时,发现已经有人蹲在那里了,就只好放弃或者稍后再试。占坑一般是使用setnx(set if not exists)指令,只允许被一个客户端占坑。先来先占,用完了,再调用del指令释放茅坑。死锁问题:如果逻辑执行到中间出现异常了,可能会导致del指令没有被调用,这样就会陷入死锁,锁永远得不
转载 2023-09-26 12:05:50
72阅读
Redis 的消息队列1000+最新Java面试题 Redis 可以作为消息队列,使用简单。应用的场景: 数据场景简单和单一能够容忍数据丢失实现方式List 原理Redis的列表是使用双向链表实现的,保存了头节点和尾节点,所以在列表的头部和尾部两边插入或获取元素都是非常快的,时间复杂度为O(1)。模式lpush/rpush(推送消息)rpop/lpop(拉取消息 非阻塞)brpop/blpo
转载 2023-05-25 10:29:23
48阅读
集成redis的pom依赖以及yml文件,可以参考我之前的博客,这里不再赘述。 实现redis消息队列,用到的是list数据类型,所以首先修改之前的redis配置文件: 1.RediTemplateUtil/** * list列表类型:先进后出栈形式,单个值插入 * @param key * @param value * @return */
转载 2023-05-29 16:48:09
285阅读
秒杀活动在一般的网络商城中我们会经常接触到一些高并发的业务状况,例如我们常见的秒杀抢购等活动,在这些业务中我们经常需要处理一些关于请求信息过滤以及商品库存的问题。在请求中比较常见的状况是同一用户发出多次请求或者包含恶意的攻击,以及一些订单的复购等情况。而在库存方面则需要考虑超卖这种状况。下面我们来模拟一个简单可用的并发处理。 直接上代码代码的流程1.模拟用户请求,将用户写入redis队列
转载 2023-07-09 20:34:25
64阅读
Redis除了做缓存,还能做什么分布式锁 : 可以基于 Redisson 来实现分布式锁。限流 :可以通过 Redis + Lua 脚本的方式来实现限流。消息队列Redis 自带的 list 数据结构可以作为一个简单的队列使用,Redis5.0 中增加的 Stream 类型的数据结构更加适合用来做消息队列。复杂业务场景 :通过 Redis 以及 Redis 扩展提供的数据结构,可以很方便地完成
  • 1
  • 2
  • 3
  • 4
  • 5