哈希类型是指健值自己又是一个键值对结构redis
基本命令:
hset key field value 设置值编程
hget(获取),hdel(删除),hlen(计算field个数),hmget(批量设置),hexists(是否存在),hkeys(获取全部的field),hvals(获取全部的value),hstrlen(计算长度)编码
hincrby,hincrbyfloat 跟incrby同样,可是它们做用域是fieldspa
内部编码:blog
1.ziplist(压缩列表),当哈希类型元素小于hash-max-ziplist-entries配置(默认521个),同时全部值都小于hash-max-ziplist-value配置(默认64字节),redis会使用ziplist做为内部实行,全部在节约内存方面比hashtable优秀ip
2.hashtable(哈希表),当哈希类型没法知足ziplist条件时候,redis会使用hashtable做为哈希的内部实现内存
,所以此时ziplist读写效率降低,而hashtable读写时间复杂度o(1)作用域
三种方案的实现方法和优缺点:字符串
1)原生字符串类型,每一个属性一个键get
hset user:1 name xiaoming
优势:简单直观,每一个属性都支持更新操做
缺点:占用过多的健,内存占用量大,内聚性差,不会在生产环境使用
2)序列化字符串类型,将用户信息序列化后用一个键保存
hset user:1 serialize(userinfo)
优势:简化编程
缺点:序列化和反序列化有必定的开销,同时每次更新属性都须要把所有数据取出进行反徐丽华,更新后序列化到redis
3)哈希类型:每一个用户属性使用一对field-value,可是只用一个键保存
hset user:1 name xiaoming age 12
优势:简单直观,能够减小内存的使用
缺点:须要控制内部编码ziplist和hashtable转换,hashtable会消耗更多的内存