IT评测·应用市场-qidao123.com

标题: MySQL for update skip locked 与 for update nowait [打印本页]

作者: 立聪堂德州十三局店    时间: 2024-12-25 17:43
标题: MySQL for update skip locked 与 for update nowait
理论(下方有实操)

for update skip locked

nowait

No BB,Show Code

成品用例

  1. CREATE TABLE `jobs` (
  2.   `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  3.   `queue` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '不同渠道队列执行的优先级,可以是high,default,low等。',
  4.   `payload` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '队列进程所需要的数据,序列化后的json字符串,包含了框架所需要的序列化数据和业务数据。',
  5.   `attempts` tinyint unsigned NOT NULL COMMENT '记录任务已经被尝试执行的次数。每次任务失败后,attempts的值会递增。当attempts达到设定的最大重试次数时,任务将被标记为失败。',
  6.   `reserved_at` int unsigned DEFAULT NULL COMMENT '表示任务被锁定(reserved)的时间戳。当一个worker开始处理任务时,任务会被锁定,以防止其它 worker同时处理相同的任务。reserved_at存储的是记录被锁定时的时间戳。',
  7.   `available_at` int unsigned NOT NULL COMMENT '记录任务应该变为可执行状态的时间戳。将任务推送到队列时,可以选择延迟任务的执行时间。',
  8.   `created_at` int unsigned NOT NULL COMMENT '队列被创建的时间戳。',
  9.   PRIMARY KEY (`id`) USING BTREE,
  10.   KEY `jobs_queue_index` (`queue`) USING BTREE
  11. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;
复制代码
  1. INSERT INTO `jobs` (`id`, `queue`, `payload`, `attempts`, `reserved_at`, `available_at`, `created_at`) VALUES (1, 'default', '这里是要被处理的任务:xxxxx', 1, NULL, 1735097169, 1735097169);
  2. INSERT INTO `jobs` (`id`, `queue`, `payload`, `attempts`, `reserved_at`, `available_at`, `created_at`) VALUES (2, 'default', '这里是要被处理的任务:xxxxx', 1, NULL, 1735097179, 1735097179);
  3. INSERT INTO `jobs` (`id`, `queue`, `payload`, `attempts`, `reserved_at`, `available_at`, `created_at`) VALUES (3, 'default', '这里是要被处理的任务:xxxxx', 1, NULL, 1735097189, 1735097189);
复制代码
[code]select * from `jobs` where `queue` = 'high' and ((`reserved_at` is null and `available_at`




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4