[.net C#] Azure Redis 簡易存取實作筆記

在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;
	}
}

輸出結果

範例檔

https://bitbucket.org/yu_allen/azureredisexercise/src/