在Azure上開 Redis 在C#專案中簡易存取資料
#region 測試4
Console.WriteLine("測試4");
testSample_beverage _beverage = new testSample_beverage();
string jsonStr = JsonConvert.SerializeObject(_beverage);
//寫入一個json字串
cache.StringSet("test4", jsonStr);
//取出json字串
var test4 = cache.StringGet("test4");
Console.WriteLine(test4);
#endregion
參考了這篇文章,裡面每個步驟都有圖片蠻詳細的
https://docs.microsoft.com/en-us/azure/redis-cache/cache-dotnet-how-to-use-azure-redis-cache
但是我還是自己擷了一次圖
設定Azure的部分
1. 在Azure介面上新增Redis
2. 檢視狀態等待佈署完成
3. 佈署完成後會看到畫面上多一個redis DB的圖示
4. 點選"顯示存取金鑰"取得要放在程式的金鑰
5. 複製主要連結字串,待會寫code就是用這段連上Redis
程式連接Redis的部分
1. 先到NuGet安裝一下StackExchange.Redis套件
2. 加入命名空間
using StackExchange.Redis;
3. 建立連線
ConnectionMultiplexer conn = ConnectionMultiplexer.Connect("剛剛在Azure上複製的主要連接字串");
//預設會有16個Redis DB (0-15) 用第3個測試看看
IDatabase cache = conn.GetDatabase(3);
可以先用RedisDesktopManager工具測試連線看看
開始測試存取
測試1
#region 測試1
Console.WriteLine("測試1");
//寫入cache 3秒
cache.StringSet("test1", "Hello", TimeSpan.FromSeconds(3));
//讀出
var test1 = cache.StringGet("test1");
Console.WriteLine(string.Format("test1:{0}", test1));
//When.NotExists不存在才寫入cache
cache.StringSet("test1", "Hello123", TimeSpan.FromSeconds(3), When.NotExists);
test1 = cache.StringGet("test1");
Console.WriteLine(string.Format("test1(3秒內):{0}", test1));//結果不會被覆蓋
var task1 = Task.Factory.StartNew(() =>
{
//測試3秒過後
Thread.Sleep(3000);
cache.StringSet("test1", "Hello456", null, When.NotExists);
test1 = cache.StringGet("test1");
Console.WriteLine(string.Format("test1(3秒後):{0}", test1));//結果3秒後沒有cache了就會被覆蓋
});
task1.Wait();
#endregion
輸出結果
測試2
#region 測試2
Console.WriteLine("測試2");
//寫入cache 3秒
cache.StringSet("test2", "Hey", TimeSpan.FromSeconds(3));
//讀出
var test2 = cache.StringGet("test2");
Console.WriteLine(string.Format("test2:{0}", test2));
//When.NotExists不存在才寫入cache
cache.StringSet("test2", "Hey123", TimeSpan.FromSeconds(3), When.Always);
test2 = cache.StringGet("test2");
Console.WriteLine(string.Format("test2(3秒內):{0}", test2));//結果一律被覆蓋
#endregion
輸出結果
測試3
#region 測試3
Console.WriteLine("測試3");
//When.Exists已存在才寫入
cache.StringSet("test3", "Hi", null, When.Exists);
//讀出
var test3 = cache.StringGet("test3");
Console.WriteLine(string.Format("test3:{0}", test3));//test3這個KEY不存在所以沒有值
//接著先創造一個test3
cache.StringSet("test3", "Hi");
test3 = cache.StringGet("test3");
Console.WriteLine(string.Format("test3(存在):{0}", test3));
//已存在就會被覆蓋
cache.StringSet("test3", "Hi123", null, When.Exists);
test3 = cache.StringGet("test3");
Console.WriteLine(string.Format("test3(已存在就會被覆蓋):{0}", test3));
#endregion
輸出結果
測試4
#region 測試4
Console.WriteLine("測試4");
testSample_beverage _beverage = new testSample_beverage();
string jsonStr = JsonConvert.SerializeObject(_beverage);
//寫入一個json字串
cache.StringSet("test4", jsonStr);
//取出json字串
var test4 = cache.StringGet("test4");
Console.WriteLine(test4);
#endregion
class testSample_beverage
{
public string b_Name { get; set; }
public int b_price { get; set; }
public testSample_beverage()
{
b_Name = "紅茶";
b_price = 20;
}
}
輸出結果
範例檔