Memcached簡介
Memcached 是一個高性能的分布式內存對象緩存系統,用於動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高動態、數據庫驅動網站的速度。Memcached基於一個存儲鍵/值對的hashmap。其守護進程(daemon )是用C寫的,但是客戶端可以用任何語言來編寫,並通過memcached協議與守護進程通信。
Memcached 的守護進程(daemon )是用C寫的,但是客戶端可以用任何語言來編寫,並通過memcached協議與守護進程通信。但是它並不提供冗余(例如,復制其hashmap條目);當某個服務器S停止運行或崩潰了,所有存放在S上的鍵/值對都將丟失。
存儲方式
Memcached 安裝
我是在windows下安裝使用的。
32位請下載這里: 鏈接: https://pan.baidu.com/s/1qPxMDPEtsCFBWaG3bsVT6Q 密碼: hrih
下載之后解壓就行。
64位先下載32位,進行解壓,接着下載這里:鏈接: https://pan.baidu.com/s/1X3MeLgB5QObksm35LKZ-eg 密碼: xbn4
解壓之后,把里面的三個文件復制到32位的里面,覆蓋即可。
我解壓之后放在E盤:
使用管理員權限運行以下命令
E:\memcache\memcached.exe -d install
啟動關閉卸載memcache
啟動: E:\memcache\memcached.exe -d start
關閉: E:\memcache\memcached.exe -d stop
卸載: E:\memcache\memcached.exe -d uninstall
在spring boot中使用memcache作為緩存
1.pom.xml依賴
<!--memcache--> <dependency> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> <version>1.5.6</version> </dependency> <dependency> <groupId>com.whalin</groupId> <artifactId>Memcached-Java-Client</artifactId> <version>3.0.2</version> </dependency>
2.application.properties
memcache.servers=127.0.0.1:11211 memcache.failover=true memcache.initConn=10 memcache.minConn=20 memcache.maxConn=1000 memcache.maintSleep=50 memcache.nagle=false memcache.socketTO=3000 memcache.aliveCheck=true
3.MemcacheConfiguration
@Configuration public class MemcacheConfiguration { @Value("${memcache.servers}") private String[] servers; @Value("${memcache.failover}") private boolean failover; @Value("${memcache.initConn}") private int initConn; @Value("${memcache.minConn}") private int minConn; @Value("${memcache.maxConn}") private int maxConn; @Value("${memcache.maintSleep}") private int maintSleep; @Value("${memcache.nagle}") private boolean nagel; @Value("${memcache.socketTO}") private int socketTO; @Value("${memcache.aliveCheck}") private boolean aliveCheck; @Bean public SockIOPool sockIOPool () { SockIOPool pool = SockIOPool.getInstance(); pool.setServers(servers); pool.setFailover(failover); pool.setInitConn(initConn); pool.setMinConn(minConn); pool.setMaxConn(maxConn); pool.setMaintSleep(maintSleep); pool.setNagle(nagel); pool.setSocketTO(socketTO); pool.setAliveCheck(aliveCheck); pool.initialize(); return pool; } @Bean public MemCachedClient memCachedClient(){ return new MemCachedClient(); } }
4.MemcacheController
@Controller public class MemcacheController { @Autowired private MemCachedClient memCachedClient; /** * memcache緩存 */ @RequestMapping("/memcache") @ResponseBody public String memcache() throws InterruptedException{ // 放入緩存 boolean flag = memCachedClient.set("mem", "name"); // 取出緩存 Object value = memCachedClient.get("mem"); System.out.println(value); // 3s后過期 memCachedClient.set("num", "666", new Date(3000)); /*memCachedClient.set("num", "666", new Date(System.currentTimeMillis()+3000));與上面的區別是當設置了這個時間點 之后,它會以服務端的時間為准,也就是說如果本地客戶端的時間跟服務端的時間有差值,這個值就會出現問題。 例:如果本地時間是20:00:00,服務端時間為20:00:10,那么實際上會是40秒之后這個緩存key失效*/ Object key = memCachedClient.get("num"); System.out.println(key); //多線程睡眠3s Thread.sleep(3000); key = memCachedClient.get("num"); System.out.println(value); System.out.println(key ); return "success"; } }
5.控制台輸出:
name
666
name
null
總結:memcache通過set方法把值存入都memcache緩存中;通過get方法把值取出來;通過設置過期時間,使其失效。
* Memcache:不支持持久化、只支持key-value鍵值、多線程 、集群分布式
* Redis:支持持久化、豐富的數據類型、單線程 、集群分布式
* Ehcache:直接在jvm虛擬機中緩存,速度快,效率高,單個應用或者對緩存訪問要求很高的應用,用ehcache。核心程序僅僅依賴slf4j。