有不少文章讨论memcache race condition (竞争访问),这是个很简单的场景:

两个(多个)不同的线程(进程)很短的时间间隔内修改了同一个item

公共资源当然大家都可以修改,不建议对此做任何处理,原因如下

  1. memcache是cache不是存储
  2. 要保证数据一致性,要么你自己做一个daemon程序,把资源变成独占,要么重新考虑这种情况是否适合使用memcache
  3. 用另外一个key为item加锁的方式代价太高

有两种处理办法

  1. 编码的时候头脑保持清醒:memcache是cache
  2. memcached 提供了一个cas(Check and Set ) api,它在内部为每个key维持了一个版本号,用cas api更新数据的时候,只有最新数据才能执行成功。这个api就一个潜规则,要谨慎使用

本文地址: http://lutaf.com/171.htm 鲁塔弗原创文章,欢迎转载,请附带原文链接