memcached缓存系统学习笔记之一:memcached缓存系统基础知识和环境搭建

1、Cache定义
(1)狭义概念:用于CPU的相对高速处理与主存(Main Memory)的相对低速处理的之间起到协调功能的硬件设备。
(2)广义概念:用于速度相差较大的两种硬件之间,起到协调两者数据传输速度差异的结构。
狭义概念来自于Cache自1967出现以来较长时间内的应用场景。因为CPU的数据处理速度,要远远高于主存,所以在CPU和主存之间会有高速缓存设备,甚至是多级缓存设备。而广义概念,则是目前已经被广泛接受的一种定义,且广义概念中,Cache不再只局限于硬件,也可以是软件。比如用于网络相对低速传输与磁盘相对高速传输之间的速度差异协调。


2、Cache的本质原理
可以一句话概括,就是:Cache把要到慢速设备中取的数据预先放到快速设备中。


3、几种类型的Cache
(1)CPU Cache:置于CPU和主存之间,用于加速CPU对主存的相对慢速操作。
(2)Browser Cache:置于客户端与服务器之间,用于加速客户端对服务器的相对慢速操作。
(3)Server Cache:置于网络请求与本地文件之间,用于加速网络请求对本地文件的相对慢速操作。
(4)CDN:CDN即Content Delivery Network,在各地设置的节点Cache,加速用户对服务网络的相对慢速操作。
(5)Database Cache
(6)OS Cache:内存中存在的对于硬盘读写的缓冲区域。


4、What is Memcached?

Memcached是一个免费开源、高性能、分布式的内存对象缓存系统。Memcached是在内存中,为特定数据(字符串或对象)构建key-value的小块数据存储。

 

5、下载Memcached的服务器端软件

Window7 64位版本下载:http://download.csdn.net/detail/zhouzhiwengang/7780513

 

6、在服务器上部署Memcached Server

以下以Windows平台为例:

参考:http://www.codeforest.net/how-to-install-memcached-on-windows-machine

下载下来的Windows版本解压到E:/memcached/

在控制台输入命令安装:

memcached 服务端启动:

或者:

默认的缓存大小为64M,如果不够用,请打开注册表,找到:

将其内容修改为:

7、下载Memcached的客户端API包

Memcached本身是使用C开发的,客户端可以是php、C#、或者java。我是做java的,所以这里只介绍基于java的客户端。

我在网上看到基于java的客户端有两个

1.java_memcached-release_2.6.3

1)简介

这是比较通用的Memcached客户端框架。具体原创不详。资源下载路径http://download.csdn.net/detail/zhouzhiwengang/7780583

2)依赖的jar

A.commons-pool-1.5.6.jar

B.java_memcached-release_2.6.3.jar

C.slf4j-api-1.6.1.jar

D.slf4j-simple-1.6.1.jar

2.alisoft-xplatform-asf-cache-2.5.1

1)简介

这个东东是阿里软件的架构师岑文初进行封装的。里面的注释都是中文的,比较好。

2)依赖的jar

A.alisoft-xplatform-asf-cache-2.5.1.jar

B.commons-logging-1.0.4.jar

C.hessian-3.0.1.jar

D.log4j-1.2.9.jar

E.stax-api-1.0.1.jar

F.wstx-asl-2.0.2.jar

 

8、范例

1.基于java_memcached-release_2.6.3

main 方法

  1. package com.vixuan.memcached.cache;  
  2.   
  3. import java.net.InetSocketAddress;  
  4. import java.util.Date;  
  5.   
  6. import com.danga.MemCached.MemCachedClient;  
  7. import com.danga.MemCached.SockIOPool;  
  8.   
  9. public class MemcachedExceted {  
  10.   
  11.     /**  
  12.      * @param args  
  13.      */  
  14.   
  15.     public static void main(String[] args) {  
  16.         // TODO Auto-generated method stub  
  17.         // 创建一个 memcached 客户端对象  
  18.         MemCachedClient client = new MemCachedClient();  
  19.         // 静态模块  
  20.   
  21.         // 创建 memcached连接池  
  22.         // 指定memcached服务地址  
  23.         String[] addr = { "127.0.0.1:11211" };  
  24.         // 指定memcached服务器负载量  
  25.         Integer[] weights = { 3 };  
  26.         // 从连接池获取一个连接实例  
  27.         SockIOPool pool = SockIOPool.getInstance();  
  28.         // 设置服务器  
  29.         pool.setServers(addr);  
  30.         // 设置负载量  
  31.         pool.setWeights(weights);  
  32.         // 设置一些基本的参数  
  33.         // 设置初始连接数5 最小连接数 5 最大连接数 200  
  34.         // 设置一个连接最大空闲时间3小时  
  35.         pool.setInitConn(5);  
  36.         pool.setMinConn(5);  
  37.         pool.setMaxConn(200);  
  38.         pool.setMaxIdle(1000 * 30 * 30);  
  39.         // 设置主线程睡眠时间  
  40.         // 每隔30秒醒来 然后  
  41.         // 开始维护 连接数大小  
  42.         pool.setMaintSleep(30);  
  43.         // 设置tcp 相关的树形  
  44.         // 关闭nagle算法  
  45.         // 设置 读取 超时3秒钟 set the read timeout to 3 secs  
  46.         // 不设置连接超时  
  47.         pool.setNagle(false);  
  48.         pool.setSocketTO(3000);  
  49.         pool.setSocketConnectTO(0);  
  50.         // 开始初始化 连接池  
  51.         pool.initialize();  
  52.   
  53.         // memcached 存储字符串  
  54.         Date date = new Date(2000000);  
  55.         client.set("tagert", "this is memcached", date);  
  56.         // 内容强制转换  
  57.         String result = (String) client.get("tagert");  
  58.         System.out.println("结果:" + result);  
  59.   
  60.         // memcached 存储对象  
  61.         for (int i = 1; i < 10; i++) {  
  62.             client.set("T0001" + i, new User(i + ""), 3600);  
  63.         }  
  64.         User myObject = (User) client.get("T00014");  
  65.         System.out.println("结果 :" + myObject);  
  66.   
  67.     }  
  68.   
  69. }  
package com.vixuan.memcached.cache;

import java.net.InetSocketAddress;
import java.util.Date;

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

public class MemcachedExceted {

	/**
	 * @param args
	 */

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 创建一个 memcached 客户端对象
		MemCachedClient client = new MemCachedClient();
		// 静态模块

		// 创建 memcached连接池
		// 指定memcached服务地址
		String[] addr = { "127.0.0.1:11211" };
		// 指定memcached服务器负载量
		Integer[] weights = { 3 };
		// 从连接池获取一个连接实例
		SockIOPool pool = SockIOPool.getInstance();
		// 设置服务器
		pool.setServers(addr);
		// 设置负载量
		pool.setWeights(weights);
		// 设置一些基本的参数
		// 设置初始连接数5 最小连接数 5 最大连接数 200
		// 设置一个连接最大空闲时间3小时
		pool.setInitConn(5);
		pool.setMinConn(5);
		pool.setMaxConn(200);
		pool.setMaxIdle(1000 * 30 * 30);
		// 设置主线程睡眠时间
		// 每隔30秒醒来 然后
		// 开始维护 连接数大小
		pool.setMaintSleep(30);
		// 设置tcp 相关的树形
		// 关闭nagle算法
		// 设置 读取 超时3秒钟 set the read timeout to 3 secs
		// 不设置连接超时
		pool.setNagle(false);
		pool.setSocketTO(3000);
		pool.setSocketConnectTO(0);
		// 开始初始化 连接池
		pool.initialize();

		// memcached 存储字符串
		Date date = new Date(2000000);
		client.set("tagert", "this is memcached", date);
		// 内容强制转换
		String result = (String) client.get("tagert");
		System.out.println("结果:" + result);

		// memcached 存储对象
		for (int i = 1; i < 10; i++) {
			client.set("T0001" + i, new User(i + ""), 3600);
		}
		User myObject = (User) client.get("T00014");
		System.out.println("结果 :" + myObject);

	}

}
实体类:
  1. package com.vixuan.memcached.cache;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class User implements Serializable {  
  6.   
  7.     /**  
  8.      *   
  9.      */  
  10.     private static final long serialVersionUID = 1L;  
  11.     private String id;  
  12.   
  13.     public User(String id) {  
  14.         super();  
  15.         this.id = id;  
  16.     }  
  17.   
  18.     public String getId() {  
  19.         return id;  
  20.     }  
  21.   
  22.     public void setId(String id) {  
  23.         this.id = id;  
  24.     }  
  25.   
  26.     @Override  
  27.     public String toString() {  
  28.         // TODO Auto-generated method stub  
  29.         StringBuffer sb = new StringBuffer();  
  30.         sb.append("userId=" + this.id);  
  31.         return sb.toString();  
  32.   
  33.     }  
  34.   
  35. }  
package com.vixuan.memcached.cache;

import java.io.Serializable;

public class User implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String id;

	public User(String id) {
		super();
		this.id = id;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		StringBuffer sb = new StringBuffer();
		sb.append("userId=" + this.id);
		return sb.toString();

	}

}


结果展示:

 

项目结构:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值