首页 > 其他 > 详细

Memcached初体验及原理讲解

时间:2014-06-22 18:51:09      阅读:314      评论:0      收藏:0      [点我收藏+]

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初体验及原理讲解,布布扣,bubuko.com

Memcached初体验及原理讲解

原文:http://blog.csdn.net/caicongyang/article/details/32313011

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!