Redis哈希类型数据结构的操作

哈希类型中的映射关系叫作field-value

1.设置值

1)hset

hset key field value

  • 新哈希字段成功则返回1
  • 哈希表中filed已存在且旧值已被新值覆盖则返回0
127.0.0.1:6379> hset myhash key1 name
(integer) 1

127.0.0.1:6379> hset myhash key1 user_name
(integer) 0

127.0.0.1:6379> hget myhash key1
"user_name"

2)hsetnx

hsetnx key field value

  • 为哈希表中不存在的字段赋值
  • key不存在,则进行创建,返回1
  • key存在则不做任何操作,返回0
127.0.0.1:6379> hsetnx myhash key1 user_name
(integer) 0
127.0.0.1:6379> hsetnx myhash key3 class_info
(integer) 1

3)hmset

hmset key field value [field value …]

  • 批量设置多个field-value
hmset myhash2 key1 date key2 age key3 num
OK

2.获取值

1)hget

hget key field

127.0.0.1:6379> hget myhash key1
"name"

2)hmget

hmget key field [field …]

  • 批量获取field-value
127.0.0.1:6379> hmget myhash key1 key2
1) "name"
2) "addr"

3)hgetall

hgetall key

  • 返回所有filed-value值,返回值的长度是哈希表大小的两倍
  • 如果哈希元素个数比较多,会存在阻塞redis的可能
  • 比较消耗CPU
127.0.0.1:6379> hgetall myhash
1) "key1"
2) "name"
3) "key2"
4) "addr"

4)hvals

hvals key

  • 获取所有value
127.0.0.1:6379> hvals myhash
1) "name"
2) "addr

5)hkeys

hkeys key

  • 返回指定哈希键所有的field
127.0.0.1:6379> hkeys myhash
1) "key1"
2) "key2"

3.计算

1)hlen

hlen key

  • 计算field个数
127.0.0.1:6379> hlen myhash
(integer) 2

2)hstrlen

hstrlen key field

  • 计算value的字符串长度
127.0.0.1:6379> hstrlen myhash key1
(integer) 9

4.判断field是否存在

hexists key field

  • 存在返回1,不存在返回0
127.0.0.1:6379> hexists myhash key1
(integer) 1
127.0.0.1:6379> hexists myhash key3
(integer) 0

5.设置增量
hincrby key field
hincrbyfloat key field

6.哈希类型命令时间复杂度

命令 时间复杂度
hset O(1)
hget O(1)
hdel O(k),field总数
hlen O(1)
hgetall O(n),field总数
hmget O(k),field总数
hmset O(k),field总数
hexists O(1)
hkeys O(n),field总数
hvals O(n),field总数
hsetnx O(1)
hincrby O(1)
hincrbyfloat O(1)
hstrlen O(1)

猜你喜欢

转载自blog.csdn.net/weixin_44375561/article/details/121824969