我们正在使用PHP的memcached。我一直试图找出为什么我们看到memcached似乎没有更新的一些问题。你能想到为什么调用memcache-> replace()实际上不会更新对象的原因?我们只是在数组类型对象上调用memcache-> replace()。该阵列确实包含大量数据,但我认为我们没有超过1MB的上限。失败似乎是间歇性的。它大部分时间都有效但偶尔会对我们来说不是什么大问题。此外,memcached是同步执行还是异步?如果它是异步的,那么可能存在竞争条件。
答案 0 :(得分:0)
我相信memcache客户端是同步的,但复制是异步的,因此如果您使用复制,则可能在复制完成之前将值写入一个服务器并从另一个服务器读取。如果您正在使用复制,请查看是否可以在不复制的情况下重现错误。
答案 1 :(得分:0)
为什么使用replace
而不是set
? replace
周围的语义允许它在你没有覆盖数据时失败 - 特别是没有数据,只有一些数据。
如果要覆盖特定的数据,请使用cas
。如果您只想存储数据,请使用set
。