StackExchange.Redis 使用 (一)
?
在StackExchange.Redis中最重要的對象是ConnectionMultiplexer類, 它存在于StackExchange.Redis命名空間中。
這個(gè)類隱藏了Redis服務(wù)的操作細(xì)節(jié),ConnectionMultiplexer類做了很多東西, 在所有調(diào)用之間它被設(shè)計(jì)為共享和重用的。
不應(yīng)該為每一個(gè)操作都創(chuàng)建一個(gè)ConnectionMultiplexer 。 ConnectionMultiplexer是線程安全的 , 推薦使用下面的方法。
在所有后續(xù)示例中 , 都假定你已經(jīng)實(shí)例化好了一個(gè)ConnectionMultiplexer類,它將會一直被重用 , 
現(xiàn)在我們來創(chuàng)建一個(gè)ConnectionMultiplexer實(shí)例。它是通過ConnectionMultiplexer.Connect 或者 ConnectionMultiplexer.ConnectAsync,
傳遞一個(gè)連接字符串或者一個(gè)ConfigurationOptions 對象來創(chuàng)建的。
連接字符串可以是以逗號分割的多個(gè)服務(wù)的節(jié)點(diǎn), 我們僅僅需要連接一個(gè)在本地計(jì)算機(jī)中的redis服務(wù),redis服務(wù)的默認(rèn)端口是6379.
using StackExchange.Redis;
...
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
// ^^^ store and re-use this!!!
注意 : ConnectionMultiplexer 實(shí)現(xiàn)了IDisposable接口當(dāng)我們不再需要是可以將其釋放的 , 這里我故意不使用 using 來釋放他。 簡單來講創(chuàng)建一個(gè)ConnectionMultiplexer是十分昂貴的 , 一個(gè)好的主意是我們一直重用一個(gè)ConnectionMultiplexer對象。
一個(gè)復(fù)雜的的場景中可能包含有主從復(fù)制 , 對于這種情況,只需要指定所有地址在連接字符串中(它將會自動識別出主服務(wù)器)
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("server1:6379,server2:6379");
假設(shè)這里找到了兩臺主服務(wù)器,將會對兩臺服務(wù)進(jìn)行裁決選出一臺作為主服務(wù)器來解決這個(gè)問題 , 這種情況是非常罕見的 ,我們也應(yīng)該避免這種情況的發(fā)生。
現(xiàn)在你已經(jīng)擁有了一個(gè) ConnectionMultiplexer , 下面三件事情可能是你想要做的。
1. 訪問數(shù)據(jù)庫。(注意在使用集群的情況下,一個(gè)數(shù)據(jù)庫可能會分部在多個(gè)節(jié)點(diǎn)中)
2. 使用redis的發(fā)布訂閱功能
3. 維護(hù)和監(jiān)控一臺服務(wù)器
訪問數(shù)據(jù)庫
訪問數(shù)據(jù)庫的操作非常簡單:
IDatabase db = redis.GetDatabase();
GetDatabase 返回一個(gè)IDatabase接口。 注意 redis允許配置多個(gè)數(shù)據(jù)庫,可以在調(diào)用GetDatabase() 時(shí)候指定數(shù)據(jù)庫.另外,如果你計(jì)劃使用異步的api , Task.AsyncState 必須擁有一個(gè)值 ,也可以這樣指定。
int databaseNumber = ...
object asyncState = ...
IDatabase db = redis.GetDatabase(databaseNumber, asyncState);
現(xiàn)在你已經(jīng)擁有了一個(gè) IDatabase 對象 , 他可以對redis數(shù)據(jù)庫進(jìn)行操作。所有的方法都有同步和異步兩個(gè)版本 , 按照微軟的命名約定 ,所有的異步方法都以Async結(jié)尾。
最簡單的操作 存儲和獲取一個(gè)值 。
string value = "abcdefg";
db.StringSet("mykey", value);
...
string value = db.StringGet("mykey");
Console.WriteLine(value); // writes: "abcdefg"
String前綴這里代表的是Redis中的String類型 , 和.net中的String類型有很大的區(qū)別 , 盡管兩者都可以保存字符串類型。然后 ,Redis允許鍵值為二進(jìn)制數(shù)據(jù) , 示例如下:
byte[] key = ..., value = ...;
db.StringSet(key, value);
...
byte[] value = db.StringGet(key);
StackExchange.Redis 支持所有的 redis shell命令, 具體可以參考redis官網(wǎng)。
?
轉(zhuǎn)載于:https://www.cnblogs.com/deosky/p/4846111.html
總結(jié)
以上是生活随笔為你收集整理的StackExchange.Redis 使用 (一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: background意识(两)
- 下一篇: #CSS# 初识CSS
