標籤:io os ar for 資料 問題 cti on c
1、安裝了一下Redis,有綠色版,很方便,配置也很簡單;
2、實驗了一下主從複製,效果沒大規模進行,不是很瞭解,Master可以讀寫,但Slave只能讀,利用這個性質可以進行讀寫分離,提高吞吐效能;
3、用C#(ServiceStack.Redis)訪問了一下,沒什麼很特別的;
4、ServiceStack並不是傳統意義上的安全執行緒,僅僅適用每個線程用自己的RedisClient才會安全,多個線程用同一個Client還是會有問題的。潛在問題當然是死結。
using (RedisClient redisClient = new RedisClient(host, 6379)) { //擷取指定Key的值,沒有為空白null; string theV = redisClient.Get<string>(elementKey); this.textBox1.Text = theV; //設定一個Key-value對,Key存在則修改. //這個泛型封裝是作者庫裡專門為C#類型做了轉換,可以簡化你的編程,Redis本身沒有這麼豐富的類型. redisClient.Set<string>("KeyAAA","sadfsdffdsa"); //事務 using (IRedisTransaction IRT = redisClient.CreateTransaction()) { try { IRT.QueueCommand(r => r.Set("keyA", 20)); IRT.QueueCommand(r => r.Increment("keyA", 1)); //注意,如果有下面這條語句,提交事務會報錯,這說明啟動事務後的 //Client操作都必須在IRT內調用. //redisClient.Set<string>("KeyABC", "sadfsdffdsa"); //throw new Exception("資料庫操作錯誤!"); // 提交事務 IRT.Commit(); } catch { IRT.Rollback(); } //keyA不存在,但KeyABC的值存在. string theV1 = redisClient.Get<int>("keyA").ToString(); string theV2 = redisClient.Get<string>("KeyABC"); //並發鎖 redisClient.Add("mykey", 1); // 支援IRedisTypedClient和IRedisClient //注意這裡是Form調用,測試不出效果,如果是網頁程式,則可獲得鎖效果. using (redisClient.AcquireLock("testlock")) { var counter = redisClient.Get<int>("mykey"); Thread.Sleep(100); redisClient.Set("mykey", counter + 1); } } }
Redis 學習筆記1