【Redis 三】Jedis操作Redis的Hash类型

本文介绍了Jedis操作Redis的Hash类型,探讨了Redis如何根据存储需求在ziplist和hashtable之间转换,以及Hash类型的数据结构和Rehash过程。Hash类型适合存储用户信息,避免了内存浪费和复杂操作。文中还涉及了Redis的bucket存储空间概念,以及数据分区和分桶的区别。
摘要由CSDN通过智能技术生成

  ok,直接进入主题,今天要讲的Jedis操作Redis的Hash类型,我们以操作带动理解的形式进行展开。

private  void  setHashValue(String  key){
        //设置值,field的为HashMap中的Key :hset key field value
        String field = "otherKey";
        Long hset0 = getJedis().hset(key, field, "可以存对象");

        //hget 读取单个field的值
        String hget = getJedis().hget(key, field);

        //直接修改已存在的值 如果field已存在则执行修改,并返回0
        Long hset1 = getJedis().hset(key, field, "hash为散列类型");

        //hexists 判断field是否存在 :hexists key field
        Boolean hexists = getJedis().hexists(key, field);

        //hsetex 如果field不存在则添加, 已存在则不会修改值, 可用来添加要求不重复的field
        Long hsetnx = getJedis().hsetnx(key, "id", "3");
        Long id = getJedis().hsetnx(key, "id", "hsetnx");

        //hmset 批量设置或获取field-value :hmset key field value [field value ...]
        Map<String, String> msets = new HashMap<>(10);
        msets.put("color", "red");
        msets.put("width", "100");
        msets.put("height", "80");
        String hmset = getJedis().hmset(key, msets);

        //hmget key field [field ...]
        List<String> mget = getJedis().mget(key, "color", "width", "height");
        String string = Arrays.toString(mget.toArray());

        //hincrBy 在整数类型值上增加, 返回修改后的值 :hincrby key field
        //             hincrbyfloat key field
        Long hincrBy = getJedis().hincrBy(key, field, 4);

        //hlen 读取field数量
        Long hlen = getJedis().hlen(key);

        //hkeys 读取所有field
        Set<String> hkeys = getJedis().hkeys(key);

        //hvals 读取所有值
        List<String> hvals = getJedis().hvals(key);

        //hgetAll 获取所有键值对
        Map<String, String> map = getJedis().hgetAll(key);

        //hdel 删除field
        Long hdel = getJedis().hdel(key);

        //删除多个field
        Long hdel1 = getJedis().hdel(key, "color", "width", "height");

        /**
         * SETEX 是一个原子性(atomic)操作,
           关联值和设置生存时间两个动作会在同一时间内完成,
           该命令在 Redis 用作缓存时,非常实用。
         SET key value
         EXPIRE key seconds  # 设置生存时间
         */
        String value = getJedis().setex(key, 1000, "value");
    }

     哈希类型是指键值本身又是一个键值对结构 即 Hash类型的Value为自己的一种ZipMap,当Hash对象存的value值不多的情况下,Redis 会采用节约内存空间的方式 压缩列表 来存储Value,而不真正使用HashMap结构,这个时候值对应的redisObject 的 encoding 为 ziplist,当存的Value 越来越多,Redis会采用 字典来存储Value,此时的encoding 为 ht。

在上一篇有提到过Redis有五种对象数据类型,十种的对象编码格式,而哈希对象 对应的type则为  #define OBJ_HASH 4 。

对象编码则为:

REDIS_HASH  REDIS_ENCODING_ZIPLIST  使用压缩列表实现的哈希对象。
REDIS_HASH  REDIS_ENCODING_HT   使用字典实现的哈希对象。

其对应的OBJECT ENCODING 对不同编码的输出为:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值