Memcached初体验及原理解说

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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






以上是关于Memcached初体验及原理解说的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot初体验及原理解析

pymongo初体验及插入性能测试

高性能网关Soul深入解析:http初体验及divide插件功能解析

LevelDB初体验测试

领会Memcached高可用群集(Memcached主主复制+Keepalived)

tomcat简介及原理解说