`
zhangjunbao
  • 浏览: 95230 次
  • 性别: Icon_minigender_1
  • 来自: 核桃博客
社区版块
存档分类
最新评论

缓存学习-memcached基本概念

阅读更多

http://www.hetaoblog.com/%E7%BC%93%E5%AD%98%E5%AD%A6%E4%B9%A0-memcached%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5/

 

缓存新手,写错了请指出,谢谢

 

以前的项目里的缓存都是自己实现的简易版,下午学习下流行的缓存,先来到大名鼎鼎的memcached,当前版本是1.4.5,

http://memcached.org/,http://code.google.com/p/memcached/wiki/

memcached是一个开源、高性能、分布式缓存系统,主要特性如下:

1. 使用简单的key-value存储,适用于存储各种格式的小数据,比如数据库查询结果、api调用结果、页面展示结果;

2. memcached有服务端和客户端,有一些api通过网络交互,

(看到这里,我觉得暂时我是用不上了,就一台机器的话还是直接在JVM内存里面搞cache好了,没必要非要通过网络操作下,那样肯定会更慢;)

基本的api包括set/add/replace/get/gets/delete/append/prepend/cas/incr/decr/stats/flush_all和一些其他统计api

3. memcached所有操作都在内存中进行,所有操作都保证是o(1)的常数时间,所以速度比较快;

4. memcached在server之间没有任何通信和同步机制,那猜想应该数据没有重复(冗余),如果一个节点挂了的话肯定这部分数据就没有了,相当于缓存不命中,这符合KISS原则;

5 服务端的内容是key,过期时间,一些可选的flag和原始数据(raw data),数据需要先序列化(这个地方需要注意下,java默认的序列化性能不太好,最好是直接存string,真的需要对象的时候可以考虑用其他序列 化方式,比如我看到有人用hessian做序列化)

6. 缓存剔除策略基本是超时设置+LRU算法,当然你也可以手动去删除,当然一般说来如果数据变化的时候,应该更新下cache

7. key最大250个字符,item最大1MB,当然key/item最好都别太大,最长过期时间是30天

8. 最开始是文本协议,从1.3开始支持二进制协议,这样可以减少更少的cpu消耗

9.既不做身份验证、也不做失效处理(fail over,就是一台挂了可以自动切换到另外一台继续提供原有的服务,对于cache来说这个非常难做,必须有事先的冗余和同步机制才可以这么搞,否则挂了肯定挂了)、也不做节点同步(这里说的第4点), 再KISS下

10. hash有两步,第一对客户端来说知道把某个key唯一的映射到n台cache服务器的某一台,第二对服务器来说就是在内存里面把key放到一个hashmap里面

客户端hash的关键是一致性hash,一致性的意思是多台节点的增加和删除不影响原有节点的hash结果,

具体点,具个非一致性hash的意思,如果简单的时候hashcode()%N的算法,那么N变化(服务器的增加或减少,比如一个节点挂掉),那么 原来所有的hash结果都失效了,一个key过来算出来的服务器是不对的,上面根本不包含之前存进去的东西,相当于要全部重新hash过,这样显然是不行 的;

memcache实现了一致性hash,基本原理是将key算出hashcode后,也将服务节点也算出一个hashcode(), 然后把这两个hash值放到一个2^32的环上,

11. 内存方面使用了slab分配代替malloc/free以提高性能,更好的匹配key/value,并且value是小对象的场景

12. 单个api是原子的

13. 由于设计简单后(比如不做冗余,不做服务器节点间通信后),再加上良好的一致性hash,memcached作为分布式缓存最大的优点是,几乎可以无限水平扩展,不够了就加节点,并且节点的增加几乎不会增加任何复杂性和额外的开销

14. memcached的java客户端有xmemcached, spymemcached等

15. 网络部分基于libevent, 也就是非阻塞的事件处理,连接增加也能发挥O(1)的性能,解决c10k问题;

16, 当前版本已经支持多线程,可以更好的利用多cpu的硬件

17. memcached不推荐用来存放session相关的数据,因为,如果一个节点挂掉了,那么这个节点上的所有session信息都没有了,

这对于用户的体验是有问题的,比如你在某网站买东西,找了半天之后突然购物车里面的东西都没了,那肯定是不行的;

网上看到有人搞了个memcached-session-manager , 在tomcat里面仍然保存默认的session,然后在放一份到memcached,实现tomcat的fail over,同时,同时他又实现了memcached的fail over,如果一个memcached节点不available,那么就生成一个新的sessionid,同时把session信息从tomcat复制到 其他memcached节点

分享到:
评论
1 楼 azheng270 2011-06-04  
呵呵,总结的很好,一起学习

相关推荐

    hibernate-memcached-1.1.0-sources.zip

    首先,我们需要理解Hibernate和Memcached的基本概念。Hibernate是Java中的一个ORM框架,它允许开发者使用面向对象的方式来操作数据库,降低了数据库操作的复杂性。而Memcached则是一种高性能、分布式的内存对象缓存...

    php-memcached-demo.tar.gz

    通过学习和实践PHP-Memcached-Demo项目,开发者不仅可以掌握PHP与Memcached的整合,还能进一步理解缓存技术在提高Web应用性能中的重要作用。结合实际项目需求,灵活运用这些知识,将有效提升网站的响应速度和用户...

    Memcached相关程序

    Memcached是一种高性能、分布式内存对象缓存系统,用于在分布式计算环境中存储临时数据,以减少对数据库的访问压力。...同时,这也是一个很好的学习资源,可以帮助初学者快速掌握Memcached的基本操作和高级特性。

    Python-强大的memcached客户端拥有shdict缓存层和许多其他功能

    学习和使用这样的Python memcached客户端库,不仅需要掌握Python语言和memcached的基本概念,还需要理解缓存系统的设计原则,以及如何通过编程技巧来优化性能。对于大型Web应用而言,合理地使用缓存是提高响应速度、...

    Memcached缓存技术资料源码

    **一、Memcached基本概念** 1. **缓存**: 缓存是一种存储技术,用于临时存储频繁访问的数据,减少对后端慢速存储(如数据库)的访问,提高系统性能。 2. **分布式**: Memcached支持在多台服务器上部署,可以将数据...

    Memcached分布式缓存入门

    **一、Memcached的基本概念** 1. **缓存**:缓存是一种存储技术,用于临时存储常用数据,以便快速访问。在Web应用中,缓存可以显著减少对数据库的直接查询,从而提高系统性能。 2. **分布式**:分布式是指多个独立...

    memcached缓存技术代码版

    1. **Memcached基本概念** - **分布式缓存**:Memcached通过在网络中的多个节点上存储数据副本,实现了数据的快速访问和负载均衡。 - **Key-Value存储**:Memcached基于键值对(Key-Value)的数据结构,允许开发者...

    test-memcached:测试 java memcached api

    首先,我们要了解Java Memcached API的基本概念。其中最常用的库是spymemcached和xmemcached。它们提供了简单的接口,使得开发者能够快速地将Memcached的缓存机制融入到Java应用中。spymemcached以其轻量级和稳定...

    网上收集最新的Memcached学习资料

    Memcached是一种高性能、分布式内存对象缓存系统,广泛应用于Web应用中...而提供的PDF文档和PPTX文件,将更深入地介绍Memcached的各个方面,包括基础概念、内存管理和集群搭建等,对于学习和掌握Memcached非常有帮助。

    memcached连接demo

    首先,让我们了解Memcached的基本概念。Memcached基于简单的键值对存储机制,它将数据存储在内存中,以提供快速的数据检索。由于内存的读取速度远高于硬盘,所以Memcached能够显著提升应用性能。它支持多线程并发...

    PHP100视频教程73:PHP.MemCached高级缓存配置.rar

    1. **Memcached的基本概念** - Memcached是一种基于内存的键值对存储系统,用于临时存储中小规模的数据。 - 它通过网络通信协议在服务器之间共享数据,提供高性能的缓存解决方案。 - 数据以键(key)和值(value...

    memcached学习资料

    **一、memcached的基本概念** 1. **分布式内存缓存**:Memcached基于内存存储,不持久化数据,旨在提高数据读取速度。分布式特性允许在多台服务器上分散存储,以实现更大规模的数据处理。 2. **键值对存储**:...

    memcached-1.2.6-win32-src

    此外,为了确保正常运行,用户还需要了解网络编程的基本概念,以及如何与memcached客户端库进行交互。 总的来说,memcached-1.2.6-win32-src为Windows用户提供了一种在本地搭建高效缓存服务的途径,无论是用于学习...

    memcached缓存组件资料.rar

    1. **基本概念**:了解Memcached的工作原理,包括它的Key-Value存储模型,以及如何通过键来查找和操作数据。 2. **安装与配置**:在不同的操作系统(如Linux、Windows和iOS)上安装Memcached,配置服务器参数,如...

    Memcached缓存系统 v1.6.23.zip

    **一、Memcached的基本概念** 1. **分布式内存**:Memcached基于内存存储,避免了磁盘I/O的延迟,使得数据读取速度非常快。 2. **键值对存储**:Memcached以键值对的形式存储数据,键用于标识数据,值则是实际存储的...

    .NET分布式缓存Memcached从入门到实战源码下载

    总之,`.NET分布式缓存Memcached从入门到实战源码下载`这个资源提供了一个全面的学习平台,涵盖了Memcached的使用、集成、测试等方面,帮助开发者深入理解如何在.NET环境中高效地利用分布式缓存提升应用性能。...

    php缓存学习相关技术

    #### 二、缓存的基本概念与目的 缓存本质上是一种存储机制,它利用快速存储介质(如内存)来存储频繁访问的数据副本,以减少对较慢的后端存储(如硬盘或数据库)的依赖。这不仅提升了数据的访问速度,还有效缓解了...

    memcached源代码分析

    ### Memcached源代码分析 #### 一、Memcached概述与...通过对Memcached源代码的深入剖析,我们可以学习到其在内存管理、网络通信、数据结构设计等方面的优秀实践,这对于提升个人技术能力和项目开发效率具有重要意义。

    Memcached实例与文档

    一、Memcached的基本概念 Memcached基于键值对(key-value)存储,提供简单的文本协议,易于与其他编程语言集成。它的设计目标是快速、轻量级,并且只支持基本的数据类型,如字符串。这种设计使得Memcached适合于处理...

    memcached全面剖析

    **标题与描述解析** 《memcached全面剖析》...通过《memcached全面剖析》这本教程,读者可以系统地学习和掌握memcached的核心概念、配置方法、操作技巧以及实战经验,从而更好地在实际项目中运用这一强大的缓存技术。

Global site tag (gtag.js) - Google Analytics