Memcache有交易吗?

时间:2011-03-03 22:18:09

标签: sql transactions memcached

虽然我找不到任何东西,但我想我会仔细检查 - memcache是​​否支持交易?

如果没有,我敢打赌是可能的答案,那么在具有交易的环境中使用memcache的正确方法是什么?每次计划更新时都不必读取数据库,即使数据在缓存中,只是为了设置锁定?例如,更新某些数据的脚本如下所示:

  1. BEGIN; SELECT ... FOR UPDATE;
  2. 计算...
  3. 更新表...;
  4. 更新缓存
  5. COMMIT;
  6. 我认为您必须在运行更新查询后更新缓存,以防您遇到死锁并需要回滚。但是你也应该在提交之前更新缓存,以防任何其他线程在等待读取你的数据,并且可能在你之前用更新的数据意外地更新它的缓存,导致你现在已经过时的数据被覆盖了。

    这是正确的步骤顺序吗?有没有办法在读取更新时不必点击db?

2 个答案:

答案 0 :(得分:5)

Memcache确实有一个名为CAS(Check And Set - 或Compare and Swap)的运算符,可以帮助您。 PHP手册上有一些文档,Memcached::cas,但其他库和语言也应该支持它。

答案 1 :(得分:0)

Memcached不支持这种意义上的事务,尽管它的操作是原子的。您可以使用数据库事务处理机制并手动更新缓存(如您指定的那样),或使用像this这样的交易包装器。