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) 收藏 举报
浙公网安备 33010602011771号