Redis(3) ——hash操作

概念

Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。

Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

命令查看

http://www.redis.cn/commands.html#generic

代码案列(常见API)

     using (RedisClient client = new RedisClient("127.0.0.1", 6379))
            {
                #region 添加数据  key ,key/value 更加适合存储对象
                var key = "listid";
                //client.SetEntryInHash(key, "id", "001");
                //client.SetEntryInHash(key, "name", "牛逼");
                //client.SetEntryInHash(key, "class", "班级");
                //client.SetEntryInHash(key, "school", "学校");
                #endregion

                #region 批量新增 
                //client.SetRangeInHash(key, new Dictionary<string, string> { { "country", "中国" },{ "earth","地球"} });
                #endregion

                #region 根据key 和数据key 获取value  返回集合
                // var value=client.GetValuesFromHash(key, "id", "name");
                #endregion

                #region 如果key 里面存在key/value 返回false,不存在直接添加,返回true
                //Console.WriteLine(client.SetEntryInHashIfNotExists(key, "city", "上海"));                
                #endregion


                #region 存储对象  
                //var user1 = new User() { id = "2", name = "李" }; //按照对象类型存储  只要key 不变 继续添加就是修改
                //client.StoreAsHash<User>(user1);
                //var id=client.GetFromHash<User>(2).id;   //获取对象直接可以获取属性值,括号里面的数字代表第几个对象

                #endregion

                #region 获取所有key 的集合
                //var list = client.GetAllEntriesFromHash(key);
                #endregion

                #region 获取所有key 的总数
                // var count = client.GetHashCount(key);
                #endregion

                #region 获取所有key 的集合
                //var listKey = client.GetHashKeys(key);
                #endregion

                #region 获取所有value 的集合
                //var listValue = client.GetHashValues(key);
                #endregion

                #region 获取所有key 和数据key移除数据
                //var status=client.RemoveEntryFromHash(key, "id");//成功返回true
                #endregion

                #region 获取所有key 和数据key判断数据是否存在
                //var statusId=client.HashContainsEntry(key, "id");//没有返回false
                //var statusName = client.HashContainsEntry(key, "name");//成功返回true
                #endregion

                #region 获取所有key 和数据key判断数据是否存在
                //var statusId=client.HashContainsEntry(key, "id");//没有返回false
                //var statusName = client.HashContainsEntry(key, "name");//成功返回true
                #endregion
#
                #region 给 key 指定的数据key 加上步长, 数据类型必须是数字
                client.IncrementValueInHash(key, "id", 2);
                #endregion
            }

数据结构

ZipList和hashTable,

              (1) ziplist :上图可以看出 ziplist就是 list的压缩, 查找复杂度是O(N),所以有性能问题,字段小于512或者值并且值64 字节的时候用 ziplist

               (2)hash 查找复杂度是O(1),

使用场景

常用作存储结构化数据、比如论坛系统中可以用来存储用户的Id、昵称、头像、积分等信息。如果需要修改其中的信息,只需要通过Key取出Value进行反序列化修改某一项的值,再序列化存储到Redis中,Hash结构存储,由于Hash结构会在单个Hash元素在不足一定数量时进行压缩存储,所以可以大量节约内存。这一点在String结构里是不存在的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小盆友你是否很有多问号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值