• 【2018夏季达沃斯】未来就业报告发布:机器将比人更“能干” 哪些职位更“吃香”? 2018-09-19
  • 西安市民:本想买点香菜吃火锅?比较后还是买了些肉 2018-09-19
  • 安吉发布乡村治理标准规范 2018-09-19
  • 华北能源监管局开展电网运行风险管控专项督查 2018-09-18
  • 马来西亚新山依斯干达特区吸资2531亿马币 ——凤凰网房产马来西亚 2018-09-18
  • 繁星戏剧挑战浸没式独角戏 2018-09-18
  • 领导干部自然资源资产离任审计制度试点 让福建省光泽县绿意盎然(图)-地方新闻-时政频道-中工网 2018-09-08
  • 人民日报评留美生数落父母:为亲情拓对话空间 2018-09-07
  • 网友给四川省委书记、省长留言获回复 共计25条 2018-09-07
  • 娱乐城新优惠 2018-09-06
  • 无人售货架现身出租车内 乘客扫码付款随时取走零食 2018-09-06
  • 江西公布拖欠劳动报酬典型案例 最高拖欠近200万元 2018-09-06
  • 做学习宣传贯彻人民领袖思想的排头兵 2018-09-06
  • 华夏幸福荣获2018中国品牌先锋大奖之杰出企业奖 2018-09-05
  • 10大路口因礼让斑马线致堵 济南交警推新规约束行人 ——凤凰网房产济南 2018-09-05
  • 大中型网站技术架构浅析 - 缓存机制与使用

    栏目: 网站建设 发布于: 2014-01-18 17:48:47

    对于一个大中型网站来说,缓存有多重要,肯定不言而喻啦。

    缓存机制(Cache mechanism)

    1 缓存主动更新

    修改数据(已缓存)时,同时立刻update/delete cache item

    适合场景:实时性要求高,更新频率较低的 entity item, 如 product item, article item .
    2 缓存被动(过期后)更新

    设置一定的过期时间,过期后删除cache,下次被访问时去DB获取最新数据同时set回cache
    适合场景:可以允许一定延迟,更新频率较高的 List item, 如:商品列表页 item .
    但这方式会有个弊端,当cache失效那个点,刚好遇上高并发的话,就可能会发生雪崩情况

    遇到这种情况可以采用分布式锁防止当失效那个点同时去DB获取数据,可以使用 zookeeper 分布式锁实现。但这时候用户还是需要等待个片刻(DB查询时间)。所以就有了下面2个改进机制。

    3 缓存主动RELOAD

    缓存永不失效或失效时间很长,独立一个服务,按业务需求定期查询最新数据并refresh cache.

    详细可以看这:CACHE RELOAD机制设计和实现

    适合场景:并发量大,允许一定延迟。如:首页、频道页等热门访问页面
    4 缓存被动RELOAD

    Cache 设置永不失效或失效时间很长,返回cache命中的内容,同时起另外一个线程,异步判断是否过期,若过期,重新reload cache. 这种方式会有个不好处:如果这cache很久没命中,下一个用户获取的是严重 out of date内容。
    适合场景:并发量一般,访问速度要求快,允许一定延迟。如:个人主页,标签产品列表等。

    缓存产品的选择

    1 LOCAL CACHE

    Guava cache 不二之选,简单易用,性能好,不必重复造轮子了。

    LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
           .maximumSize(1000)
           .expireAfterWrite(10, TimeUnit.MINUTES)
           .removalListener(MY_LISTENER)
           .build(
               new CacheLoader<Key, Graph>() {
                 public Graph load(Key key) throws AnyException {
                   return createExpensiveGraph(key);
                 }
               });
    2 REMOTE CACHE / DISTRIBUTED CACHE

    现在基本上在 memcached 和 redis 之间选择,这2个产品性能都很好,都比较稳定。

    但我个人更偏向选用redis,有几个原因:

        1)、redis 具有snapshot和aof 等持久化功能,在机房断电等宕机情况下,可以很快恢复。

        2)、redis 提供更丰富的数据结构(list,set,hash等)

        3)、redis 提供KEYS 进行枚举操作,可以通过前缀删除item(这很关键,想当年用memcache逐个受到删item,那个痛苦?。。?/span>

        4)、redis 提供Master-Slave复制机制

        5)、redis 一直在更新,产品活跃度高,关键作者antirez比较靠谱。

        6)、redis 还提供Lua Script支持,跟nginx 一样可以方便定制一些小功能。

    Except:如果要存较大的item的话(gt 10K),还是选择memcached 吧。
    转载自:http://www.rocksun.cn/2013/04/technical-guide-for-website-cache.html
    本站文章除注明转载外,均为本站原创或编译?;队魏涡问降淖?,但请务必注明出处。
    转载请注明:文章转载自 七星彩票平台
    本文标题:大中型网站技术架构浅析 - 缓存机制与使用
    IT技术书籍推荐:
    细说PHP(精要版)
    细说PHP(精要版)
    高洛峰 (作者), LAMP兄弟连 (编者)
    PHP是开发Web应用系统最理想的工具,拥有易于使用、功能强大、成本低廉、安全性高、开发速度快且执行灵活等优点?!断杆礟HP(第2版)》自出版以来,销售一路在同类书籍中领先,已成为PHP学习者首选的工具书。为了可以让读者携带方便及更精准地掌握PHP的重点、要点,同时能使之作为大学计算机系PHP教材普及,特别推出《细说PHP精要版》。本书是以《细说PHP(第2版)》为基础,提取出精华内容,都是PHP开发中必须需要掌握的技术点。全书以实用为目标设计,包含PHP开发中必备的各项技术,对已列出的每一个知识点都进行了深入详细的讲解,并附有大量的经典实例代码,图文并茂,并且侧重介绍了PHP的相关技术在实际Web开发中的应用。