• 合众人寿阜阳中支因部分保单客户信息不真实被罚款10万元 2018-07-17
  • 顾客网购电视安装时发现屏裂 因已开箱无法正常退货 2018-07-17
  • 20多年未开口的央视女主播 在政协会上说了什么? 2018-07-17
  • 为什么只有韩国能生产大尺寸OLED?中国不行 2018-07-16
  • “高盐值”真面目 这些食品不咸也高盐 2018-07-16
  • 山西太原:出租车拟调价以应对网约车市场冲击 2018-07-15
  • 默勒镇多措并举全面打响生态环境保护攻坚战 2018-07-15
  • 去年广州专利申请量首破10万件 2018-07-15
  • 冬日浪漫礼遇 圣诞节游戏里“约“起来 2018-07-15
  • 中国空军歼-10C战机担负战斗值班任务 2018-07-15
  • 三国是我对生命话题的探讨 2018-07-15
  • 台媒:大陆宠物旅馆春节一床难求 豪华单间一天800元 2018-07-14
  • 大学生:这个寒假不一样(教育眼) 2018-07-14
  • 女性消费释放诱人商机 市场规模接近2.5万亿元 2018-07-14
  • “会升值”的收藏品盯上老年人钱包 往往没见到实物 2018-07-13
  • 大中型网站技术架构浅析 - 缓存机制与使用

    栏目: 网站建设 发布于: 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开发中的应用。