API的理解和使用——哈希类型的命令

哈希常用的命令复习
命令 功能
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:6379> hset user:1 name kebi
(integer) 1
127.0.0.1:6379> hset user:1 age 26
(integer) 1

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

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

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

2)获取值

命令:hget key field

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

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

3)删除field

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

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

127.0.0.1:6379> hkeys user:1
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> hdel user:1 name
(integer) 1
127.0.0.1:6379> hkeys user:1
1) "age"
2) "sex"

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

127.0.0.1:6379> del user:1
(integer) 1
127.0.0.1:6379> exists user:1
(integer) 0

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

4)计算field的个数

命令:hlen key

127.0.0.1:6379> hset user:1 name kebi
(integer) 1
127.0.0.1:6379> hset user:1 age 26
(integer) 1
127.0.0.1:6379> hset user:1 sex boy
(integer) 1
127.0.0.1:6379> hlen user:1
(integer) 3

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:6379> hmget user:1 name age sex
1) "kebi"
2) "26"
3) "boy"
127.0.0.1:6379> hmset user:2 name maoxian age 25 sex boy
OK
127.0.0.1:6379> hmget user:2 name age sex
1) "maoxian"
2) "25"
3) "boy"

6)判断field是否存在

命令:hexists key field

127.0.0.1:6379> hexists user:1 name
(integer) 1
127.0.0.1:6379> hexists user:1 dorm
(integer) 0

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

7)获取所有的field

命令:hkeys key

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

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

8)获取所有value

命令:hvals key

127.0.0.1:6379> hvals user:1
1) "kebi"
2) "26"
3) "boy"
127.0.0.1:6379> hvals user:2
1) "maoxian"
2) "25"
3) "boy"

9)获取所有的field-value

命令:hgetall key

127.0.0.1:6379> hgetall user:1
1) "name"
2) "kebi"
3) "age"
4) "26"
5) "sex"
6) "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)
时间: 2024-10-05 11:24:33

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

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

列表类型的命令及对应的时间复杂度 操作 命令 功能 时间复杂度 添加 rpush key value [value ...] 向右插入 O(k),k是元素个数 lpush key value [value....] 向左插入 O(k),k是元素个数 linsert ket before|after pivot value 指定的元素前后插入 O(n),n是pivot距离列表头或尾的距离 查找 lrange key start end 根据范围查找 O(s+n),s是start偏移量,n是star

Puppet数据类型中哈希类型和布尔类型(十五)

哈希类型 puppet语言支持hash类型.它与数组类似,都是带索引的对象集合,与数组的区别在于作为索引步进限于数字,可以是任何对象.在puppet中哈希类型的"键"必须是字符串类型,但其"值"可以是任意的类型. 格式如下: {key1 => "value",key2 => "vale",...} 示例如下: [[email protected] ~]# cat 4.pp  $myname = { name1 =&

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

从API开始理解QNX -- 消息传递    http://www.openqnx.com/chinese/viewtopic.php?f=5&t=2161 1. 频道与连接    Channel, Connect        server:        ChannelId = ChannelCreate(Flags);    client:        ConnectionId = ConnectAttach(Node, Pid, Chid, Index, Flag);        N

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

有序集合常用的命令 命令 功能 zadd key score member [score member ... ] 添加元素 zcard key 计算成员个数 zscore key member 计算某个成员分数 zrank      key member zrevrank key member 计算成员排名 zrem key member [member ...] 删除成员 zincrby key increment member 增长成员分数 zrange      key start en

第二章 API的理解和使用

2.1.1全局命令 Key * 查看所有键,(慎用,会把所有键都遍历一次并列出) Dbsize 查看键总数,不会遍历所有键,只是从内置函数中读取一个数 Exists [key] 检查键是否存在 Del [key] 删除键 Expire [key] [seconds] 设置键过期时间 Type [key] 键的数据结构类型 2.1.2数据结构和内部编码 Type命令实际返回的就是当前键的数据结构类型:string字符串,hash哈希,list列表,set集合,zset有序集合,但这些只是redis

API的理解和使用——字符串的命令

字符串的命令复习表 命令 作用 set   setex   setnx   get   mset   mget   incr   decs   incrby   decrby   incrbyfloat   append   strlen   getset   setrange   getrange   字符串类型是Redis最基础的数据结构.首先键都是字符串类型. 而且其他几种数据结构都是在字符串类型基础上构建的,所以字符串类型能为其他四种数据结构的学习奠定基础. 字符串类型的值可以是字符串(

Linux基础知识——shell命令类型及命令使用帮助

加入马帮有一段时间了,看到群里面大总管要检查博客,才意识到,原来我还没有写过作业.俗话说的好,时间是把杀猪刀!!!咳咳,其实想说,马哥视频忒长,内容贼多,对于文笔不好我来说,写作业压力山大啊,有木有.嗯.嗯,长话短说,进入正题. 两个星期过去,课程进度有点掉队,这篇博文主要记录基础命令课程知识,用于梳理知识点并加深印象,为今后行走linux之路打下坚实基础的好开端,完成该博文并回顾相关知识点后,期望加快学习步伐,稳扎稳打,跟上进度,good good study,day day up! 1.  

Redis学习笔记(字符串类型常见命令操作)

Redis字符串类型常见命令操作 存取数据 存字符串类型数据: 取字符串类型数据: 当键不在的时候会返回空 如果重复向一个键中存数据,后存储的数据会覆盖前存储的数据 递增数字 当存的字符串是整数形式的时候,Redis提供一个: INCR命令    作用:让当前键值递增,并返回递增后的值 当要递增的键值不存在的时候,redis会自动存入这个键,默认值为0,并把值递增 键的命名 键名Redis没有强制要求,一般命名形式为: 对象类型:对象ID:对象属性 例如: user:1:name  使用这个来存

Spark笔记:复杂RDD的API的理解(上)

本篇接着讲解RDD的API,讲解那些不是很容易理解的API,同时本篇文章还将展示如何将外部的函数引入到RDD的API里使用,最后通过对RDD的API深入学习,我们还讲讲一些和RDD开发相关的scala语法. 1)  aggregate(zeroValue)(seqOp,combOp)  该函数的功能和reduce函数一样,也是对数据进行聚合操作,不过aggregate可以返回和原RDD不同的数据类型,使用时候还要提供初始值. 我们来看看下面的用法,代码如下: val rddInt: RDD[In