写在前面的话
这篇笔记笔者刚正式工作时写的,如有问题,谢谢指出。
简介
hash 是一个String类型的filed 和 value 的映射表,hash特别适合用于存储对象,你可以直接对对象中的某个属性进行操作。
使用场景,比如存储用户信息,商品信息等等。可以类比Java的Map:
Map<String,Map<String,String>> hash = new HashMap<>();
优势
redis中的String类型也可以存储这种结果,但是有两个弊端:
1.整存整取,如果修改某一个变量,就必须获取整个value,修改某个属性,然后覆盖原值。
2.序列化/反序列化,如果存储结构化value,需要进行序列化,如果修改,则需要进行反序列化,然后再进行序列化,存储起来。
基本操作
# hset key field value 给定的key 设置 键值对
hset 1992 name 123
#hmset key field value ... field value 给定key 设置多组键值对
hmset 1992 field1 value1 field2 value2
#hget key field 获取给定Key某一属性值
hget 1992 field1
#hmget key field field .. . 获取给定key某些属性的值
hmget 1992 field1 field2
#hgetall key 获取给定key所有键值对
hgetall 1992
#hlen key 获取给定key 键值对个数
hlen 1992
#hkeys key 获取给定key 的所有属性名
hkeys 1992
1) "name"
2) "sex"
3) "age"
4) "like"
5) "field1"
6) "field2"
7) "field3"
8) "field4"
9) "field6"
10) "field5"
#hvals key 给定key 的所有属性的值 (仅是值value部分)
hvals 1992
1) "xe6x9cxb1xe5xadx90xe6x99xb4"
2) "1"
3) "12"
4) "eat"
5) "value1"
6) "value2"
7) "value1"
8) "value2"
9) "value1"
10) "value2"
#hexists key field 判断给定key是否存在某一个field 存在返回1 不存在返回0
hexists 1992 name
(integer) 1
#hincrby key field increment 给定key某个数值型field值进行加操作,增量increment 属性必须是整形,浮点型都不行。
hincrby 1992 age 1
#如果feild 不是integer类型 ,则出现: (error) ERR hash value is not an integer
#hincrbyfloat key field increment 给定的key某个数值型field进行加操作,增量increment,可以对整形,浮点型进行操作。
hincrbyfloat 1992 age 1.2