快取是一種狀態管理機制,通常用於提升你的應用程式效能,它很大程度上能夠減少一個請求對你係統資源的消耗。
Redis是一個開源的,高效能的,NoSql資料庫,它的速度非常快,而且所有的資料都是灌入到記憶體中,從記憶體中讀寫資料的效能開銷真的是微乎其微,值得一提的是 Redis 採用的是BSD license,說明你可以將它用於商業和非商業的用途。
Redis是什麼,我為什麼要用它?Redis 是最流行的開源,NoSQL,基於記憶體的資料儲存,而且非常的是:它的資料儲存支援多個數據結構,eg:strings,hashes,sets,lists 等等,Redis內部也提供了對 複製分發 和 事務 的支援,同時在資料持久化方面也做的非常好。
使用 Redis Client Sdk現在 redis 已經成功安裝到你的系統中了,接下來你需要一個 client sdk 去連線 redis server 來讀取資料,在下面的例子中,我會使用開源的 ServiceStack
這個sdk,接下來在 Visual Studio 中建立一個 Console 應用程式,然後透過 NuGet packkage manager
來安裝 ServiceStack.Redis
。
假定現在 ServiceStack.Redis
已經透過 NuGet 成功安裝,下面的兩個方法展示了連線 Redis server 來發送和讀取資料。
private static bool Save(string host, string key, string value) { bool isSuccess = false; using (RedisClient redisClient = new RedisClient(host)) { if (redisClient.Get<string>(key) == null) { isSuccess = redisClient.Set(key, value); } } return isSuccess; } private static string Get(string host, string key) { using (RedisClient redisClient = new RedisClient(host)) { return redisClient.Get<string>(key); } }
注意 RedisClient 的 Set 和 Get 方法是如何從 Redis 中傳送和讀取資料的,我準備留給你一件事情,你可以試著修改一下這兩個方法讓其支援泛型,這樣的話你的兩個方法就可以支援任何型別了,對吧。
接下來看一下如何在 Main 方法中呼叫,程式碼如下:
static void Main(string[] args) { string host = "localhost"; string key = "IDG"; // Store data in the cache bool success = Save(host, key, "Hello World!"); // Retrieve data from the cache using the key Console.WriteLine("Data retrieved from Redis Cache: " + Get(host,key)); Console.Read(); }
正如我之前所說,Redis的功能特別多,在後續的文章中,我會和大家一起討論Redis的高階特性,比如說:持久化,釋出訂閱,失敗轉移 等等,你也可以利用 RDB (單個壓縮檔案) 或者 AOF 的方式去持久化資料,那我應該選擇哪一種持久化呢? 你可以在 高效能,持久化,磁碟IO 這些方面綜合權衡一下。