实战Memcached缓存系统(1)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的服务器端软件
Windows平台版本下载:http://splinedancer.com/memcached-win32/memcached-1.2.4-Win32-Preview-20080309_bin.zip
Linux平台版本下载:http://memcached.googlecode.com/files/memcached-1.4.10.tar.gz
?
6、在服务器上部署Memcached Server
以下以Windows平台为例:
参考:http://www.codeforest.net/how-to-install-memcached-on-windows-machine
下载下来的Windows版本解压到C:/memcached/
在控制台输入命令安装:
?
- c:/memcached/memcached.exe??-d?install??
启动:
?
?
- c:/memcached/memcached.exe?-d??start??
或:
?
?
- net?start?"memcached?Server"??
默认的缓存大小为64M,如果不够用,请打开注册表,找到:
?
?
- HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/memcached??Server?.??
将其内容修改为:
?
?
- “C:/memcached/memcached.exe”?-d?runservice?-m?512??
?
7、下载Memcached的客户端API包
下载地址:http://spymemcached.googlecode.com/files/memcached-2.5.jar
?
8、编写一个Java数据类
?
- package?com.sinosuperman.memcached;??
- ??
- import?java.io.Serializable;??
- ??
- ??
- public?class?User?implements?Serializable{???
- ??
- ????private?static?final?long?serialVersionUID?=?-372274003834027815L;??
- ??
- ????String?userId;??
- ??????
- ????public?User(String?userId)?{???
- ????????super();???
- ????????this.userId?=?userId;???
- ????}??
- ??????
- ????public?String?getUserId()?{???
- ????????return?userId;???
- ????}???
- ??????
- ????public?void?setUserId(String?userId)?{???
- ????????this.userId?=?userId;???
- ????}???
- ??????????
- ????@Override???
- ????public?String?toString()?{???
- ????????//?TODO?Auto-generated?method?stub???
- ????????StringBuffer?sb=new?StringBuffer();???
- ????????sb.append("userId="+this.userId);???
- ????????return?sb.toString();???
- ????}???
- }???
?
9、编写一个Memcached的客户端
?
- package?com.sinosuperman.memcached;??
- ??
- import?java.io.IOException;??
- import?java.net.InetSocketAddress;??
- ??
- import?net.spy.memcached.MemcachedClient;??
- ??
- public?class?TestMemcached?{??
- ????public?static?void?main(String[]?args)?throws?IOException?{??
- ????????MemcachedClient?cache?=?new?MemcachedClient(new?InetSocketAddress("127.0.0.1",?11211));??
- ????????for?(int?i?=?1;?i?<?10;?i++)?{??
- ????????????cache.set("T0001"?+?i,?3600,?new?User(i?+?""));???
- ????????}??
- ????????User?myObject?=?(User)?cache.get("T00011");??
- ????????System.out.println("Get?object?from?mem?:"?+?myObject);???
- ????}???
- }??
?
10、运行测试
?
运行结果应该如下:
?
- 2011-12-15?17:25:30.276?INFO?net.spy.memcached.MemcachedConnection:??Added?{QA?sa=/127.0.0.1:11211,?#Rops=0,?#Wops=0,?#iq=0,?topRop=null,?topWop=null,?toWrite=0,?interested=0}?to?connect?queue??
- 2011-12-15?17:25:30.292?INFO?net.spy.memcached.MemcachedConnection:??Connection?state?changed?for?sun.nio.ch.SelectionKeyImpl@c62080??
- Get?object?from?mem?:userId=1??