虽然我找不到任何东西,但我想我会仔细检查 - memcache是否支持交易?
如果没有,我敢打赌是可能的答案,那么在具有交易的环境中使用memcache的正确方法是什么?每次计划更新时都不必读取数据库,即使数据在缓存中,只是为了设置锁定?例如,更新某些数据的脚本如下所示:
我认为您必须在运行更新查询后更新缓存,以防您遇到死锁并需要回滚。但是你也应该在提交之前更新缓存,以防任何其他线程在等待读取你的数据,并且可能在你之前用更新的数据意外地更新它的缓存,导致你现在已经过时的数据被覆盖了。
这是正确的步骤顺序吗?有没有办法在读取更新时不必点击db?
答案 0 :(得分:5)
Memcache确实有一个名为CAS(Check And Set - 或Compare and Swap)的运算符,可以帮助您。 PHP手册上有一些文档,Memcached::cas,但其他库和语言也应该支持它。
答案 1 :(得分:0)
Memcached不支持这种意义上的事务,尽管它的操作是原子的。您可以使用数据库事务处理机制并手动更新缓存(如您指定的那样),或使用像this这样的交易包装器。