memcached删除机制与大数据缓存问题

 

 一、LRU删除机制

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

  b) get其值时,判断是否过期,如果过期就返回空并删除。

  c) 当添加新值去占用它的位置时,把它当成空chunk来占用位置。

  注:数据过期只是不让用户看到数据,并没有真正删除,该行为称为lazy expiration(惰性失效)。如果chunk占满了,又有新的值加入则根据LRU删除机制挤掉最近最少用的数据(最旧的)。

二、分布式之取模算法的缺陷

  a) 假设有8台服务器,运行中突然down一台,则求余的底数变成了7,后果key9%/8==1变成key9%7==2 miss(没命中)

  。。。。。。

  key55%/8==7变成key55%7==6 miss(没命中)

  所以服务器在down短期内,命中率急剧下降。

  因此采用一致性哈希分布式算法实现。

三、缓存雪崩现象

  一般是指某个节点失效,导致其他节点的缓存命中率下降,短时间内缺失大量缓存数据(或缓存数据大量失效)需要去数据库查询,造成数据库服务器崩溃。

  a) 把缓存设置为随机39小时的生命周期,不同时期失效,分散失效时间点。

  b) 把缓存时间调长,夜里(或服务器负载低的时候)跑脚本刷新缓存。

四、缓存无底洞现象

  是指memcached连接频繁,效率下降了,因此添加了memcached节点,添加后连接频率高导致的问题仍然存在,该现象称之为无底洞现象。

  a) 对于memcachedredis这种key-value存储,key的设计可以参考mysql中表/列的设计,比如user表下的的agename列。把某一组key,按其共同前缀来分布,key应该设计为: user-133,而不是user-133-age,user-133-name.

五、永久数据被踢现象

  a) 原因:惰性删除与LRU最少使用记录删除

  b) 解决:永久数据和非永久数据分开

原文地址:https://www.cnblogs.com/zgxblog/p/13220521.html