memcached三:安装及memcached经典问题

一、安装memcached

安装php之memcached插件:

使用memcached,连接memcached服务器:

安装python之memcached插件:

使用memcached,连接memcached服务器:

 

二、memcached经典问题

缓存雪崩:一般是由某个缓存节点失效,导致其它节点的缓存命中率下降、缓存中缺失的数据去数据库查询。短时间内,造成数据库服务器崩溃。

重启DB,短期又被压跨,但缓存数据也多一些。如此反复多次重启DB,等缓存重建完成,DB才稳定运行。

解决办法:优化集群memcached算法,如使用分布式一致性hash算法;即使某节点失效,也没有太大影响。

或者,是由于缓存周期性的失效,比如每6小时失效一次,那么每6小时,将有一个请求峰值,严重者甚至令DB崩溃。

解决办法:调整缓存的周期3-9小时,不要集中失效,也不要把大量失效放在白天,而是在夜里慢慢建立缓存。

 

缓存的无底洞现象:在指在集群memcached中,增加缓存服务器,但是由于数据同样的分散或更分散。

原来查一台服务器,假如需要查询2次;增加一台服务器之后,由于数据分散或更分散;如今,还是需要到每台服务器上都查两次,这样的结果是:数据虽然分散了,但查询的次数,即连接次数,并没有减少,反而总次数增加了。这样,无论增加多少台服务器,查询的连接次数,并没有减少,有可能反而增多,性能并没有得到提升!!这就是缓存的无底洞现象。

解决办法:数据应该相对集中。如查询某用户的信息,此用户的基本信息应该只为一个键,只需查一次。即键的设计问题,要跟mysql的索引类似的思想。

  在计算某个key应该在哪个服务器上,应该只根据这个value的主要属性(主键字)来确定。

  把某一组key,按key的共同前缀,提供共性,做为"索引"

 

 

memcached过期数据惰性删除:

1.当某个值过期后,并没有从内存删除,因此,stats统计时,curr_item有其信息。

2.当革枪战新值去占用他的位置时,当成空chunk来占用。

3.当get值时,判断是否过期;如果过期,返回空,并且清空,curr_item就减少

这个过期,只是让用户看不到这个数据而忆,并没有在过期的瞬间,立即从内存删除,这个就称为惰性失效。

惰性失效的好处:节省了cpu时间和检测的成本。

memcached使用的删除机制:LRU机制。

即使某个key设置的不失效,也有可能被LRU机制删除。

LRU--最近最少使用

FIFO--先进先出

RAND--随机

 

永久数据被踢的现象:就是由LRU机制,假如永久数据不活跃,也有可能被删除

解决办法:将永久数据和非永久数据,分开放。

 

posted on 2018-08-19 11:39  myworldworld  阅读(67)  评论(0)    收藏  举报

导航