对于单个用户来说,对于其某个资源(例如一个用户的资金、积分等)的更新必须是串行且具备事务。
例如:当有几个 job 陆续进来,
change job 1: inc 5 change job 2: dec 5 change job 3: inc 5 ...
每当一个 job 开始运行前,就必须检查是否有同样的 job【正在或者准备】对同个用户的某个资源进行操作, 如果有,就必须等待其完成后才能进行。
虽然 sidekiq 有一些 extensions 如 sidekiq-unique-jobs
能够控制 job 的 unique,但是它会将后来进来的 job 直接给抛弃掉,
而不是这种必须保证所有 job 的串行执行。
如果说使用 db row locking,也同样有问题,因为任务必须是 串行执行
请问有没有谁有这方面的经验?