memcache:更新密钥的策略?

时间:2017-05-11 12:44:26

标签: php performance optimization memcached libmemcached

更新memcache中经常存在的密钥有什么更好的方法 set()或replace()?

观察:

我观察到set vs replace对驱逐的影响。任何人都可以确认这两项操作与内存管理点的区别是什么?

1 个答案:

答案 0 :(得分:0)

正如观察中所提到的,当我们使用set()操作更新已知密钥时,我们正在逐渐被驱逐。我们更新密钥的频率实际上是不可预测的并且非常高。您可以将我们的案例与竞争资源的某种锁实现联系起来。

使用某些键进行实验后,这些键经常被更新。我们观察到replace()没有引起任何驱逐,但是set()确实会导致驱逐。

通过memcache文档herehere后,得出结论

  1. set()操作总是调用内存分配,无论如何。这导致分配此密钥的slab上的驱逐。
  2. replace()操作没有进行任何内存分配。
  3. 因此,对于更新频繁存在的密钥的问题'替换是更好的选择,至少对于我们的用例。它帮助我们避免驱逐