StackExchange.Redis 使用 (一)

 


在StackExchange.Redis中最重要的對象是ConnectionMultiplexer類, 它存在於StackExchange.Redis命名空間中。
這個類隱藏了Redis服務的操做細節,ConnectionMultiplexer類作了不少東西, 在全部調用之間它被設計爲共享和重用的。
不該該爲每個操做都建立一個ConnectionMultiplexer 。 ConnectionMultiplexer是線程安全的 , 推薦使用下面的方法。
在全部後續示例中 , 都假定你已經實例化好了一個ConnectionMultiplexer類,它將會一直被重用 ,
如今咱們來建立一個ConnectionMultiplexer實例。它是經過ConnectionMultiplexer.Connect 或者 ConnectionMultiplexer.ConnectAsync,
傳遞一個鏈接字符串或者一個ConfigurationOptions 對象來建立的。
鏈接字符串能夠是以逗號分割的多個服務的節點, 咱們僅僅須要鏈接一個在本地計算機中的redis服務,redis服務的默認端口是6379.redis

using StackExchange.Redis;
...
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
// ^^^ store and re-use this!!!shell

注意 : ConnectionMultiplexer 實現了IDisposable接口當咱們再也不須要是能夠將其釋放的 , 這裏我故意不使用 using 來釋放他。 簡單來說建立一個ConnectionMultiplexer是十分昂貴的 , 一個好的主意是咱們一直重用一個ConnectionMultiplexer對象。
一個複雜的的場景中可能包含有主從複製 , 對於這種狀況,只須要指定全部地址在鏈接字符串中(它將會自動識別出主服務器)
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("server1:6379,server2:6379");數據庫

假設這裏找到了兩臺主服務器,將會對兩臺服務進行裁決選出一臺做爲主服務器來解決這個問題 , 這種狀況是很是罕見的 ,咱們也應該避免這種狀況的發生。api


如今你已經擁有了一個 ConnectionMultiplexer , 下面三件事情多是你想要作的。安全

1. 訪問數據庫。(注意在使用集羣的狀況下,一個數據庫可能會分部在多個節點中)
2. 使用redis的發佈訂閱功能
3. 維護和監控一臺服務器服務器

訪問數據庫
訪問數據庫的操做很是簡單:異步

IDatabase db = redis.GetDatabase();async

GetDatabase 返回一個IDatabase接口。 注意 redis容許配置多個數據庫,能夠在調用GetDatabase() 時候指定數據庫.另外,若是你計劃使用異步的api , Task.AsyncState 必須擁有一個值 ,也能夠這樣指定。this

int databaseNumber = ...
object asyncState = ...
IDatabase db = redis.GetDatabase(databaseNumber, asyncState);.net

如今你已經擁有了一個 IDatabase 對象 , 他能夠對redis數據庫進行操做。全部的方法都有同步和異步兩個版本 , 按照微軟的命名約定 ,全部的異步方法都以Async結尾。

最簡單的操做 存儲和獲取一個值 。

string value = "abcdefg";
db.StringSet("mykey", value);
...
string value = db.StringGet("mykey");
Console.WriteLine(value); // writes: "abcdefg"

String前綴這裏表明的是Redis中的String類型 , 和.net中的String類型有很大的區別 , 儘管二者均可以保存字符串類型。而後 ,Redis容許鍵值爲二進制數據 , 示例以下:

byte[] key = ..., value = ...;
db.StringSet(key, value);
...
byte[] value = db.StringGet(key);

StackExchange.Redis 支持全部的 redis shell命令, 具體能夠參考redis官網。

相關文章
相關標籤/搜索