尊重知識,轉載請註明本文來自:編程藝術家Poechant的CSDN博客 http://blog.csdn.net/potent
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
默認的緩存大小爲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);
}
}