【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));
时间总是悄悄流逝