zoukankan      html  css  js  c++  java
  • Memcached初体验及原理解说

    1.简单介绍

    Memcached 是一个 高性能的 分布式 内存对象缓存系统,用于动态Web应用降低数据库负载,提升性能。


    2.试用场景

    1.变化频繁,具有不稳定性的数据 (比方用户在线状态、在线人数..)
    2.门户站点的新闻等,认为页面静态化仍不能满足要求,能够放入到memcache中.
    什么样的数据不适合放入memcached中?

    (银行,股票。证券系统.)
    过大的数据不能放入到memcache(优酷网.)
    --我自己的一个小结怎样决定是否使用memcached
    --假设是一个小站点,pv值不大,就不考虑使用memcache了
    --变化频繁,查询频繁,可是不一定写入数据库(适合memcache)
    --变化频繁, 一变化就要入库[比方股票,金融.](不适合memcache)
    --变化不频繁,查询频繁,无论如不入库,都比較适合memcache。

    3.工作原理

    Memcached的奇妙来自两阶段哈希(two-stage hash)。Memcached就像一个巨大的、存储了非常多<key,value>对的哈希表。通过key。能够存储或查询随意的数据。 client能够把数据存储在多台memcached上。

    当查询数据时,client首先參考节点列表计算出key的哈希值(阶段一哈 希),进而选中一个节点;client将请求发送给选中的节点,然后memcached节点通过一个内部的哈希算法(阶段二哈希),查找真正的数据 (item)。

     

    ex:

    如果有3个client1, 2, 3,3台memcached A, B, C: Client 1想把数据value”张三”以key “zs”存储。Client 1首先參考节点列表(A, B, C),计算key “zs”的哈希值。假memcached B被选中。接着,Client 1直接connect到memcached B,通过key “zs”把数据”张三”存储进去。

    Client 2使用与Client 1同样的client库(意味着阶段一的哈希算法同样),也拥有同样的memcached列表(A, B, C)。

     于是,经过同样的哈希计算(阶段一)。Client 2计算出key “zs”在memcached B上,然后它直接请求memcached B,得到数据”张三”。



    4.FAQ

    a.memcached实现存储的算法:

    LRU(近期最少使用)+超时机制

    b.memcached的分布式特征

    Memcached Server并不具有分布式特征,每一个Server都是独立执行的,各Server之间不存在通信获知其它节点状态和数据备份的功能。那么Memcached为什么还是分布式的缓存系统呢?事实上说到Memcached的分布式,是将Memcached Client结合在一起考虑的。

    详细的分布式策略。由Client实现。也就是说Memcached的分布式,不是系统层的。而是应用层的。详细实现能够參考上面的工作原理。



    c.memcached假设保证多线程数据的一致性?

    通过CAS(Check And Set)协议来保证数据的一致性。CAS协议类似于Hibernate的乐观锁机制,通过设置版本来保证数据的一致性。

    备注:博主将在未来祥解Memcached在java web应用程序中的使用,尽情期待!


    欢迎大家一起讨论学习!

    实用的自己收!

    记录与分享,让你我共成长!

    欢迎查看我的其它博客。我的博客地址:http://blog.csdn.net/caicongyang






  • 相关阅读:
    spring管理hibernate session的问题探究
    【J2EE入门】13个规范
    WCF基础
    初识WCF
    一路风雨,一路收获
    【项目经验】——JSON.parse() && JSON.stringify()
    【项目经验】--EasyUI DataGrid之右键菜单
    NuGet 发布
    【项目经验】之——Controller向View传值
    【项目总结】之——JS分割字符串
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5229088.html
Copyright © 2011-2022 走看看