- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
运行我的应用一段时间后,Redis 没有回答查询,只说 QUEUED。似乎一个交易是开放的,而我在我的代码中执行所有交易。为什么交易没有完成?有没有办法检测和回滚它?
我查看了事务对象,没有丢弃、回滚或类似的东西。
问题开始时我有这个日志。
StackExchange.Redis.RedisConnectionException: An unknown error occurred when
writing the message
at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message
message, ResultProcessor`1 processor, ServerEndPoint server)
at StackExchange.Redis.RedisTransaction.Execute(CommandFlags flags)
当 Redis 不断回复“QUEUED”时,monitor 命令只记录 PING。
最佳答案
您的交易似乎没有正常结束。例如 EXEC
命令不会在同一个 redis 连接中为 begin 命令 MULTY
执行。
这是一个例子:
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set x 123
QUEUED
127.0.0.1:6379> set y 456
QUEUED
127.0.0.1:6379> set z 678
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) OK
无论你在 MULTY
命令后输入了多少,它总是显示 QUEUED 直到 EXEC
命令被执行。如果有,请仔细检查您的代码
any thing missed after transaction started
或者您正在使用相同的共享 redis-connection 对象来存储值。
更新:来自评论:在 redis 中回滚是不可能的,但是通过以下方式丢弃这个事务:
> SET foo 1
OK
> MULTI
OK
> INCR foo
QUEUED
> DISCARD
OK
But the thing that I'm really looking for is that is there a way to detect and rollback it?
是的,可以检测到错误。但是redis本身并不支持回滚。来自 redis 文档:
Why Redis does not support roll backs?
If you have a relational databases background, the fact that Redis commands can fail during a transaction, but still Redis will execute the rest of the transaction instead of rolling back, may look odd to you.
However there are good opinions for this behavior:
Redis commands can fail only if called with a wrong syntax (and the problem is not detectable during the command queueing), or against keys holding the wrong data type: this means that in practical terms a failing command is the result of a programming errors, and a kind of error that is very likely to be detected during development, and not in production. Redis is internally simplified and faster because it does not need the ability to roll back. An argument against Redis point of view is that bugs happen, however it should be noted that in general the roll back does not save you from programming errors. For instance if a query increments a key by 2 instead of 1, or increments the wrong key, there is no way for a rollback mechanism to help. Given that no one can save the programmer from his or her errors, and that the kind of errors required for a Redis command to fail are unlikely to enter in production, we selected the simpler and faster approach of not supporting roll backs on errors.
关于c# - Redis 使用 'QUEUED' 回复所有查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57286118/
我正在测试 Mandrill API 并向我的 GMail 帐户发送了一封电子邮件。在 API 日志中,它说: "status": "queued" 根据 https://mandrill.zende
我正在使用 Airflow v1.8.1 并在 kubernetes 和 Docker 上运行所有组件(worker、web、flower、scheduler)。 我将 Celery Executor
据我所知,可以创建一个 nonblocking网络socket在 PHP 5.x 中。 但是,如果脚本使用如下相同的非阻塞套接字发送多条长消息,会发生什么情况: socket_write($socke
这个问题是指中消息的出队问题Oracle Streams 高级队列 . 我需要确保按顺序处理彼此相关的消息。 例如,假设队列中包含四个消息,这些消息具有称为事务引用 (txn_ref) 的业务相关字段
我需要实现一个公平的排队系统,以便根据某个消息 header 的值,针对当前排队的消息上该 header 的所有值,以循环方式处理消息。 系统中的消息自然地按某些属性进行分组,其中有数千个可能的值,并
遵循 Qt documentation 的建议和 this question's answers ,我的代码结构如下: 模拟器.h: class Emulator : public QObject {
运行我的应用一段时间后,Redis 没有回答查询,只说 QUEUED。似乎一个交易是开放的,而我在我的代码中执行所有交易。为什么交易没有完成?有没有办法检测和回滚它? 我查看了事务对象,没有丢弃、回滚
我正在使用 mailgun API 发送电子邮件。我错误地调用了一个函数,该函数在 Mailgun 中对数千封电子邮件进行了排队。 有没有办法取消/清除队列? 最佳答案 除了联系 Mailgun 支持
我从手机发送到 Twilio 的大部分消息都“排队”。这很奇怪,因为文档听起来好像状态甚至不适用于传入消息“发送消息的 API 请求成功并且消息已排队等待发送”至少我是这样读的。我不在乎它们是否排队,
我有一个 ASP .NET 核心 Web API,它使用描述的排队后台任务 here . 我使用了提供的代码示例并添加了 IBackgroundTaskQueue , BackgroundTaskQu
我在使用 Mandrill 发送电子邮件时遇到问题,我创建了一个帐户和一个新模板,但是当我尝试发送该模板的测试时......即使我曾经发送过电子邮件,我也会收到以下消息。 " Message not
如果我的术语有点偏差,请原谅;我对此很陌生。 我创建了一个 Azure 事件网格订阅,每当我将文件上传到 Blob 存储时,该订阅就会触发一个事件。我有一个响应此事件的 Azure 函数。我终于完成了
我在bluemix中使用自己上传的postgres图像启动了一个docker容器。 docker 容器现在处于“已排队”状态数小时。这是我所做的: //将最新的postgres图像上传到bluemix
如何从 Laravel 作业类中访问负载? 我试过: pdf = $pdf; } /** * Execute the job. * * @return v
我有兴趣使用具有类似于 MSMQ 功能的免费库在 win 表单应用程序中的 3 个应用程序域之间发送/接收消息。我只需要私有(private)队列功能(没有公共(public)队列或 AD 支持)请提
我们有一个场景,提交给 ThreadPoolExecutor 的任务是长时间运行的。当线程池启动时,我们以核心池大小 = 5、最大池大小 = 20 和队列大小 10 启动它。在我们的应用程序中,大约有
我已经在 lambda 函数内部通过 athena 成功查询 s3 一段时间了,但它突然停止工作了。进一步调查显示, get_query_execution() 的响应返回“已排队”状态(我被引导相信
动态壁纸崩溃,代码如下 public void render(){ Canvas canvas = null; try{ canvas = this._surfaceH
我正在用 mocha 测试一个模块,场景是一个小类,它有方法,有一个必需的回调参数。 当我在第一个 describe 上运行测试时,它得到了预期的结果,当它在第二个和第三个 describe 上运行时
我要为邮件创建队列作业。一旦我在命令提示符 php artisan make:job SendSMSMessages --queued 中点击 artisan 命令,我就遇到了如下问题。 The "-
我是一名优秀的程序员,十分优秀!