码迷,mamicode.com
首页 > 其他好文 > 详细

关于高并发下memcached可能出现的问题

时间:2014-05-14 13:13:00      阅读:447      评论:0      收藏:0      [点我收藏+]

标签:style   c   get   a   数据   使用   

     首先,说说memcached的标准用法:memcached使用高效缓存,当有一些内容不是经常变动时,可以写入其中。如果有请求要获取这块数据,则优先从缓存中取出,仅当缓存过期,则从数据库获取实时数据,并再次更新到缓存中。

  但如果网站频频出现高并发,比如说,将某块数据写入并设置有效时间为60s,但如果正好在60s后的那个瞬间,假如有10000个请求同时尝试获取这块数据,那么这10000个请求仍然只能通过数据库访问方式去获取,有没有办法缓解这种情况?

     考虑利用memcache单个操作的原子性,使得10000个并发请求中,只让其中前面少量的请求通过get得到过期后返回的null,而后面则返回缓存中的数据。比如,写入缓存时,和key=>value时间大于60s(周期可以设置长些),再写一个key_map=>true时间正好为60s,当请求key时,先去get那个key_map,如果key_map过期,则返回一次null并设置key_map为true。如果没过期,则还是返回key对应的value。这样的话,如果有10000个请求正好在60s后过来,在memcache串化的队列中,应该是这样的

 

get(key_map) 过期返回null

... (代码从第一次返回null,到set为true的时间段,可能正好有几个get也入队了)

set(key_map) 重新设置为true

get(key_map) 返回true

....

get(key) 

 

这样的话,就能控制10000个并发请求中只返回一个或少量的null,其它的都返回缓存中的数据(此时应该还是旧的数据)

 

 

 

关于高并发下memcached可能出现的问题,布布扣,bubuko.com

关于高并发下memcached可能出现的问题

标签:style   c   get   a   数据   使用   

原文地址:http://www.cnblogs.com/walkfuture/p/3724677.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!