哈希常用的命令复习
命令 功能
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. Unity -- 材质-Material和预设体-Prefabs

    材质(Materials)用来把网格(Mesh)或粒子渲染器(Particle Renderers)贴到游戏对象上.他们在定义对象怎么被显示发挥重要组成部分.材质包括用于呈现网状或颗粒着色器的参考,所 ...

  2. [置顶] django快速获取项目所有的URL

    django快速获取项目所有的URL django1.10快速获取项目所有的URL列表,可以用于权限控制 函数如下: import re def get_url(urllist , parent='' ...

  3. django发送邮件配置

    配置如下,settings中配置: EMAIL_HOST = 'smtp.163.com' EMAIL_PORT = '25' EMAIL_HOST_USER = 'contact108@163.co ...

  4. kali渗透测试基础

    一侦查 研究如何收集有关目标的情报,比如开发那些端口用来通信,托管在哪里,提供给客户的服务类型等. 交付内容应该包括需要攻击的所有目标资产清单,与那些资产关联的应用,使用的服务以及可能的资产所有者. ...

  5. 【GLSL教程】(三)在OpenGL中向shader传递信息 【转】

    http://blog.csdn.net/racehorse/article/details/6634830 引言 一个OpenGL程序可以用多种方式和shader通信.注意这种通信是单向的,因为sh ...

  6. SpringMVC项目中web.xml中的节点载入顺序问题

    SpringMVC项目中web.xml中的节点载入顺序问题,之前以为web.xml中就是一些配置信息,和节点的顺序没有关系.后来才发现初始化时的载入顺序是和节点的顺序相关的. 完整的web.xml文件 ...

  7. 聚合数据 iOS 项目开发实战:条码查询器

    记录下,聚合数据 iOS 项目开发实战:条码查询器:视频地址:http://www.jikexueyuan.com/course/324.html 条码查询API:https://www.juhe.c ...

  8. tomcat启动出现异常 Error filterStart

    tomcat启动中出现 Error filterStart异常, 没有任何堆栈信息,如下: SEVERE: Error filterStart Jul 6, 2012 3:39:05 PM org.a ...

  9. Hbase Basic

    启动:start-hbase.sh 停止:stop-hbase.sh 进入shell:hbase shell 状态:status 创建表:create 'tableName', 'colFam1' 查 ...

  10. DML过程中记录错误日志

    当你插入几百万数据时,由于有几条脏数据而导致插入失败,是不是很恼火.10g R2之后有个新功能.将插入过程中失败的记录插入到还有一张表中. SQL> drop table test purge; ...