StackExchange.Redis 基本使用 (一) (轉)


StackExchange.Redis下載地址; https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Basics.md

以下轉載來源:http://www.cnblogs.com/deosky/p/4846111.html   在此表示感謝 

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

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

注意 : ConnectionMultiplexer 實現了IDisposable接口當我們不再需要是可以將其釋放的 , 這里我故意不使用 using 來釋放他。 簡單來講創建一個ConnectionMultiplexer是十分昂貴的 , 一個好的主意是我們一直重用一個ConnectionMultiplexer對象。 一個復雜的的場景中可能包含有主從復制 , 對於這種情況,只需要指定所有地址在連接字符串中(它將會自動識別出主服務器) ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("server1:6379,server2:6379");

假設這里找到了兩台主服務器,將會對兩台服務進行裁決選出一台作為主服務器來解決這個問題 , 這種情況是非常罕見的 ,我們也應該避免這種情況的發生。

現在你已經擁有了一個 ConnectionMultiplexer , 下面三件事情可能是你想要做的。

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

訪問數據庫 訪問數據庫的操作非常簡單:

IDatabase db = redis.GetDatabase();

GetDatabase 返回一個IDatabase接口。 注意 redis允許配置多個數據庫,可以在調用GetDatabase() 時候指定數據庫.另外,如果你計划使用異步的api , Task.AsyncState 必須擁有一個值 ,也可以這樣指定。

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

現在你已經擁有了一個 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官網。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM