快取方案之Redis
Redis簡介
Redis是Remote Dictionary Server(Redis) 的縮寫,或許光聽名字你就能猜出它大概是做什麼的。不錯,它是一個由Salvatore Sanfilippo編寫的key-value儲存系統,是一個使用ANSI C語言編寫、遵守BSD協議、支援網路、可基於記憶體亦可持久化的日誌型的Key-Value資料庫,並提供多種語言的API。在很多地方,Redis也被業內人士稱為資料結構伺服器,因為它允許快取的值(value)可以是字串(string)、雜湊(hash)、列表(list)、集合(set)和有序集合(sorted set)等型別。此外,Redis還支援master-slave方式的資料備份,所有的這一切都讓Redis在同類型的產品中脫穎而出。
Redis的優勢
- 效能極高 – 在我的Mac Book Pro上執行Redis的基準測試(benchmark),每秒能夠處理寫運算元都在80000以上。部分測試結果如下圖所示:
- 豐富的資料型別 – Redis支援Strings, Lists, Hashes, Sets 及Ordered Sets資料型別操作。
- 原子 – Redis的所有操作都是原子性的,同時Redis還支援對幾個操作全並後的原子性執行。
- 豐富的特性 – Redis還支援publish/subscribe,通知,key過期等豐富的特性。
Redis的安裝和配置
如何在Windows和Linux系統上安裝Redis在
接下來可以啟動一個客戶端程式來做一些簡單的實驗。還是在剛才的src目錄下有一個redis-cli檔案,執行它就可以啟動一個客戶端,如下圖所示。
關於Redis的資料型別、命令、事務、釋出/訂閱、資料備份與恢復、配置等內容仍然可以參考上面提到的W3CSchool的網站。
在Java專案中使用Redis
Jedis是Redis官方首選的Java客戶端開發包,點選連結可以獲得相關的API文件。下面給出一段簡單的測試程式碼。
import redis.clients.jedis.Jedis;
class RedisTest {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost"); // 連線到Redis伺服器
// jedis.auth("123456"); // 輸入口令進行驗證
jedis.set("greeting", "Hello, world!"); // 將字串快取到Redis伺服器
System.out.println(jedis.get("greeting")); // 從Redis快取中獲取資料
}
}
Redis和Memcached的比較
- Redis使用最佳方式是全部資料in-memory。
- Redis更多場景是作為Memcached的替代者來使用。
- 當需要除key/value之外的更多資料型別支援時,Redis更合適。
- 當儲存的資料不能被剔除時,使用Redis更合適。
- Redis可以使用指令直接對快取的資料進行運算。