ruby-on-rails - Resque缓存事件记录校准

标签 ruby-on-rails activerecord redis resque

我有一个简单的 resque 作业,它接受一个模型 ID,获取它,然后对获取的项目调用一个方法。

class CupcakeWorker
  @queue = :cupcake_queue
  def self.perform(cupcake_id)
    @cupcake = Cupcake.find(cupcake_id)
    p @cupcake
  end
end

我从 Cupcake 的模型中排队,after_commit 使用 'enqueue' 方法

def bake
  Resque.enqueue(CupcakeWorker, self.id)
end

作业排队并正确执行。但是,如果我在数据库中或通过 UI 修改记录的数据并继续将作业再次排队,则操作不会使用新值执行。

如果我重新启动 resque 工作进程,我只能让它获取新值。 resque 是否正在缓存对象?有没有办法确保每次调用 worker 时都从数据库中重新获取它?

编辑:

我什至提取了查询日志...提交发生在获取纸杯蛋糕的选择查询之前... 所以这既不是订单的竞争条件,也不是查询获取它时的缓存问题...... 是无知的家伙..那会是什么? 顺便说一句,我在 rails 2.3.8 和 redis n resque 组合中使用 after_commit gem

最佳答案

您可以尝试使用此代码强制重新请求命中数据库

ActiveRecord::Base.uncached do
  @cupcake = Cupcake.find(cupcake_id)
end

未缓存在 2.3.8 中可用

这应该有效,除非问题不是真正的缓存问题。让我们知道它是否适合您。

关于ruby-on-rails - Resque缓存事件记录校准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15092766/

相关文章:

caching - 为什么功能测试会在我的 Redis 查询缓存上创建新记录?

node.js - session 存储在每个http请求上获取和设置?

ruby-on-rails - 如何通过载波将图像上传到 S3 并将文件名保存在数据库中?

ruby-on-rails - 行为不端 db :seed in Rails

ruby-on-rails - Rails Active Record - 一次保存多个对象

ruby-on-rails - PG::UndefinedTable:错误:使用 SELECT DISTINCT ON 时缺少表的 FROM 子句条目

mysql - 你如何访问 ruby​​ on rails 2 中的 bit mysql 数据类型?

ruby-on-rails - 使用 Jruby/Rails 实现 Google 的 hashbang/Ajax 爬网?

ruby-on-rails - 事件记录/Postgres : PGError must appear in the GROUP BY clause or be used in an aggregate function

python - Celery 任务未在 docker-compose 中运行