• 【Redis】redis基本数据结构之Hash


    Hash:

    适合存储对象

    类似域Java中的HashMap,也是通过哈希桶(数组+二维链表)来实现的。

    在需要扩容哈希桶时,即进行rehash时,Redis采用了渐进式的策略,即在rehash时同时保留新旧两个hash结构,查询时也会同时查询两个hash结构,通过后续的定时任务,分批地将旧的hash内容迁移到新的hash结构中。

    当hash移除最后一个元素之后,数据结构被删除,内存被收回。


    添加:hset hash集合名称 field value
    获取:hget hash集合名称 field

    连接远程redis:redis-cli -h host -p port -a password

    注意redis的键和值是区分大小写的哦。

    批量添加:hmset hash集合名称 field1 value1 field2 value2 ....
    批量获取:hmget hash集合名称 field1 field2 field3

    尽量使用批量操作进行查询,提高效率

    貌似hset也可以设置多个值:

    但hget却 不可以批量 查询多个值:

    hsetnx // 设置值,如果存在,则不设置

    设置已经存在的值,不生效 :

    设置不存在的值,生效 :

    hexists // 判断键是否存在


    hlen  // hash表的长度,不存在的哈希表长度为0:

    hdel  // 删除hash表 中的 某一个键,如果hash表或者键不存在,删除不报错:

    hkeys  //  返回hash表中的所有键的列表:

    hvals   // 返回hash表中的所有值的列表:

    hgetall  // 返回整个列表信息

    下面是java代码示例:

     1         Jedis jedis = new Jedis("192.168.200.129", 6379);
     2 
     3         // 添加键值对
     4         jedis.hset("personInfo", "Xieguangkun", "male");
     5         // 查询
     6         System.out.println(jedis.hget("personInfo", "Xieguangkun"));
     7 
     8         Map<String, String> personInfoMap = new HashMap<String, String>();
     9         personInfoMap.put("Mayun", "male");
    10         personInfoMap.put("Liusisi", "female");
    11         personInfoMap.put("Xiedajiao", "Female");
    12         // 批量添加
    13         jedis.hmset("personInfo", personInfoMap);
    14         jedis.hmget("personInfo", "Xieguangkun", "Mayun",  "Liusisi").forEach(sex -> System.out.println(sex));
    15 
    16         // 如果已经存在,则不设置
    17         jedis.hsetnx("personInfo", "Mayun", "female");
    18         System.out.println(jedis.hget("personInfo", "Mayun"));
    19 
    20         // 查看key是否存在于哈希表中
    21         System.out.println(jedis.hexists("personInfo", "Mayun"));
    22         System.out.println(jedis.hexists("personInfo", "kkkk"));
    23 
    24         // 查看哈希表的大小
    25         System.out.println(jedis.hlen("personInfo"));
    26 
    27         // 删除hash表中的,某一键值对
    28         System.out.println(jedis.hget("personInfo", "Liusisi"));
    29         jedis.hdel("personInfo", "Liusisi");
    30         System.out.println(jedis.hget("personInfo", "Liusisi"));
    31 
    32         // 返回key列表
    33         jedis.hkeys("personInfo").forEach(name-> System.out.println(name));
    34 
    35         // 返回值列表
    36         jedis.hvals("personInfo").forEach(sex -> System.out.println(sex));
    37 
    38         // 返回hash表
    39         jedis.hgetAll("personInfo").forEach((name, sex) -> System.out.println(name + "|" +  sex));
  • 相关阅读:
    Delphi利用Windows GDI实现文字倾斜
    再学 GDI+文本输出文本样式
    GDI+在Delphi程序的应用 Photoshop色相饱和度明度功能
    GDI+图像与GDI位图的相互转换
    走进JavaWeb技术世界12:从手动编译打包到项目构建工具Maven
    走进JavaWeb技术世界11:单元测试框架Junit
    走进JavaWeb技术世界10:从JavaBean讲到Spring
    走进JavaWeb技术世界9:Java日志系统的诞生与发展
    走进JavaWeb技术世界8:浅析Tomcat9请求处理流程与启动部署过程
    随笔总和
  • 原文地址:https://www.cnblogs.com/wuyizuokan/p/10933067.html
Copyright © 2020-2023  润新知