## Redis队列bug ### 1. 问题背景 在使用Redis队列时,可能会遇到一些bug或者问题。本文将介绍一个常见的Redis队列bug,并给出相应的示例代码。 ### 2. 问题描述 在使用Redis队列时,可能会出现消息重复消费的问题。这种问题通常发生在多个消费者同时从队列中获取消息的情况下。 ### 3. 问题分析 我们先来分析一下为什么会出现消息重复消费的问题。当多个
原创 2023-10-19 03:42:16
84阅读
现在用的消息队列主要有kafka,rabbitmq和redis。相比另外两个,用redis做消息队列的优点是吞吐量高,延迟低,简单易用,易于部署和运维。缺点是没有ACK机制,可靠性方面不足。 本次用swoole + redis 来模拟个消息推送系统。思路1. 某个业务调用消息接口,将内容和对应的uid存入redis列表中,key为msg。 2. 用户连接swoole后,会有个fd来标识这个会话,
转载 2023-08-01 14:33:16
138阅读
最近线上的rm crash了一次,查看日志,发现有如下报错:2015-01-05 18:00:11,523 ERROR org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler: Request for appInfo of u
原创 2015-01-11 21:28:10
10000+阅读
一、序言       上一篇,介绍了线程池的基本工作原理,这里会介绍一些里面的一些饱和策略和几个常用的线程池方法的实现原理。 二、源码分析       线程池极力推荐我们用Executors 提供车的各种工厂,来创建我们的线程池,提供了我们常用的几种创建线程池的方式:     &
# 线上 Redis Bug 调试指南 在现代应用开发中,Redis 是一个非常流行的数据库,它以其高性能和高可用性而被广泛使用。但是,随着系统的不断变化,线上环境中有时会出现各种问题。本文将引导刚入行的小白开发者如何调试 Redis 线上 bug。 ## 1. 调试 Redis Bug 流程 在调试 Redis 线上问题时,可以遵循以下步骤: | 步骤 | 描述
原创 10月前
25阅读
# 如何实现“redis 7 bug” ## 引言 在软件开发过程中,我们经常会遇到各种各样的bug。有时候,我们需要主动去寻找和修复这些bug,以提高软件的质量和稳定性。本文将介绍如何实现一个名为“redis 7 bug”的bug,并告诉你如何修复它。 ## 整体流程 下面是实现“redis 7 bug”的整体流程,我们将用一个表格展示每个步骤。 |步骤|描述| |---|---| |1|
原创 2023-09-04 09:06:21
47阅读
        之前看了一些redis的源码类文章,对于源码有了一些初步的,浅浅的了解。        从redis的字符串开始入手          在次之前,要去了解下关于redis的简单动态字符串(SDS),以及sds 优于c语言的,理解为何要这么设计,
转载 10月前
56阅读
Redis:ClassCastException【bug
原创 2024-03-29 16:23:11
73阅读
测试之前从redis到数据库同步功能,一直是但进程在测。今天不小心多开了一个同步进程,发现bugRedis中的数据结构是一个列表,并且是不断动态增长,同步程序是一个定时任务程序,每隔n秒从Redis中读出数据(姑且称为为消费者程序,只是不清数据),然后插入DB中,持久化后不能清除Redis中的数据,所以要记录上一次读列表的结束位置。起初我使用了一个全局变量RedisListIndex,用来记录该
转载 2023-07-04 14:01:17
51阅读
RabbitMQ RabbiMQ是AMQP(高级消息队列协议)的消息中间件的一种,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗,主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层。保存这个数据。Redis队列 redis队列是一个是一个Key-Value的NoSQL数据库,开发维护很活跃,虽然它是一个Key-Valu
转载 2023-06-13 15:50:33
132阅读
Redis用双链表list实现队列的LPUSH key value [value ...] 将一个或多个值 value 插入到列表 key 的表头 如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头: 比如说,对空列表 mylist 执行命令 LPUSH mylist a b c ,列表的值将是 c b a ,这等同于原子性地执行 LPUSH mylist a 、
转载 2024-08-07 13:10:59
34阅读
(一)任务对立的好处 1.公耦合,生产者和消费者无需知道批次实现的细节,只需要决定好任务的描述格式,    这使得生产者和消费则都不同额 团队使用不同的语言编写。 2.已于扩展:消费者可以有多个,而且分布在不同的机器上,可以轻易的降低单台服务器的负载。(二)使用redis实现简单的任务队列(生产者消费者模型) 生产者命令:LPUSH key alue[....] RP
转载 2023-08-15 16:13:39
62阅读
重复消费问题:为了解决消费端因为种种原因而造成的消息丢失问题,我们都知道根源在于因为RabbitMQ的自动ack机制,所以为了避免以上问题,我们会选中手动ack,以确保消息不会因为某些原因而丢失。但随之而来的也有一个问题:如果忘记ack,或者又因为种种原因消费者端没能给RabbitMQ对应ack,无法确认消息已经被消费完了,那这条未被“约束”的消息也许就会被另一个消费者消费,就会造成重复消费问题如
转载 2023-08-15 15:47:52
122阅读
首先找到第一个切入口,redis的列表类型有两个命令LPUSH和RPOP,LPUSH命令可以让元素从左侧进入队列,RPOP命令可以让元素从右侧弹出。这样两个命令配合使用就形成了左边进,右边出的形式,间接实现了队列的功能。生产者通过LPUSH命令添加任务到某个键中,消费者通过RPOP命令不断从该键中取出任务。这时候问题来了,消费者怎么知道啥时有任务?消费者只能不断循环的读取键对应的队列,如果有任务就
转载 2023-07-08 15:11:51
107阅读
延迟队列的应用场景也很常见,例如:session的超时过期、自动取消未付款订单等等。redis中有一种数据结构叫做zset,即有序集合。元素类型为String类型,且元素具有唯一性不能重复,每个元素可附带float类型的score即分值。从zset中获取元素的时候可以通过分值进行排序后获取某个分值范围内的元素或所有元素。public class DelayQueue { private
转载 2023-08-01 15:24:21
126阅读
事务Redis 通过 WATCH、MULTI、EXEC、DISCARD 命令实现事务功能。使用命令队列(FIFO)保存客户端发送的命令,并一次性、按顺序地执行队列里的命令,知道执行完毕。例如:// 开始事务 redis> multi OK // 命令入队 redis> set name "傅园慧" QUEUED // 命令入队 redis> set age 20 QUEUED
转载 2023-08-04 19:30:14
171阅读
1、优势:松耦合                 易于扩展 ,消费者可以扩展多个,分布在不同的服务器中 2、LPUSH RPOP 3、BRPOP命令和RPOP相似,唯一区别:当列表中没有元素时,BRPOP命令会一直阻塞住链接,知道有新元素加入 4、BRPOP key timeout &n
转载 2023-07-21 23:43:32
86阅读
消息队列用途:解耦,异步,消峰。 redis实现消息队列的方式:使用List作为key。(先进先出) 实现方法:①lpush,rpop 非阻塞式 ②lpush,brpop 阻塞式 注:柱塞式队列–当队列为空/满时,无法从队列中删除/增加元素。(所谓阻塞:在某种情况下,线程被挂起,直到触发满足条件自动唤醒线程)语法样式1:(实现优先级消息队列redis 192.168.8.123>brpo
转载 2023-05-25 11:57:49
109阅读
一、Redis1、简介Redis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis支持数据的备份,即master-slave模式的数据备份。2、优势性能极高 –
转载 2023-09-15 10:23:43
50阅读
Redis 数据类型 StreamRedis 常用命令,思维导图 >>>Redis Stream 是 Redis 5.0 版本新增加的数据结构。Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等
转载 2023-07-09 19:07:57
0阅读
  • 1
  • 2
  • 3
  • 4
  • 5