【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));

 

posted @ 2019-05-27 20:43  微弦  阅读(421)  评论(0编辑  收藏  举报