2.6哈希

hash

特点 重要api hash vs string

哈希键值结构

key field value user:1:info

常用命令

命令

说明

时间复杂度

hget key field

获取key下field的value

O(1)

hset key field value

设置key下field的value

O(1)

hdel key field

删除key下field的value

O(1)

示例

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 ronaldo
(integer) 1
127.0.0.1:6379> HGETALL user:1:info
1) "age"
2) "23"
3) "name"
4) "ronaldo"
127.0.0.1:6379> HDEL user:1:info age
(integer) 1
127.0.0.1:6379> HGETALL user:1:info
1) "name"
2) "ronaldo"

批量操作

命令

说明

时间复杂度

hmget key field1 field2 ...fieldN

批量获取key下多个field的value

O(n)

hmset key field1 value1 field2 value2 ...fieldN valueN

批量设置key下多个field value

O(n)

示例

获取操作

命令

说明

时间复杂度

hgetall key

返回hash key 对应所有的field和value

O(n)

hvals key

返回hash key 对应的所有的field的value

O(n)

hkeys key

返回hash key对应所有field

O(n)

示例

提示:很多场景下,你并不需要获取key下所有的field,所以不建议使用hgetall。推荐使用hmget

其他操作

命令

说明

时间复杂度

hexists key field

判断hash key 是否存在field

O (1)

hlen key

获取hash key field 的数量

O(1)

示例

命令

说明

时间复杂度

hsetnx key field value

设置key下field的value(如field已经存在,则失败)

O(1)

hincrby key field intCounter

key下field的value自增intCounter

O(1)

hincrbyfloat key field floatCounter

key下field的value自增floatCounter

O(1)

记录网站每个用户个人主页的访问量

hash vs string

使用redis存储用户信息的三种方案

  1. 使用String实现-V1

  2. 使用String实现-v2

  3. 使用hash实现

方案对比

方案

优点

缺点

string v1

编程简单;可以节约内存

序列化开销;设置属性要操作整个数据

string v2

直观,可以部分更新

占用内存较大,key较为分散

hash

直观,节省空间,可以部分更新

编程稍微复杂,ttl不好控制

Last updated

Was this helpful?