memcached缓存系统学习笔记之一:memcached缓存系统基础知识和环境搭建
2014-08-19 10:15
846 查看
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 方法
[html]
view plaincopyprint?
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);
}
}
[html]
view plaincopyprint?
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();
}
}
结果展示:
项目结构:
(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 方法
[html]
view plaincopyprint?
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);
}
}
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); } }实体类:
[html]
view plaincopyprint?
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();
}
}
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(); } }
结果展示:
项目结构:
相关文章推荐
- memcached缓存系统学习笔记之一:memcached缓存系统基础知识和环境搭建
- memcached缓存系统学习笔记之一:memcached缓存系统基础知识和环境搭建
- [学习笔记]java基础Java8SE开发环境搭建、第一个Java Hello World、Java程序的编译与执行
- nginx+PHP服务器环境安装与配置学习(一) - windows系统基础环境搭建
- 计算广告学习笔记1.9 广告的基础知识-在线广告系统结构
- Java基础学习总结(52)——Liunx系统Centos上搭建Java开发环境
- android开发学习---linux下开发环境的搭建&& android基础知识介绍
- python基础入门学习笔记(Python环境搭建)
- PCL学习笔记(1) win8 64bit系统 + VS208——搭建PCL开发环境
- Linux基础知识学习笔记(一)--文件系统的权限管理
- [学习笔记]java基础Java8SE开发环境搭建、第一个Java Hello World、Java程序的编译与执行
- Memcached 缓存系统的基础知识
- s3c2440硬件学习笔记----嵌入式Linux基础知识和开发环境的构建
- Haskell 学习笔记 1 --环境搭建与类型系统(Haskell Tutorial 1--Getting start with Haskell)
- python基础入门学习笔记(Python环境搭建)
- PHP,thinkphp学习笔记之一 基础环境搭建
- 【Cocos2D-X学习笔记】Mac系统下Android平台环境搭建
- ODB学习笔记之基础环境搭建
- ARM2440学习笔记--Linux系统下串口调试和USB调试环境搭建
- Tomcat环境的搭建(web基础学习笔记一)