哈希常用的命令复习
命令 功能
hset key field value 设置哈希值
hsetnx 设置哈希值,field或键必须不存在
hget 获取某个file对应的值
hdel 删除一个或多个field-value
hlen 计算field的个数
hmset 批量设置field-value
hmget 批量获取field-value
hexists 判断某个field是否存在
hkeys 获取所有的field
hvals 获取所有的value
hgetall 获取所有的field-value
hincrby 自增整数
hincrbyfloat 自增浮点数
hstrlen  计算value字符串的长度

几乎所有的编程语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组。

在Redis中,哈希类型是指键值本身又是一个键值对结构,形如value={{field1,value1},...{fieldN,valueN}},

Redis键值对和哈希类型二者的关系可以用下图来表示:

注意:哈希类型中的映射关系叫做field-value,注意这里的value是指field对应的值,不是键对应的值,一定要注意value在不同上下文的作用。

下面介绍一些哈希常用的命令。

1)设置值

命令:hset key field value

127.0.0.1:> hset user: name kebi
(integer)
127.0.0.1:> hset user: age
(integer)

如果设置成功会返回1,反之会返回0。

此外Redis提供了hsetnx命令,它们的关系就像set和setnx命令一样,只不过作用域由键变为field。

127.0.0.1:> hexists user: name
(integer) #user: name存在
127.0.0.1:> hsetnx user: name xiaoniao
(integer) #没有设置成功
127.0.0.1:> hget user: name
"kebi"
127.0.0.1:> hsetnx user: name xiaoniao
(integer)
127.0.0.1:> hget user: name
"xiaoniao" #field不存在才行

2)获取值

命令:hget key field

127.0.0.1:> hget user: name
"kebi"
127.0.0.1:> hget user: dorm
(nil)

如果键的field不存在或者或键本身就不存在,会返回nil。

3)删除field

命令:hdel key field [field ...]

hdel会删除一个或多个field,返回结果为成功删除field的个数:

127.0.0.1:> hkeys user:
) "name"
) "age"
) "sex"
127.0.0.1:> hdel user: name
(integer)
127.0.0.1:> hkeys user:
) "age"
) "sex"

注意如果要删除键,还是使用del:

127.0.0.1:> del user:
(integer)
127.0.0.1:> exists user:
(integer)

并没有说能单独删除哈希的value,因为没有意义。

4)计算field的个数

命令:hlen key

127.0.0.1:> hset user: name kebi
(integer)
127.0.0.1:> hset user: age
(integer)
127.0.0.1:> hset user: sex boy
(integer)
127.0.0.1:> hlen user:
(integer)

5)批量设置或获取field-value

命令:

hmget key field [field ...]
hmset key field value [field value ...]

hmset和hmget分别是批量设置和获取field-value,hmset需要的参数是key和多对field-value,hmget需要的参数是key和多个field:

127.0.0.1:> hmget user: name age sex
) "kebi"
) ""
) "boy"
127.0.0.1:> hmset user: name maoxian age sex boy
OK
127.0.0.1:> hmget user: name age sex
) "maoxian"
) ""
) "boy"

6)判断field是否存在

命令:hexists key field

127.0.0.1:> hexists user: name
(integer)
127.0.0.1:> hexists user: dorm
(integer)

如果field存在,返回结果为1,如果不存在返回0.

7)获取所有的field

命令:hkeys key

hkeys命令应该叫hfields更为恰当,它返回指定哈希键所有的field:

127.0.0.1:> keys *  #返回所有的键
) "user:2"
) "user:1"
127.0.0.1:> hkeys user: #返回键user:1所有的field
) "name"
) "age"
) "sex"
127.0.0.1:> hkeys user:
) "name"
) "age"
) "sex"

8)获取所有value

命令:hvals key

127.0.0.1:> hvals user:
) "kebi"
) ""
) "boy"
127.0.0.1:> hvals user:
) "maoxian"
) ""
) "boy"

9)获取所有的field-value

命令:hgetall key

127.0.0.1:> hgetall user:
) "name"
) "kebi"
) "age"
) ""
) "sex"
) "boy"

注意:在使用hgetall时,如果哈希元素个数比较多,会存在阻塞Redis的可能。

  如果只需要获取部分field,可以使用hmget,如果一定要回去全部的field-value,可以使用hscan命令,该命令会渐进式遍历哈希类型。

10)hincrby hincrbyfloat

命令:

hincrby key field
hincrbyfloat key field

hincrby和hincrbyfloat命令一样,但是它们的作用域是field。

11)计算value的字符长度(需要Redis3.2版本以上)

命令:hstrlen key field

下面提供一张哈希类型命令的时间复杂度,可以根据自身的需求选择合适的命令。

哈希类型命令的时间复杂度
命令                             时间复杂度
hset key field value O(1)
hget key field O(1)
hdel key field [field ...] O(k),k是field个数
hlen key O(1)
hgetall key O(n),n是field总数
hmget field [field ...] O(k),k是field个数
hmset field value [field value...] O(k),k是field个数
hexists key field O(1)
hkeys key O(n),n是field总数
hvals key O(n),n是field总数
hsetnx key field value O(1)
hincrby key field increment O(1)
hincrbyfloat key field increment  O(1)
hstrlen key field O(1)

API的理解和使用——哈希类型的命令的更多相关文章

  1. 第二百九十六节,python操作redis缓存-Hash哈希类型,可以理解为字典类型

    第二百九十六节,python操作redis缓存-Hash哈希类型,可以理解为字典类型 Hash操作,redis中Hash在内存中的存储格式如下图: hset(name, key, value)name ...

  2. API的理解和使用——列表类型的命令

    列表类型的命令及对应的时间复杂度 操作 命令 功能 时间复杂度 添加 rpush key value [value ...] 向右插入 O(k),k是元素个数 lpush key value [val ...

  3. redis 学习(4)-- 哈希类型

    redis 学习(4)-- 哈希类型 介绍 redis 中哈希键值结构: 可以看出:哈希键值包括 key,field,value 这三部分,即键,属性,值这三部分.可以这样来表示: key, (fie ...

  4. qnx:从API开始理解QNX -- 消息传递

    从API开始理解QNX -- 消息传递    http://www.openqnx.com/chinese/viewtopic.php?f=5&t=2161 1. 频道与连接    Chann ...

  5. C++ : 从栈和堆来理解C#中的值类型和引用类型

    C++中并没有值类型和引用类型之说,标准变量或者自定义对象的存取默认是没有区别的.但如果深入地来看,就要了解C++中,管理数据的两大内存区域:栈和堆. 栈(stack)是类似于一个先进后出的抽屉.它的 ...

  6. 【redis 学习系列】API的理解与使用(二)

    3.哈希 几乎所有的语言都支持了哈希(hash)类型.在Redis中,哈希类型是指键值本身又是一个键值对结构,形如:value = {{field, value} ... {field, value} ...

  7. redis:hash哈希类型的操作

    1. hash哈希类型的操作 1.1. hset key field value 语法:hset key field value 作用:把key中field域的值设为value 注:如果没有field ...

  8. API的理解和使用——键管理

    核心知识点: 1.键重命名:rename和renamenx,使用renamenx时newkey必须不存在,重命名后会使用del删除原来的键,如果值比较大也会会造成阻塞. 2.随机返回一个值:rando ...

  9. API的理解和使用——有序集合

    有序集合常用的命令 命令 功能 zadd key score member [score member ... ] 添加元素 zcard key 计算成员个数 zscore key member 计算 ...

随机推荐

  1. 误删docker0网桥之后怎么办呢?

    今天,在搭建k8s node节点环境的时候,好巧不巧,执行了如下命令: [root@hxin221 ~]# ifconfig docker0 down &>/dev/null [root ...

  2. 在html里网页中嵌入优酷的视频

    <html> <embed src="http://player.youku.com/player.php/sid/XMjAzOTk4NjI4/v.swf" qu ...

  3. hdu1070(C++)

    本题在于求单价,即为每一天(每200升牛奶)要多少钱,注意超过1000的当做5天,不足200的忽略 #include<iostream> #include<string> us ...

  4. mysql count(*) 和count(1)区别

    count *更快, 不要加where,否则同count(1)效率相同 sql语句对大小写不敏感,关键字一般大写,其他小写, count(*)不加where,mysql会直接返回总条数,因为mysql ...

  5. 关于embedding-深度学习基本操作 【Word2vec, Item2vec,graph embedding】

    https://zhuanlan.zhihu.com/p/26306795 https://arxiv.org/pdf/1411.2738.pdf https://zhuanlan.zhihu.com ...

  6. Jenkins安装war版本

    Jenkins的war包安装很简单: 下载jenkins的war包地址:https://jenkins.io/download/ 选择对应的版本 然后放入tomcat启动就好,其他根据提示来就好,比较 ...

  7. shell中sed命令

    sed -i '/cd ${LDIR_DEST}\/webextend\/pc && ln -s \/hard\/www_winclient\/bboxpc.exe ./a\ \tcd ...

  8. vue相关知识

    1.看https://www.bilibili.com/video/av27969216/?p=54,看他的就够了 https://juejin.im/post/5a5bc8c36fb9a01ca26 ...

  9. 【Python】列表~深入篇

    列表是一列按特定顺序排列的元素组成. 在Python中,用方括号[]来表示列表 下面是一个语言列表 Language = ['Chinese','English','Franch','Deutsch' ...

  10. GroupBox与Panel控件

    1.GroupBox控件常常用于逻辑地组合一组控件,如RadioButton 及 CheckBox控件,显示一个框架,其上有一个标题. 2.Panel 可以包含多个控件,以便将这些控件编为一组,以便方 ...