C# 通過ServiceStack 操作Redis——Hash類型的使用及示例


接着上一篇,下面轉到hash類型的代碼使用

Hash:結構 key-key-value,通過索引快速定位到指定元素的,可直接修改某個字段

    /// <summary>
    /// Hash:類似dictionary,通過索引快速定位到指定元素的,耗時均等,跟string的區別在於不用反序列化,直接修改某個字段
    /// string的話要么是 001:序列化整個實體
    ///           要么是 001_name:  001_pwd: 多個key-value
    /// Hash的話,一個hashid-{key:value;key:value;key:value;}
    /// 可以一次性查找實體,也可以單個,還可以單個修改
    /// </summary>
    public class RedisHashService : RedisBase
    {
        #region 添加
        /// <summary>
        /// 向hashid集合中添加key/value
        /// </summary>       
        public bool SetEntryInHash(string hashid, string key, string value)
        {
            return base.iClient.SetEntryInHash(hashid, key, value);
        }
        /// <summary>
        /// 如果hashid集合中存在key/value則不添加返回false,
        /// 如果不存在在添加key/value,返回true
        /// </summary>
        public bool SetEntryInHashIfNotExists(string hashid, string key, string value)
        {
            return base.iClient.SetEntryInHashIfNotExists(hashid, key, value);
        }
        /// <summary>
        /// 存儲對象T t到hash集合中
        /// 需要包含Id,然后用Id獲取
        /// </summary>
        public void StoreAsHash<T>(T t)
        {
            base.iClient.StoreAsHash<T>(t);
        }
        #endregion

        #region 獲取
        /// <summary>
        /// 獲取對象T中ID為id的數據。
        /// </summary>
        public T GetFromHash<T>(object id)
        {
            return base.iClient.GetFromHash<T>(id);
        }
        /// <summary>
        /// 獲取所有hashid數據集的key/value數據集合
        /// </summary>
        public Dictionary<string, string> GetAllEntriesFromHash(string hashid)
        {
            return base.iClient.GetAllEntriesFromHash(hashid);
        }
        /// <summary>
        /// 獲取hashid數據集中的數據總數
        /// </summary>
        public long GetHashCount(string hashid)
        {
            return base.iClient.GetHashCount(hashid);
        }
        /// <summary>
        /// 獲取hashid數據集中所有key的集合
        /// </summary>
        public List<string> GetHashKeys(string hashid)
        {
            return base.iClient.GetHashKeys(hashid);
        }
        /// <summary>
        /// 獲取hashid數據集中的所有value集合
        /// </summary>
        public List<string> GetHashValues(string hashid)
        {
            return base.iClient.GetHashValues(hashid);
        }
        /// <summary>
        /// 獲取hashid數據集中,key的value數據
        /// </summary>
        public string GetValueFromHash(string hashid, string key)
        {
            return base.iClient.GetValueFromHash(hashid, key);
        }
        /// <summary>
        /// 獲取hashid數據集中,多個keys的value集合
        /// </summary>
        public List<string> GetValuesFromHash(string hashid, string[] keys)
        {
            return base.iClient.GetValuesFromHash(hashid, keys);
        }
        #endregion

        #region 刪除
        /// <summary>
        /// 刪除hashid數據集中的key數據
        /// </summary>
        public bool RemoveEntryFromHash(string hashid, string key)
        {
            return base.iClient.RemoveEntryFromHash(hashid, key);
        }
        #endregion

        #region 其它
        /// <summary>
        /// 判斷hashid數據集中是否存在key的數據
        /// </summary>
        public bool HashContainsEntry(string hashid, string key)
        {
            return base.iClient.HashContainsEntry(hashid, key);
        }
        /// <summary>
        /// 給hashid數據集key的value加countby,返回相加后的數據
        /// </summary>
        public double IncrementValueInHash(string hashid, string key, double countBy)
        {
            return base.iClient.IncrementValueInHash(hashid, key, countBy);
        }
        #endregion
    }
View Code

添加

                //1. 添加
                UserInfo userInfo = new UserInfo() { Id = 3, Age = 50, Name = "zxl", Pwd = "123456" };
                //添加第一種方式
                client.SetEntryInHash("UserInfor_001", "0000", "11111");
                client.SetEntryInHash("UserInfor_001", nameof(userInfo.Id), userInfo.Id.ToString());
                client.SetEntryInHash("UserInfor_001", nameof(userInfo.Age), userInfo.Age.ToString());
                client.SetEntryInHash("UserInfor_001", nameof(userInfo.Name), userInfo.Name.ToString());
                client.SetEntryInHash("UserInfor_001", nameof(userInfo.Pwd), userInfo.Pwd.ToString());
                //不存在則添加
                bool b1= client.SetEntryInHashIfNotExists("UserInfor_001", nameof(userInfo.Pwd), userInfo.Pwd.ToString());
                bool b2= client.SetEntryInHashIfNotExists("UserInfor_001", "瀟灑", "小康1000000");
                UserInfo userInfo2 = new UserInfo() { Id = 4, Age = 60, Name = "蕭十一郎", Pwd = "123456" };
                UserInfo userInfo3 = new UserInfo() { Id = 5, Age = 66, Name = "蕭十一郎66", Pwd = "123456" };
                //添加第二種方式  UserInfo 必須有Id屬性
                client.StoreAsHash<UserInfo>(userInfo2);
                client.StoreAsHash<UserInfo>(userInfo3);

 

 

 獲取

                //2.獲取
                string hashId = "UserInfor_001";
                //獲取所有hashid數據集的key / value數據集合
                Dictionary<string, string> data1 = client.GetAllEntriesFromHash(hashId);
                //獲取hashid的數據總數
                long data2 = client.GetHashCount(hashId);
                //獲取hashid數據集中所有key的集合
                List<string>data3= client.GetHashKeys(hashId);
                //獲取hashid數據集中的所有value集合
                List<string> data4= client.GetHashValues(hashId);

                UserInfo data5= client.GetFromHash<UserInfo>(hashId);
                //單個value的讀取
                string age = client.GetValueFromHash(hashId, nameof(userInfo.Age));
                string name = client.GetValueFromHash(hashId, nameof(userInfo.Name));

 刪除

 //3. 刪除
client.RemoveEntryFromHash(hashId, nameof(userInfo.Pwd));

 修改

//4. 修改
 client.SetEntryInHash(hashId, nameof(userInfo.Name), "zzzxxxlll");

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM