哈希常用的命令复习
命令 功能
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. 聊聊、Zookeeper Linux 单服务

    关于上一篇 Zookeeper 的文章是介绍安装启动,这一篇介绍独立服务,也就是单台 Zookeeper 提供服务.首先登陆 Linux 系统,确保网络通畅.如果遇到找不到网卡 eth0 情况,可以先 ...

  2. IOS7开发~UIKit Dynamics

    UIKit Dynamics的中文名称:有叫UIKit动力,也有叫UIKit动力模型和UIKit动态或者动态UI,叫什么名不要紧,理解就含义就可以了. 什么是UIKit Dynamics ? UIKi ...

  3. Ubuntu -- 配置Nginx和https及frp

    使用 sudo apt -get nginx安装最方便. 要确认80端口未被占用. 上传域名的证书. 然后要配置nginx配置文件.

  4. hdu1003(C++)解法1

    #include<iostream>using namespace std;int Maxsum(int*a, int n);int main(){ int T,n,i,j,count=0 ...

  5. 刘下记录:ImageView.scaleType 属性全解析(含视频)

    0. 译序 原文:Working with the ImageView ImageView 有一个经常使用场景:ImageView 的宽度固定,高度等比例缩放.且 ImageView 在 paddin ...

  6. 【温故知新】——原生js中常用的四种循环方式

    一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0   网页输出“欢迎下次光临” 在网页中弹出框输入1   网页输出“查询中……” 在 ...

  7. bbed初体验

    bbed能够直接查看或改动数据文件.听起来非常强大,以下体验一下,安装方法网上一搜一大把,我的环境是centos+10G的 bbed參考文档:http://pan.baidu.com/s/1hqCC6 ...

  8. 应用设置Setting的实现

    有非常多应用都在iOS设置中有相关的设置.例如以下图:     通过这个设置能够方便的相应用的一些主要的设置进行更改. 要完整的实现这个设置功能,有下面几方面问题须要解决: 1)设置的编写(实现设置的 ...

  9. css:选择器

    http://blog.csdn.net/xyz121323693/article/details/8516297 交集选择器 并集选择器 后代选择器 子代选择器 http://www.cnblogs ...

  10. 我的IT之路

    在写这篇文章的时候内心是无比激动,因为这辈子是注定和IT打交道了. 都说大学时光是美好的,但却只有到了大四才知道时间是短暂的,也许和许多人一样,我的大学主要时光是在游戏中度过,1000多把的寒冰算是同 ...