`
javacto
  • 浏览: 83985 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Memcached 笔记

阅读更多

1. Memchae是什么

Memcache danga.com 的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。

它可以应对任意多个连接,使用非阻塞的网络 IO 。由于它的工作机制是在内存中开辟一块空间,然后建立一个 HashTable Memcached 自管理这些 HashTable

   

为什么会有 Memcache memcached 两种名称?

其实 Memcache 是这个项目的名称,而 memcached 是它服务器端的主程序文件名,

Memcache 官方网站: http://www.danga.com/memcached

2.Memcached的工作原理

首先 memcached 是以守护程序方式运行于一个或多个服务器中,随时接受客户端的连接操作,客户端可以由各种语言编写,目前已知的客户端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。客户端在与 memcached 服务建立连接之后,接下来的事情就是存取对象了,每个被存取的对象都有一个唯一的标识符 key ,存取操作均通过这个 key 进行,保存到 memcached 中的对象实际上是放置内存中的,并不是保存在 cache 文件中的,这也是为什么 memcached 能够如此高效快速的原因。注意,这些对象并不是持久的,服务停止之后,里边的数据就会丢失。

 

与许多 cache 工具类似, Memcached 的原理并不复杂。它采用了 C/S 的模式,在 server 端启动服务进程,在启动时可以指定监听的 ip ,自己的端口号,所使用的内存大小等几个关键参数。一旦启动,服务就一直处于可用状态。 Memcached 的目前版本是通过 C 实现,采用了单进程,单线程,异步 I/O ,基于事件 (event_based) 的服务方式 . 使用 libevent 作为事件通知实现。多个 Server 可以协同工作,但这些 Server 之间是没有任何通讯联系的,每个 Server 只是对自己的数据进行管理。 Client 端通过指定 Server 端的 ip 地址 ( 通过域名应该也可以 ) 。需要缓存的对象或数据是以 key->value 对的形式保存在 Server 端。 key 的值通过 hash 进行转换,根据 hash 值把 value 传递到对应的具体的某个 Server 上。当需要获取对象数据时,也根据 key 进行。首先对 key 进行 hash ,通过获得的值可以确定它被保存在了哪台 Server 上,然后再向该 Server 发出请求。 Client 端只需要知道保存 hash(key) 的值在哪台服务器上就可以了。

 

        其实说到底, memcache 的工作就是在专门的机器的内存里维护一张巨大的 hash 表,来存储经常被读写的一些数组与文件,从而极大的提高网站的运行效率。

3. Memcached的特点
       Memcached的缓存是一种分布式的,可以让不同主机上的多个用户同时访问, 因此解决了共享内存只能单机应用的局限,更不会出现使用数据库做类似事情的时候,磁盘开销和阻塞的发生。


4.Memcached的使用

一 、windows下Memcached服务器端的安装 (此处将其作为系统服务安装)
     下载文件:memcached 1.2.1 for Win32 binaries (Dec 23, 2006)

                 地址:http://jehiah.cz/projects/memcached-win32/
   1 解压缩文件到c:\memcached
   2 命令行输入 'c:\memcached\memcached.exe -d install'
   3 命令行输入 'c:\memcached\memcached.exe -d start' ,该命令启动 Memcached ,默认监听端口为 11211

通过 memcached.exe -h 可以查看其帮助

        对应命令参数说明:

 memcached的基本设置:

 -p           监听的端口
 -l            连接的IP地址, 默认是本机
 -d           start 启动memcached服务
 -d           restart 重起memcached服务
 -d           stop|shutdown 关闭正在运行的memcached服务
 -d           install 安装memcached服务
 -d           uninstall 卸载memcached服务
 -u           以的身份运行 (仅在以root运行的时候有效)
 -m           最大内存使用,单位MB。默认64MB
 -M           内存耗尽时返回错误,而不是删除项
 -c            最大同时连接数,默认是1024
 -f            块大小增长因子,默认是1.25
 -n           最小分配空间,key+value+flags默认是48
 -h           显示帮助

 

二、客户端使用

           下载memcached java client:http://github.com/gwhalin/Memcached-Java-Client/downloads
   1 解压后将java_memcached-release_2.5.1.jar包添加到工程的classpath中

三、测试用例  

 

package com.leayo;

import java.util.Date;

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;

@SuppressWarnings("deprecation")
public class Test {

	protected static MemCachedClient mcc = new MemCachedClient();

	static {
		String[] servers = { "127.0.0.1:11211" };

		Integer[] weights = { 3 };

		// 创建一个实例对象SockIOPool
		SockIOPool pool = SockIOPool.getInstance();

		// set the servers and the weights
		// 设置Memcached Server
		pool.setServers(servers);
		pool.setWeights(weights);

		// set some basic pool settings
		// 5 initial, 5 min, and 250 max conns
		// and set the max idle time for a conn
		// to 6 hours
		pool.setInitConn(5);
		pool.setMinConn(5);
		pool.setMaxConn(250);
		pool.setMaxIdle(1000 * 60 * 60 * 6);

		// set the sleep for the maint thread
		// it will wake up every x seconds and
		// maintain the pool size
		pool.setMaintSleep(30);

		// Tcp的规则就是在发送一个包之前,本地机器会等待远程主机
		// 对上一次发送的包的确认信息到来;这个方法就可以关闭套接字的缓存,
		// 以至这个包准备好了就发;
		pool.setNagle(false);
		// 连接建立后对超时的控制
		pool.setSocketTO(3000);
		// 连接建立时对超时的控制
		pool.setSocketConnectTO(0);

		// initialize the connection pool
		// 初始化一些值并与MemcachedServer段建立连接
		pool.initialize();

		// lets set some compression on for the client
		// compress anything larger than 64k
		mcc.setCompressEnable(true);
		mcc.setCompressThreshold(64 * 1024);
	}

	public static void bulidCache() {
		// set(key,value,Date) ,Date是一个过期时间,如果想让这个过期时间生效的话,这里传递的new Date(long
		// date) 中参数date,需要是个大于或等于1000的值。
		// 因为java client的实现源码里是这样实现的 expiry.getTime() / 1000 ,也就是说,如果
		// 小于1000的值,除以1000以后都是0,即永不过期
		mcc.set("test", "This is a test String", new Date(10000));
		// 十秒后过期

	}

	public static void output() {
		// 从cache里取值
		String value = (String) mcc.get("test");
		System.out.println(value);
	}

	public static void main(String[] args) {
		bulidCache(); //第一次运行后,注释掉该行,在设定10秒内仍可取到值,过期后值为null
		output();
	}

}
 

 

分享到:
评论

相关推荐

    memcached笔记

    **Memcached笔记** Memcached是一种高性能的分布式内存对象缓存系统,它被广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问速度。本文将深入探讨Memcached的基础知识、工作原理、安装与配置,以及如何在...

    memcached-笔记资料

    【标题】"memcached-笔记资料"涉及到的核心知识点是分布式内存缓存系统——Memcached,它是一个高性能、轻量级的缓存解决方案,主要用于减轻数据库的负载,提高Web应用的性能。 【描述】"memcached-笔记资料"暗示了...

    Memcached 源码剖析笔记

    memcached 源码剖析笔记和源码。 Memcached 是一个自由、源码开放、高性能、分布式内存对象缓存系统,目的在于过减轻数据库负载来使动态 Web 应用程序提速。

    Memcached 学习资料(memcached Memcached使用手册 Memcached源码剖析笔记)

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的...

    Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(1)-介绍及使用

    本篇学习笔记将重点介绍如何在Java环境中使用gwhalin提供的Memcached客户端进行开发。gwhalin的Memcached Java客户端是一个轻量级、高性能的库,使得Java开发者可以轻松地与Memcached服务器进行交互。 ### 一、...

    韩顺平 PHP Memcached缓存技术资料源码笔记图解PPT_Ady

    1. 连接Memcached服务器:使用`new Memcached()`创建实例,然后调用`addServer()`方法添加服务器地址和端口。 2. 存储数据:使用`set()`方法可以将键值对存储到缓存中,例如`$memcached->set('key', 'value', $...

    Memcached源码剖析笔记.docx

    Memcached 源码剖析笔记 Memcached 是一个自由、开源、高性能、分布式内存对象缓存系统,旨在通过减轻数据库负载来使动态 Web 应用程序提速。下面是 Memcached 源码剖析笔记的知识点总结: 1. 背景 Memcached 的...

    memcached-笔记资料.rar

    标题 "memcached-笔记资料.rar" 暗示了这个压缩包包含的是关于 memcached 的学习资料,这是一款广泛使用的分布式内存对象缓存系统。它主要用于减轻数据库的负载,通过在内存中存储常用数据,提高应用程序的响应速度...

    Memcached源码剖析笔记.pdf

    《Memcached源码剖析笔记》是一份深入解析Memcached内部工作原理和技术细节的文档,旨在帮助读者理解这个高性能分布式内存对象缓存系统的设计与实现。Memcached被广泛应用于动态Web应用程序,通过缓存数据和对象,...

    Memcached学习笔记

    ### Memcached学习笔记 #### 一、Memcached简介 Memcached是一种高性能的分布式内存对象缓存系统,主要用于在动态应用程序中减少数据库负载,提高访问速度。最初由Danga Interactive为优化LiveJournal.com网站的...

    Memcached源码剖析笔记_wrapper1

    **Memcached源码剖析笔记** **1. 背景** Memcached是一个高效且流行的分布式内存对象缓存系统,主要用于动态Web应用。它的主要目的是通过将数据和对象存储在内存中来减少对数据库的访问频率,从而提升应用程序的...

    memcached教程.PPT.笔记.软件

    **Memcached教程详解** Memcached是一款高性能、分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升网站性能。它通过将数据缓存在内存中,避免了反复读取数据库,从而显著提高了数据访问速度。在本教程...

    PHP安装memcached扩展笔记

    PHP安装memcached扩展笔记详细介绍了如何在PHP环境下安装memcached扩展以利用memcached服务进行高性能的键值缓存。以下为安装过程中的关键知识点: 1. 安装memcached服务端: - 在Linux环境下,可以使用yum命令...

Global site tag (gtag.js) - Google Analytics