您的位置:首页 > 数据库 > Redis

redis 学习手册之哈希表数据类型hashes操作命令

2015-12-16 11:23 891 查看

哈希 hashes

概述

Hashes类型看成具有String Key和String Value的map容器。所以该类型非常适合于存储值对象的信息。如Id、Username、Password和Age等。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对

命令

命令
时间
命令描述
返回值
HSET
key

field value
O(1)
设置hash指定的Key设定Field/Value对,如果Key不存在,该命令将创建新Key以参数中的Field/Value对,如果参数中的Field在该Key中已经存在,则用新值覆盖其原有值。 
1表示新的Field被设置了新值,0表示Field已经存在,用新值覆盖原有值。 
HSETNX
key

field value
O(1)
只有当参数中的Key或Field不存在的情况下,为指定的Key设定Field/Value对,否则该命令不会进行任何操作。 
1表示新的Field被设置了新值,0表示Key或Field已经存在,该命令没有进行任何操作。
HGET 

key field 
O(1) 
返回指定Key中指定Field的关联值。
返回参数中Field的关联值,如果参数中的Key或Field不存,返回nil。
HMGET
key

field [field ...] 
O(N) 
时间复杂度中的N表示请求的Field数量。获取和参数中指定Fields关联的一组Values。如果请求的Field不存在,其值返回nil。如果Key不存在,该命令将其视为空Hash,因此返回一组nil。
返回和请求Fields关联的一组Values,其返回顺序等同于Fields的请求顺序。
HMSET 

key

field value

[field value ...]
O(N)
时间复杂度中的N表示被设置的Field数量。逐对依次设置参数中给出的Field/Value对。如果其中某个Field已经存在,则用新值覆盖原有值。如果Key不存在,则创建新Key,同时设定参数中的Field/Value。  
HEXISTS
key field 
O(1) 
判断指定Key中的指定Field是否存在。
1表示存在,0表示参数中的Field或Key不存在。
HLEN 

key 
O(1)
获取该Key所包含的Field的数量。
返回Key包含的Field数量,如果Key不存在,返回0。
HDEL 

key

field [field ...] 
O(N)
时间复杂度中的N表示参数中待删除的字段数量。从指定Key的Hashes Value中删除参数中指定的多个字段,如果不存在的字段将被忽略。如果Key不存在,则将其视为空Hashes,并返回0.
实际删除的Field数量。
HINCRBY
key field increment 
O(1)
增加指定Key中指定Field关联的Value的值。如果Key或Field不存在,该命令将会创建一个新Key或新Field,并将其关联的Value初始化为0,若存在再指定数字增加的操作。该命令支持的数字是64位有符号整型,即increment可以负数。 
返回运算后的值。
HINCRBYFLOAT
key field increment 
O(1)
增加指定Key中指定Field关联的Value的值。如果Key或Field不存在,该命令将会创建一个新Key或新Field,并将其关联的Value初始化为0,若存在增加浮点的值。该命令支持的数字是64位有符号浮点数,即increment可以负数。 
返回运算后的值。
HGETALL
key
O(N) 
时间复杂度中的N表示Key包含的Field数量。获取该键包含的所有Field/Value。其返回格式为一个Field、一个Value,并以此类推。
Field/Value的列表。
HKEYS
key 
O(N)
时间复杂度中的N表示Key包含的Field数量。返回指定Key的所有Fields名。
Field的列表。
HVALS
key 
O(N)
时间复杂度中的N表示Key包含的Field数量。返回指定Key的所有Values名。 
Value的列表。 
 

实例

#链接redis数据库

[root@datahubdb1 bin]# ./redis-cli -a daphne

127.0.0.1:6379>

#hset、hget、hlen、hexists、hdel

#设置key hash1 fieldname value zheyun.su

127.0.0.1:6379> hset hash1 name zhenyun.su

(integer) 1

127.0.0.1:6379> hset hash1 age  30

(integer) 1

127.0.0.1:6379> hset hash1 hirthday  2015-12-16

(integer) 1

#按key hash1 field age取 value

127.0.0.1:6379> hget hash1 age

"30"

127.0.0.1:6379> hget hash1 hirthday

"2015-12-16"

127.0.0.1:6379> hget hash1 name

"zhenyun.su"

#按key hash1 field个数

127.0.0.1:6379> hlen hash1

(integer) 3

#判断key hash1 fieldage是否存在

127.0.0.1:6379> hexists hash1 age

(integer) 1

#若key hash1 field id不存在时,新增id的field栏位

127.0.0.1:6379> hsetnx hash1 id 1

(integer) 1

127.0.0.1:6379> hget hash1 id

"1"

#删除key hash1 fieldid

127.0.0.1:6379> hdel hash1 id

(integer) 1

#hmset、hmget

#设置key hash1多个 field name age hirthday

127.0.0.1:6379> hmset hash1 name zhenyun.suage 30 hirthday 2015-12-16

OK

#取key hash1多个 field name age hirthday的值

127.0.0.1:6379> hmget hash1 name agehirthday

1) "zhenyun.su"

2) "30"

3) "2015-12-16"

127.0.0.1:6379>

#hgetall、hkeys、hvals

#取key hash1所有的filed和value

127.0.0.1:6379> hgetall hash1

1) "name"

2) "zhenyun.su"

3) "age"

4) "30"

5) "hirthday"

6) "2015-12-16"

#取key hash1所有的filed

127.0.0.1:6379> hkeys hash1

1) "name"

2) "age"

3) "hirthday"

#取key hash1所有的value

127.0.0.1:6379> hvals hash1

1) "zhenyun.su"

2) "30"

3) "2015-12-16"

127.0.0.1:6379>

#hincrby、hincrbyfloat

#在key hash1 filed age的值加5

127.0.0.1:6379> hincrby hash1 age 5

(integer) 35

127.0.0.1:6379> hget hash1 age

"35"

127.0.0.1:6379> hsetnx hash1 salary 20000.0

(integer) 1

127.0.0.1:6379> hincrby hash1 salary10000.5

(error) ERR value is not an integer or out ofrange

#在key hash1 filed salary的值加10000.5

127.0.0.1:6379> hincrbyfloat hash1 salary10000.5

"30000.5"

127.0.0.1:6379>

 

 您觉的有所收获,请保持持续的关注。

您发现博客中有的纰漏,请指正。

您有更好的建议或更好的实现方式,请赐教。(zhenyun.su@qq.com)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息