C# Redis實戰(七)

來源:互聯網
上載者:User

標籤:blog   http   io   ar   os   sp   for   strong   on   

七、修改資料 在上一篇 C# Redis實戰(六)中介紹了如何查詢Redis中資料,本篇將介紹如何修改Redis中相關資料。大家都知道Redis是key-value型儲存系統,所以應該可以修改key,也可以根據key來修改value。接下來將是詳細的C#語言修改Redis樣本。  1、通過key修改單個value [csharp] view plaincopy 
  1. using (var redisClient = RedisManager.GetClient())  
  2. {  
  3.     var user = redisClient.GetTypedClient<User>();  
  4.     var value = user.GetValue(txtChangeKey.Text);//首先先擷取當前key的值  
  5.     var changedUser = new User  
  6.     {  
  7.         Id = value.Id,  
  8.         Name = txtChangeName.Text,  
  9.         Job = new Job { Position = txtChangePosition.Text }  
  10.     };//設定相應的新value值,並使其它資料與原來相統一  
  11.     redisClient.Set(txtChangeKey.Text, changedUser);//修改value  
  12.     value = user.GetValue(txtChangeKey.Text);//根據key擷取最新的資料  
  13.   
  14.     var htmlStr = string.Empty;  
  15.     htmlStr += "修改後的ID=" + value.Id + "  姓名:" + value.Name + "  所在部門:" + value.Job.Position;  
  16.     lblPeople.Text = htmlStr;  
  17.     lblShow.Text = "篩選後共有:1人!";  
  18.   
  19. }  
代碼執行後如下:
以上代碼讓Redis修改了key為urn:user:1的人所在部門,將原先.NET修改為現在的Python,修改後全部的資料就變成了:  2、通過keys修改多個values [csharp] view plaincopy 
  1. var dictionary = new Dictionary<string, User>();  
  2. using (var redisClient = RedisManager.GetClient())  
  3. {  
  4.     var user = redisClient.GetTypedClient<User>();  
  5.     var user1 = new User  
  6.     {  
  7.         Id = user.GetNextSequence(),//擷取新的ID  
  8.         Name = "小明",  
  9.         Job = new Job { Position = "Python" }  
  10.     };  
  11.     var user2 = new User  
  12.     {  
  13.         Id = user.GetNextSequence(),  
  14.         Name = "小紅",  
  15.         Job = new Job { Position = "Python" }  
  16.     };  
  17.     var userKeyList = user.GetAllKeys().Where(x => x.StartsWith("urn")).OrderBy(y => y).ToList();//只擷取儲存value的key  
  18.     dictionary.Add(userKeyList[1], user1);//第二個人  
  19.     dictionary.Add(userKeyList[2], user2);//第三個人  
  20.     redisClient.SetAll(dictionary);//同時修改多個value  
  21.      
  22.     var users = user.GetAll();  
  23.     if (users.Count > 0)  
  24.     {  
  25.         var htmlStr = string.Empty;  
  26.         foreach (var u in users)  
  27.         {  
  28.             htmlStr += "<li>ID=" + u.Id + "  姓名:" + u.Name + "  所在部門:" + u.Job.Position + "</li>";  
  29.         }  
  30.         lblPeople.Text = htmlStr;  
  31.     }  
  32.     lblShow.Text = "篩選後共有:" + users.Count.ToString() + "人!";  
  33. }  

我需要在修改了第一個人所在部門的基礎上同時將第二個人和第三個人所在部門、姓名、ID都一併修改,執行後如下:
3、重新命名key以上修改value的樣本我們只修改了value,但是並沒有改變key值。如果需要重新命名key,首先,查詢Redis中所有的key
修改key代碼如下: [csharp] view plaincopy 
  1. using (var redisClient = RedisManager.GetClient())  
  2.                 {  
  3.                     redisClient.RenameKey(txtKey.Text, txtNewKey.Text);  
  4.                      
  5.                     var user = redisClient.GetTypedClient<User>();  
  6.                     var userKeyList = user.GetAllKeys();  
  7.   
  8.                     if (userKeyList.Count > 0)  
  9.                     {  
  10.                         lblPeople.Text = string.Empty;  
  11.                         var htmlStr = string.Empty;  
  12.                         foreach (var u in userKeyList)  
  13.                         {  
  14.                             htmlStr += "<li>key=" + u + "</li>";  
  15.                         }  
  16.                         lblPeople.Text = htmlStr;  
  17.                     }  
  18.                     lblShow.Text = "篩選後共有:" + userKeyList.Count.ToString() + " Keys!";  
  19.                 }  
這樣是可以重新命名key的,如:
可以看到urn:user:1已經不存在了,取而代之的是urn:user:5,但是如果我們再次運行GetAll<User>()時,卻發現只有三條資料了,       在C# Redis實戰(六)中我已經提到了ids:User的概念,其實在ServiceStack.Redis的Rename中並沒有將重新命名後的key儲存在其中,這樣就會導致ids:User中只有原來的三條未修改的資料,但是seq:User中仍有六條資料。 [csharp] view plaincopy 
  1. public void Rename(string oldKeyname, string newKeyname)  
  2.         {  
  3.             if (oldKeyname == null)  
  4.                 throw new ArgumentNullException("oldKeyname");  
  5.             if (newKeyname == null)  
  6.                 throw new ArgumentNullException("newKeyname");  
  7.   
  8.             SendExpectSuccess(Commands.Rename, oldKeyname.ToUtf8Bytes(), newKeyname.ToUtf8Bytes());  
  9.         }  
但是查詢單個key依然可以得到完整的資料:可以這麼理解,可憐的urn:user:5變成了無家可歸的孩子,不管是GetAll(),或者DeleteAll()均對其不起作用。 如需轉載,請註明出處,本系列博文樣本程式

C# Redis實戰(七)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.