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,可以存储或查询任意的数据。 客户端可以把数据存储在多台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初体验及原理讲解

时间: 2024-10-10 02:36:59

Memcached初体验及原理讲解的相关文章

Memcached初体验及原理解说

1.简单介绍 Memcached 是一个 高性能的 分布式 内存对象缓存系统,用于动态Web应用降低数据库负载,提升性能. 2.试用场景 1.变化频繁,具有不稳定性的数据 (比方用户在线状态.在线人数..) 2.门户站点的新闻等,认为页面静态化仍不能满足要求,能够放入到memcache中. 什么样的数据不适合放入memcached中? (银行,股票.证券系统.) 过大的数据不能放入到memcache(优酷网.) --我自己的一个小结怎样决定是否使用memcached --假设是一个小站点,pv值

Memcached初体验

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. Memcached的使用原理应该不难理解,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度. 提高可扩展性. Memcac

SpringBoot初体验及原理解析

一.前言 ? 我们来用SpringBoot开始HelloWorld之旅.SpringBoot是Spring框架对"约定大于配置(Convention over Configuration)"理念的最佳实践.SpringBoot应用本质上就是一个基于Spring框架的应用.我们大多数程序猿已经对Spring特别熟悉了,那随着我们的深入挖掘,会发现SpringBoot中并没有什么新鲜事,如果你不信,那就一起走着瞧呗! 二.SpringBoot初体验 首先,我们按照下图中的步骤生成一个Spr

Java8初体验(2):Stream语法详解

原文出处: 一冰_天锦 上篇文章Java8初体验(1):lambda表达式语法比较详细的介绍了lambda表达式的方方面面,细心的读者会发现那篇文章的例子中有很多Stream的例子.这些Stream的例子可能让你产生疑惑,本文将会详细讲解Stream的使用方法(不会涉及Stream的原理,因为这个系列的文章还是一个快速学习如何使用的). 1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequent

elmah - Error Logging Modules and Handlers for ASP.NET - 1 : 初体验

elmah(英文):https://code.google.com/p/elmah/ 写作思路:先看结果,然后再说原理 elmah文章基本内容如下 1.安装 2.基本使用 3.详细配置讲解 简介 ELMAH是一个开源项目,其目的是记录和报告在ASP.NET Web应用程序未处理的异常. 早在2004年9月与Atif阿齐兹和斯科特·米切尔发表在MSDN Library,其目的是作为一个概念证明,编写自包含的功能与ASP.NET HTTP模块和处理程序是绝对有可能的,大多有这种特征可能是一篇文章插入

【转】Java8初体验(二)Stream语法详解

原文链接 http://ifeve.com/stream/ Java8初体验(二)Stream语法详解 感谢同事[天锦]的投稿.投稿请联系 [email protected]上篇文章Java8初体验(一)lambda表达式语法比较详细的介绍了lambda表达式的方方面面,细心的读者会发现那篇文章的例子中有很多Stream的例子.这些Stream的例子可能让你产生疑惑,本文将会详细讲解Stream的使用方法(不会涉及Stream的原理,因为这个系列的文章还是一个快速学习如何使用的). 1. Str

【Spark深入学习 -15】Spark Streaming前奏-Kafka初体验

----本节内容------- 1.Kafka基础概念 1.1 出世背景 1.2 基本原理 1.2.1.前置知识 1.2.2.架构和原理 1.2.3.基本概念 1.2.4.kafka特点 2.Kafka初体验 2.1 环境准备 2.2 Kafka小试牛刀 2.2.1单个broker初体验 2.2.2 多个broker初体验 2.3 Kafka分布式集群构建 2.3.1 Kafka分布式集群构建 2.3.2 Kafka主题创建 2.3.3 生产者生产数据 2.3.4消费者消费数据 2.3.5消息的

KVM之初体验——手动及自动化安装KVM脚本

一,什么是KVM KVM包括很多部件:首先,它是一个Linux内核模块(现在包括在主线中)用于转换处理器到一种新的用户 (guset) 模式.用户模式有自己的ring状态集合,但是特权ring0的指令会陷入到管理器(hypervisor)的代码.由于这是一个新的处理器执行模型,代 码不需要任何的改动.   除了处理器状态转换,这个内核模块同样处理很小一部分低层次的模拟,比如MMU注册(用于管理VM)和一部分PCI模拟的硬件. 在可预见的未来,Qemu团队专注于硬件模拟和可移植性,同时KVM团队专

语音识别之初体验

一.概述 作为最自然的人机交互方式 --语音,正在改变人们的生活,丰富多媒体技术的应用.语音识别技术是语音信号处理的一个重要分支,也是近年来很火的一个研究领域.随着科技的飞速发展,语音识别不仅在桌面PC和大型工作站得到了广泛应用,而且在嵌入式系统领域也占有一席之地,如智能家居.苹果的Siri.车载语音识别系统等.相信在不久的将来,语音识别技术必定会渗透在人们生活的每个角落. 二.语音识别系统的分类 语音识别按照说话人的说话方式可以分为孤立词(IsolatedWord)识别.连接词(Connect