Redis系列(一)StackExchange.Redis的使用
一、DLL安裝
用NuGet搜索StackExchange.Redis,然后下載就可以。
ConnectionMultiplexer對象是StackExchange.Redis最中樞的對象。這個類的實例需要被整個應用程序域共享和重用的,不要在每個操作中不停的創建該對象的實例,所以使用單例來創建和存放這個對象。
代碼:
private static ConfigurationOptions configurationOptions = ConfigurationOptions.Parse("127.0.0.1" + ":" + "6379");
private static readonly object Locker = new object();
private static ConnectionMultiplexer redisConn;
/// <summary>
/// 單例獲取
/// </summary>
public static ConnectionMultiplexer RedisConn
{
get
{
if (redisConn == null)
{
lock (Locker)
{
if (redisConn == null || !redisConn.IsConnected)
{
redisConn = ConnectionMultiplexer.Connect(configurationOptions);
}
}
}
return redisConn;
}
}
IDatabase db = redis.GetDatabase();
這里的GetDatabase() 返回的db對象是很輕量級別的,不需要被緩存起來,每次用每次取即可。IDatabase 的所有方法都有同步和異步的實現。其中的異步實現都是可以await的。
二、Strings的相關方法
具體代碼:
var db = conn.GetDatabase();
#region Strings命令
string key = "keyTest1";
//SET命令
db.StringSet(key, "10");
//GET命令
string value = db.StringGet(key);
Console.WriteLine(value);
//APPEND命令
db.StringAppend(key, "10");
value = db.StringGet(key);
Console.WriteLine(value);
//有第二個參數(整數,參看StringIncrement方法)為DECRBY命令
//沒有第二個參數為DECR命令
db.StringDecrement(key);
value = db.StringGet(key);
Console.WriteLine(value);
//有第二個參數為INCRBY命令
//沒有第二個參數為INCR命令
db.StringIncrement(key, 2);
value = db.StringGet(key);
Console.WriteLine(value);
string key2 = "keyTest";
//SETEX命令,帶過期時間
db.StringSet(key2, "keyTest2", new TimeSpan(0, 0, 5));
string value2 = db.StringGet(key2);
Console.WriteLine(value2);
Thread.Sleep(5 * 1000);
//超過5s后,查不到該值
value2 = db.StringGet(key2);
Console.WriteLine("5s later:" + value2);
//GETSET命令,讀出原來的值,並附新值
//下面兩個是測試
value = db.StringGetSet(key, "2000");
Console.WriteLine(value);
value = db.StringGet(key);
Console.WriteLine(value);
//MSET命令
db.StringSet(new KeyValuePair<RedisKey, RedisValue>[] {
new KeyValuePair<RedisKey, RedisValue>("key1", "value1"),
new KeyValuePair<RedisKey, RedisValue>("key2", "value2"), });
//MGET命令
RedisValue[] values = db.StringGet(new RedisKey[] { "key1", "key2" });
Console.WriteLine(values[0] + "&&" + values[1]);
#endregion
運行結果:

三、Hashes的相關方法
具體代碼:
var db = conn.GetDatabase();
#region Hash命令
string key = "mykey";
//避免key重復
db.KeyDelete(key);
//HSET命令
db.HashSet(key, "a", "1");
//HGET命令
string value = db.HashGet(key, "a");
Console.WriteLine(value);
//HMSET
db.HashSet(key, new HashEntry[] { new HashEntry("b", "2"), new HashEntry("c", "3") });
//HMGET
HashEntry[] values = db.HashGetAll(key);
Console.WriteLine(values[0].Name + "///" + values[0].Value);
//HDEL
db.HashDelete(key, "c");
string valuec = db.HashGet(key, "c");
Console.WriteLine("c:" + valuec);
//HEXISTS
Console.WriteLine(db.HashExists(key, "a"));
#endregion
運行結果:

四、Lists的相關方法
具體代碼:
var db = conn.GetDatabase();
#region List命令
string key = "mykey";
db.KeyDelete(key);
//LPUSH
long index = db.ListLeftPush(key, "test");
//LINDEX,index返回總的長度,index必須減一
string value = db.ListGetByIndex(key, index - 1);
Console.WriteLine(value);
//LINSTER
long index2 = db.ListInsertAfter(key, "test", "testright");
string value2 = db.ListGetByIndex(key, index2 - 1);
Console.WriteLine(value2);
long index3 = db.ListInsertBefore(key, "test", "testleft");
string value3 = db.ListGetByIndex(key, index - 1);
//LRANGE
RedisValue[] values = db.ListRange(key);
Console.WriteLine("values:begin");
values.ToList().ForEach((v) =>
{
Console.WriteLine(v);
});
Console.WriteLine("values:end");
//LREM
long index4 = db.ListRemove(key, "test");
values = db.ListRange(key);
Console.WriteLine("values2:begin");
values.ToList().ForEach((v) =>
{
Console.WriteLine(v);
});
Console.WriteLine("values2:end");
//LPOP
string value5 = db.ListLeftPop(key);
Console.WriteLine(value5);
values = db.ListRange(key);
Console.WriteLine("values3:begin");
values.ToList().ForEach((v) =>
{
Console.WriteLine(v);
});
Console.WriteLine("values3:end");
Console.WriteLine(value3);
#endregion
運行結果:

五、最后
現在只簡單學會使用Strings、Hashes和Lists,還有很多以后再研究使用。
備注:
文章系轉載:http://www.cnblogs.com/weixiao520/p/5765358.html
