高并发访问下避免对象缓存失效引发Dogpile效应(2)

$redis->setnx('lock:hot_items', true)尝试创建一个key作为”锁”.若key已存在,setnx不会做任何动作且返回值为false,所以只有一个客户端会返回true值进入if语句更新缓存.

给作为”锁”的key设置20s的过期时间,以防PHP进程崩溃或处理过期时,在作为”锁”的key过期之后允许另外的进程去更新缓存.

if语句中调用expensive_database_call(),将最新的数据正常保存到hot_items.

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/d3b5864825a54ddbe2bf2fb4ba2b9656.html