哈希类型也是key-value结构,key是字符串类型,其value分为两个部分:field和value
其中field部分表明属性,value表明属性对应的值python
上面的图里,user:1:info
为key,name,age,Date
为user这个key的一些属性,value是属性对应的值mysql
在hash中,能够为key添加一个新的属性和新的值redis
好比使用下面的命令向user:1:info这个key添加一个新属性viewCounter,属性对应的值为100sql
hset user:1:info viewCounter 100
key-value结构 key(field)不能相同,value能够相同
hget key field 获取hash key对应的field的value hset key field value 设置hash key对应的field的value hdel key field 删除hash key对应的field的value
例子:网站
127.0.0.1:6379> hset user:1:info age 23 (integer) 1 127.0.0.1:6379> hget user:1:info age "23" 127.0.0.1:6379> hset user:1:info name python (integer) 1 127.0.0.1:6379> hgetall user:1:info 1) "age" 2) "23" 3) "name" 4) "python" 127.0.0.1:6379> hdel user:1:info age (integer) 1 127.0.0.1:6379> hgetall user:1:info 1) "name" 2) "python" 127.0.0.1:6379>
注意事项:线程
hget命令,hset命令和hdel命令的时间复杂度为O(1)
hexists key field 判断hash key是否有field hlen key 获取hash key field的数量
例子:设计
127.0.0.1:6379> hgetall user:1:info 1) "name" 2) "python" 3) "age" 4) "23" 127.0.0.1:6379> hexists user:1:info name (integer) 1 127.0.0.1:6379> hlen user:1:info (integer) 2
注意事项:code
hexists命令和hlen命令的时间复杂度为O(1)
hmget key field1 field2 ... fieldN 批量获取hash key的一批field对应的值 hmset key field1 value1 field2 value2 ... fieldN valueN 批量设置hash key的一批field value
例子:blog
127.0.0.1:6379> hmset user:2:info age 30 name mysql page 50 OK 127.0.0.1:6379> hlen user:2:info (integer) 3 127.0.0.1:6379> hmget user:2:info age name 1) "30" 2) "mysql" 127.0.0.1:6379>
注意事项:字符串
hmget命令和hmset命令的时间复杂度为O(1)
hgetall key 返回hash key对应全部的field和value hvals key 返回hash key对应全部field的value hkeys key 返回hash key对应全部field
例子:
127.0.0.1:6379> hgetall user:2:info 1) "age" 2) "30" 3) "name" 4) "mysql" 5) "page" 6) "50" 127.0.0.1:6379> hvals user:2:info 1) "30" 2) "mysql" 3) "50" 127.0.0.1:6379> hkeys user:2:info 1) "age" 2) "name" 3) "page"
注意事项:
hgetall命令,hvals命令和hkeys命令的时间复杂度为O(1) 因为Redis的单线程的特色以及hgetall会返回全部的key和value,因此若是hash中存储的数据过多时,hgetall命令的执行速度会比较慢
hsetnx key field value 设置hash key对应field的value(如field已经存在,则失败) hincrby key field intCounter hash key对应的field的value自增intCounter hincrbyfloat key field floatCounter hincrby浮点数版
注意事项:
hsetnx命令,hincrby命令和hincrbyfloat命令的时间复杂度为O(1)
记录网站每一个用户我的主页的访问量,也可使用哈希类型
这样能够保证每一个用户的相关数据是一个总体,而使用字符串类型保存的话,则每一个用户我的主面的访问量与每一个用户的其余数据都是一个分离的状态。
记录网站每一个用户我的主页的访问量须要根据实际状况来进行设计使用
hincrby user:1:info pageview count
使用用户的id为key,把用户的相关数据进行序列化后并作为value
使用时,根据用户id获取对应的数据的字符串格式,进行反序列化后就能够获得用户相关的数据进行查询和更新操做
使用用户的id与用户对应的属性名进行拼接获得新的字符串,并作为key,用户对应属性的值作为value
这样,用户的全部信息都是分离开的,能够很方便的对用户的数据进行查询和更新,而且能够很方便的为用户添加新的属性,而不用对原来的属性有影响
使用用户id作为key,用户的其余数据都保存为hash格式,
对用户的属性进行查询,更新和添加都比较方便
保存用户相关数据的方式比较