zoukankan      html  css  js  c++  java
  • 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) 解决:永久数据和非永久数据分开

  • 相关阅读:
    【Java】使用记事本运行第一个Java程序
    构建自己的PHP框架(日志)
    构建自己的PHP框架(Twig模板引擎)
    使用openssl工具生成密钥
    构建自己的PHP框架(Redis)
    构建自己的PHP框架(邮件发送)
    树莓记录
    两张图证明 WolframAlpha 的强大
    树莓3B+_Raspbian 源使用帮助
    树莓3B+_安装vim
  • 原文地址:https://www.cnblogs.com/zgxblog/p/13220521.html
Copyright © 2011-2022 走看看