效果如下:
第一種形式字符串存儲 (key為主鍵Id 字符串為用戶信息)
實現代碼
/// <summary> /// 根據用戶Id獲取用戶信息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnRead_Click(object sender, EventArgs e) { //1-獲取輸入框用戶Id string userid = txtUserInfo.Text.Trim(); if (string.IsNullOrWhiteSpace(userid)) { MessageBox.Show("用戶id不能為空"); return; } //2-讀取redis用戶信息 Sys_User obj = new Sys_User(); bool isConnect = true; try { obj = RedisCache.Default.StringGet<Sys_User>(userid, RedisDb.DbDefault); } catch (Exception ex) { isConnect = false; } UserBusiness userBusiness = new UserBusiness(); //3-redis用戶信息不存在,讀取數據庫 if (obj == null && isConnect) { var userInfo = userBusiness.QueryUserInfo(userid); if (userInfo != null) { RedisCache.Default.StringSet<Sys_User>(userid, userInfo); txtUserDetail.Text = "姓名:" + userInfo.Name; } } //4-redis存在的有數據 else { txtUserDetail.Text ="姓名:"+ obj.Name; } }
stringGet方法(一個公共類里面的,粘貼了部分代碼)
/// <summary> /// 獲取一條String類型的信息 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key">鍵</param> /// <param name="db">默認數據庫-讀取第幾個數據庫</param> /// <returns></returns> public T StringGet<T>(string key, RedisDb db = RedisDb.DbDefault) { string value = GetDatabase(db).StringGet(key); if (string.IsNullOrWhiteSpace(value)) { return default(T); } return Deserialize<T>(value); } /// <summary> /// 反序列化值 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="value"></param> /// <returns></returns> private T Deserialize<T>(string value) { return JsonConvert.DeserializeObject<T>(value); }
第二種形式List方式存儲(key-類似於表名,數據為用戶列表)
具體實現代碼
private void btnOpeList_Click(object sender, EventArgs e) { //1-獲取輸入框用戶Id string userid = txtUserInfo.Text.Trim(); if (string.IsNullOrWhiteSpace(userid)) { MessageBox.Show("用戶id不能為空"); return; } //2-讀取redis用戶信息 Sys_User obj = new Sys_User(); bool isConnect = true; try { //判斷列表里面是否有當前用戶 List<Sys_User> listUser = RedisCache.Default.ListRange<Sys_User>("UserInfo",0,-1,RedisDb.DbTwo); obj = listUser?.Where(it => it.Id == userid).FirstOrDefault(); } catch (Exception ex) { isConnect = false; } UserBusiness userBusiness = new UserBusiness(); //3-redis用戶信息不存在,讀取數據庫 if (obj == null && isConnect) { var userInfo = userBusiness.QueryUserInfo(userid); if (userInfo != null) { RedisCache.Default.ListRightPush<Sys_User>("UserInfo", userInfo, RedisDb.DbTwo); txtUserDetail.Text = "姓名:" + userInfo.Name; } } //4-redis存在的有數據 else { txtUserDetail.Text = "姓名:" + obj.Name; } }
/// <summary> /// 從List集合中獲取數據 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key">鍵</param> /// <param name="start">開始索引</param> /// <param name="stop">結束索引(-1:從start到所有)</param> /// <param name="db">數據庫</param> /// <returns></returns> public List<T> ListRange<T>(string key, long start = 0, long stop = -1, RedisDb db = RedisDb.DbDefault) { List<T> result = new List<T>(); RedisValue[] values = GetDatabase(db).ListRange(key, start, stop); foreach (string value in values) { result.Add(Deserialize<T>(value)); } return result; }