C# Redis实战(七)
生活随笔
收集整理的這篇文章主要介紹了
C# Redis实战(七)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
七、修改數據
在上一篇?C# Redis實戰(六)中介紹了如何查詢Redis中數據,本篇將介紹如何修改Redis中相關數據。大家都知道Redis是key-value型存儲系統,所以應該可以修改key,也可以根據key來修改value。接下來將是詳細的C#語言修改Redis示例。
1、通過key修改單個value using (var redisClient = RedisManager.GetClient()){var user = redisClient.GetTypedClient<User>();var value = user.GetValue(txtChangeKey.Text);//首先先獲取當前key的值var changedUser = new User{Id = value.Id,Name = txtChangeName.Text,Job = new Job { Position = txtChangePosition.Text }};//設置相應的新value值,并使其它數據與原來相統一redisClient.Set(txtChangeKey.Text, changedUser);//修改valuevalue = user.GetValue(txtChangeKey.Text);//根據key獲取最新的數據var htmlStr = string.Empty;htmlStr += "修改后的ID=" + value.Id + "??姓名:" + value.Name + "??所在部門:" + value.Job.Position;lblPeople.Text = htmlStr;lblShow.Text = "篩選后共有:1人!";}
代碼執行后效果圖如下:
以上代碼讓Redis修改了key為urn:user:1的人所在部門,將原先.NET修改為現在的Python,修改后全部的數據就變成了:
2、通過keys修改多個values var dictionary = new Dictionary<string, User>();using (var redisClient = RedisManager.GetClient()){var user = redisClient.GetTypedClient<User>();var user1 = new User{Id = user.GetNextSequence(),//獲取新的IDName = "小明",Job = new Job { Position = "Python" }};var user2 = new User{Id = user.GetNextSequence(),Name = "小紅",Job = new Job { Position = "Python" }};var userKeyList = user.GetAllKeys().Where(x => x.StartsWith("urn")).OrderBy(y => y).ToList();//只獲取保存value的keydictionary.Add(userKeyList[1], user1);//第二個人dictionary.Add(userKeyList[2], user2);//第三個人redisClient.SetAll(dictionary);//同時修改多個valuevar users = user.GetAll();if (users.Count > 0){var htmlStr = string.Empty;foreach (var u in users){htmlStr += "<li>ID=" + u.Id + "??姓名:" + u.Name + "??所在部門:" + u.Job.Position + "</li>";}lblPeople.Text = htmlStr;}lblShow.Text = "篩選后共有:" + users.Count.ToString() + "人!";}
我需要在修改了第一個人所在部門的基礎上同時將第二個人和第三個人所在部門、姓名、ID都一并修改,執行后效果圖如下:
3、重命名key 以上修改value的示例我們只修改了value,但是并沒有改變key值。如果需要重命名key,首先,查詢Redis中所有的key
修改key代碼如下: using (var redisClient = RedisManager.GetClient()){redisClient.RenameKey(txtKey.Text, txtNewKey.Text);var user = redisClient.GetTypedClient<User>();var userKeyList = user.GetAllKeys();if (userKeyList.Count > 0){lblPeople.Text = string.Empty;var htmlStr = string.Empty;foreach (var u in userKeyList){htmlStr += "<li>key=" + u + "</li>";}lblPeople.Text = htmlStr;}lblShow.Text = "篩選后共有:" + userKeyList.Count.ToString() + " Keys!";}
這樣是可以重命名key的,如下圖:
可以看到urn:user:1已經不存在了,取而代之的是urn:user:5,但是如果我們再次運行GetAll<User>()時,卻發現只有三條數據了,如圖: ? ? ?? 在C# Redis實戰(六)中我已經提到了ids:User的概念,其實在ServiceStack.Redis的Rename中并沒有將重命名后的key保存在其中,這樣就會導致ids:User中只有原來的三條未修改的數據,但是seq:User中仍有六條數據。 public void Rename(string oldKeyname, string newKeyname){if (oldKeyname == null)throw new ArgumentNullException("oldKeyname");if (newKeyname == null)throw new ArgumentNullException("newKeyname");SendExpectSuccess(Commands.Rename, oldKeyname.ToUtf8Bytes(), newKeyname.ToUtf8Bytes());}
但是查詢單個key依然可以得到完整的數據: 可以這么理解,可憐的urn:user:5變成了無家可歸的孩子,不管是GetAll(),或者DeleteAll()均對其不起作用。
如需轉載,請注明出處,本系列博文示例程序下載地址
轉載于:https://www.cnblogs.com/QiuJL/p/4524196.html
總結
以上是生活随笔為你收集整理的C# Redis实战(七)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软自家的.Net下的JavaScrip
- 下一篇: C# Socket的粘包处理(转)