Redis中的hash,并不是key------value的那一套机制,而是这个key对应的value本身是hash结构
value(field--value)

针对于hash的命令
1.hset、hget
hset key field value [field1 value1..]
在key对应的hash中在键为field的值设置为value(可以一次性设置多个)返回设置成功的对数
hget key filed
获取key对应的hash中键为field的值
2.hexists
hexists key field
查找hash中是否有某field 成功return 1 失败0
3.hdel
hdel key field [field1....]
删除hash key的field,返回删除的字段个数
4.hkeys、hvals
hkeys key
获取hash key的所有field
hvals key
获取hash key中的所有value
5.hgetall、hmget
hgetall=hkeys+hvals
hgetall key
以field1 value1 field2 value2 返回
hmget 一次性查询多个field的value
hmget key f1 f2 f3
6.hlen
获取key的键值对个数
7.hsetnx
和setnx同理,设置value,无设置,有不动
hsetnx key field value
8.hincrby
加减value中的整数 hincrbyfloat加减小数
hash编码方式
压缩列表和hashtable
如果hash元素比较少就会用ziplist表示,为了节省空间,如果元素多了,读写效率会显著降低,此时会用hashtable表示
value如果都很短可以用ziplist,如果某个value太长了就会用hashtable
hash的应用
作为缓存
虽然我们说过string也可以作为缓存,但存储一些结构性的数据,比如用户信息,hash更合适(string的Json也可以)
但是,hash类型是稀疏的,关系型数据库是完全结构化的