四、Redis哈希(Hash)类型参考记录

作者: 温新

分类: 【Redis】

阅读: 2187

时间: 2020-08-31 13:17:23

Redis是采用字典结构以键值对的形式存储数据的。哈希类型的键值也是一种字典结构,储存了字段和字段值的映射,字段值能是字符串,不支持其他数据类型。

哈希类型不能嵌套其他数据类型。

一个哈希类型键可以包含至多232-1个字段。

哈希类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性,字段值则存储属性值。如下案例:存储ID为1的文章对象,分别使用作者、时间、内容这3个字段来存储文章的信息。

img

基本命令 取值/赋值

hset 将哈希表中key中的field的值设置为value

语法:hset key field value

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># hset设置单个值</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hset car price <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">10000</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hset car name BMW</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 字段已存在,执行更新操作,返回0</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hset car name BMWM</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 设置多个field-value </span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hset article author ziruchu time <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2020</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span></span>

若哈希表不存在,则创建;若字段已存在,则新值覆盖旧值。

hset不区分插入还是更新操作,当执行插入操作时(字段不存在),hset命令返回1;当执行更新操作时(字段存在),hset命令返回0。键不存在时,hset会自动创建该键。

hmset 将多个field-value对设置到哈希表key中

语法:hmset key field1 value1 [field2 value2 ...]

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hmset <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">cat</span> color white age <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">OK</span>

hsetnx field字段不存在时,设置哈希表字段的值

语法:hsetnx key field value

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hsetnx article1 time <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2020</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hsetnx article1 author <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'xiao bai'</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span>

hget 获取一个存储在哈希表中指定字段的值

语法:hget key filed

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hget <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">cat</span> color</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"white"</span></span>

hmget 获取哈希表指定字段的值

语法:hmget key field [field1,field2 ...]

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hmget <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">cat</span> color age</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"white"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"2</span></span>

hgetall 获取指定哈希表指定key的所有字段和值

语法:hgetall key

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hgetall <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">cat</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"color"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"white"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"age"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">4</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"2"</span></span>

其他命令

hexists 判断一个字段是否存在

语法:hexists key field

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hexists <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">cat</span> age</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hexists <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">cat</span> a</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span></span>

hexists判断一个字段是否存在,存在返回1,不存在返回0

hdel 删除一个或多个字段

语法:hdel key field1 [field2 ...]

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hdel car name</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hdel <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">cat</span> color age</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span></span>

返回被删除字段的个数

hkeys 获取所有字段

语法:hkeys key

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hkeys article</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"author"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"time"</span></span>

hvals 获取所有值

语法:hvals key

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hvals article</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"ziruchu"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"2020"</span></span>

hlen 获取字段数量

语法:hlen key

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hlen article</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span></span>

hincrby 为哈希表key中指定字段的整数值加上增量值

语法:hincrby key field 增量值

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hmset number id <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span> total <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">OK</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hincrby number id <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">10</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">11</span></span>

hincrbyfloat 为哈希表key中指定字段的浮点数值加上增量值

语法:hincrbyfloat key field 增量值

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hincrbyfloat number total <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">10</span>.34</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"13.34"</span></span>

hscan 迭代哈希表中的键值对

语法:hsan key cursor [match pattern] [count count]

参数:

  • cursor 游标
  • pattern 匹配模式
  • count 指定从数据集返回多少元素,默认10
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> hscan article <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span> match <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"a*"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"0"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span>) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"author"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">   <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"ziruchu"</span></span>

我是小白,期待和优秀的你一起同行!

小白

2020年08月31日

请登录后再评论