1.简介
Memcached 是一个 高性能的 分布式 内存对象缓存系统,用于动态Web应用减少数据库负载,提升性能。
2.试用场景
1.变化频繁,具有不稳定性的数据 (比如用户在线状态、在线人数..)
2.门户网站的新闻等,觉得页面静态化仍不能满足要求,可以放入到memcache中.
什么样的数据不适合放入memcached中?(银行,股票,证券系统.)
过大的数据不能放入到memcache(优酷网.)
--我自己的一个小结如何决定是否使用memcached
--如果是一个小网站,pv值不大,就不考虑使用memcache了
--变化频繁,查询频繁,但是不一定写入数据库(适合memcache)
--变化频繁, 一变化就要入库[比如股票,金融.](不适合memcache)
--变化不频繁,查询频繁,不管如不入库,都比较适合memcache。
3.工作原理
Memcached的神奇来自两阶段哈希(two-stage hash)。Memcached就像一个巨大的、存储了很多<key,value>对的哈希表。通过key,可以存储或查询任意的数据。 客户端可以把数据存储在多台memcached上。当查询数据时,客户端首先参考节点列表计算出key的哈希值(阶段一哈 希),进而选中一个节点;客户端将请求发送给选中的节点,然后memcached节点通过一个内部的哈希算法(阶段二哈希),查找真正的数据 (item)。
ex:
假设有3个客户端1, 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相同的客户端库(意味着阶段一的哈希算法相同),也拥有同样的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
Memcached初体验及原理讲解