入门
哈希类型也是key-value结构,key是字符串类型,其value分为两个部分:field和value
增–hset
public Long hset(String key,
String field,
String value)
将指定的哈希字段设置为指定的值。
如果key不存在,则会创建一个包含哈希的新key。
时间复杂度:O(1)
public String hget(String key,
String field)
如果key包含哈希,则检索与指定字段关联的值。
如果找不到该字段或该键不存在,则返回一个特殊的“ nil”值。
时间复杂度:O(1)
public java.util.List<String> hmget(String key,
String... fields)
检索与指定字段关联的值。
如果某些指定字段不存在,则返回nil值。 不存在的key被视为空哈希。
时间复杂度:O(N)(其中N为字段数)
//创建一个hash类型
> hset myhash field1 "hello" field2 "world"
(integer) 2
//依据field获取hash类型的值,获取多个字段要用hmget.
> hget myhash field1 field2
(error) ERR wrong number of arguments for 'hget' command
//hget一次只能查看一个field的值
> hget myhash field1
"hello"
> hget myhash field2
"world"
> hmget myhash field1 field2
1) "hello"
2) "world"
删-hdel
删除kv对中v的field的,返回值是成功删除了多少个元素,就是成功删除了一个元素,就返回1,成功删除了2个元素,就返回2,etc
//删除key myhash 中的字段1
> hdel myhash field1
(integer) 1
> hmget myhash field1
1) (nil)
> hmget myhash field2
1) "world"
改-hset
实现增删改查的改,增和改其实是同一个,覆盖原有的就可以了
//新建一个hash类型
> hset person username liming age 23 height 180
(integer) 3
> hgetall person
1) "username"
2) "liming"
3) "age"
4) "23"
5) "height"
6) "180"
//修改一个hash类型的value,会覆盖原先的哦
> hset person username liming age 26 height 180
(integer) 0
> hgetall person
1) "username"
2) "liming"
3) "age"
4) "26"
5) "height"
6) "180"
查 --hget,hmget,hgetall
hget 查一个字段
hmget 查多个字段
hgetall 查所有字段
关于value的两部分
如果把hash类型理解为kv对,那么这个v事实上包含两部分
field和value
如何获取所有的field?又如何获取所有的value?
> hkeys person
1) "username"
2) "age"
3) "height"
> hvals person
1) "liming"
2) "26"
3) "180"
从这又可以看出,hash类型很像map,里面存了一堆kv对~
判断是否包含field
判断hash是否包含某个field,包含返回1,不包含返回0
如果写代码,这个也是会常用的,一种关系的判断
> hexists person age
(integer) 1
> hexists person wc
(integer) 0
总结
hash类型无非也是增删改查
增 hset
删 hdel
改 hset
查 hget,hmget,hgetall
如果把hash类型类比下java的map类型,或许就容易理解了~