写点什么

带你掌握 Redis 数据类型:string 和 Hash

  • 2022 年 3 月 04 日
  • 本文字数:3585 字

    阅读完需:约 12 分钟

摘要:Redis 中有五大数据类型,分别是 String、List、Set、Hash 和 Zset。


本文分享自华为云社区《Redis的string类型常用命令解析》,作者:灰小猿 。


先问大家一个问题:你知道 Java 的数据类型有哪些吗?很多小伙伴肯定会直接想到 int、byte、string 等等~~~但是如果这样回答就错啦!


Java 中的数据类型包括:基本数据类型和引用数据类型,其中基本数据类型包括:byte、short、int、long、double、float、char、boolean 八种,而引用数据类型则是另外三种,分别是类、接口和数组!注意是没有 string 类型的,这可是面试的一个坑哈!


而在 Redis 中也是有数据类型的,和 Java 中有所不同,在 Redis 中有五大数据类型,分别是 String、List、Set、Hash 和 Zset。而这五种数据类型中的每一个,都对应着很多不同的使用场景。接下来我们就先来学习一下在 Redis 中操作 string 和 Hash 字符串的命令有哪些?

String 类型命令操作

String 类型是在 Redis 中最常用的数据类型,它也是很多程序员在日常开发中最常使用甚至只会用的数据类型,这也就导致很多人在使用 Redis 的时候,就只知道使用 string 类型,而忽视了其他数据类型的重要性。所以我也希望大家在学习完这篇文章之后,对 Redis 中的数据类型有一个新的认识,不要只使用 String 类型进行 Redis 的操作啦!


注意:在 Redis 的客户端中进行操作之前,一定要保证 Redis 的服务器界面处于开启状态,否则会出现客户端拒绝访问或打不开的情况哈!

设置指定 key 的值

Redis 中给 string 类型的数据设置指定 key 的方法就是最基本的设置 key-value 的方法,

语法如下:

SET key value
key为索引 value为对应的值
复制代码

例如我们要设置索引为 k3,值为 v3 的键值对数据

127.0.0.1:6379> SET k3 v3OK
复制代码

返回值为 ok,则说明设置成功!


获取指定 key 的值

如果我们已经在 Redis 中设置了数据,那么我们可以通过该数据的 key 来获取它,语法格式如下:

GET key
key为要获取的值对应的索引
复制代码

例如我们获取刚才输入的索引为 k3,值为 v3 的数据,如果该索引存在,那么将会返回对应的值,如果不存在就会返回(nil)也就是 null 的意思。

127.0.0.1:6379> GET k3"v3"127.0.0.1:6379> GET k4(nil)
复制代码

返回 key 中字符串值的子串

这个命令的作用是获取 Redis 中已经存在的字符串的子串,同时我们可以指定一个下标索引,指定要获取哪一段字符。命令的格式如下:

GETRANGE key start end
key为字符串的索引 start为截取的起始下标 end为截取的终止下标
复制代码

比如我们截取索引为“mykey”,值为“huixiaoyuan”的数据的子串,

127.0.0.1:6379> GETRANGE mykey 2 5"ixia"127.0.0.1:6379> GETRANGE mykey 2 -1"ixiaoyuan"127.0.0.1:6379> GETRANGE mykey 1 100"uixiaoyuan"
复制代码

讲解一下上面的代码,因为字符串的起始下标是 0,所以第 2 个对应的字符是“i”,如果想要截取字符串从某一个字符到最后部分的子串,那么可以直接将最后一个参数设置为-1.


如果你设置的获取子串的范围比较大,已经超出了字符串原本的长度,那么只会返回到字符串的最后一个字符!

获取多个给定 key 的值

与 GET 命令不同,GET 命令只能获取一个 key 对应的值,而这个命令可以用于获取多个 key 对应的值,格式如下:

MGET key1 [key2...]
在MGET的后面可以追加多个索引,以空格分开
复制代码

如我们来获取一下 mykey、mykey1、mykey2 分别对应的值,

127.0.0.1:6379> MGET mykey mykey1 mykey21) "huixiaoyuan"2) "value1"3) "value2"
复制代码

返回 key 所对应的字符串的长度

这个命令的作用是获取到当前索引对应的字符串的长度,格式如下:

STRLEN key
key为字符串对应的索引
127.0.0.1:6379> STRLEN mykey(integer) 11
复制代码

设置一个或多个键值对

我们知道 SET 命令的作用是设置一个键值对,但是如果有多个键值对同时设置呢?这个时候就可以使用这个命令了,格式如下:

MSET key1 value1 [key2 value2 ...]
key1 value1为要设置的第一个键值对,之后的以空格分隔
复制代码

如下我们设置同时设置三个键值对

127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3OK
复制代码

和上面这个命令相对的还有一个,该命令仅能在 key 不存在的情况下才能设置,否则所有的 key-value 都将会赋值失败,格式如下:

MSETNX key1 value1 [key2 value2 ...]
key1 value1为要设置的第一个键值对,之后的以空格分隔
复制代码

如我们给已经存在的 k4 设置值,那么返回 0,说明设置失败,如果设置成功,则会返回 1

127.0.0.1:6379> MSETNX k1 v1 k4 v4(integer) 0127.0.0.1:6379> MSETNX k4 v4 k5 v5(integer) 1
复制代码

将 key 中所存储的数值加一

这个命令可以将我们存储的字符的值加 1,之后返回相加后的结果,但是如果该 key 对应的字符不是一个数的话,就会返回一个错误信息,格式如下:

INCR key
key为要加1的数对应的索引
复制代码

如下我们给刚才设置的 k8 加 1,那么就会报错,重新设置一个数值的键值对,再进行加 1,就可以返回对应的数据

127.0.0.1:6379> INCR k8(error) ERR value is not an integer or out of range127.0.0.1:6379> SET num1 10OK127.0.0.1:6379> INCR num1(integer) 11
复制代码

与 INCR 命令对应的还有一个 INCRBY 该命令可以给指定的 key 对应的数据加上指定的增量,格式如下:

INCRBY key increment
key为索引 increment为要增加的值
127.0.0.1:6379> INCRBY num1 5(integer) 16
复制代码

将 key 中所存储的数值减一

既然存在增加的操作,那么对应着也就是存在减少的操作,格式如下:

DECR key
key为要加1的数对应的索引
复制代码

上一步我们将 num1 对应的数值加 5 后得到 16,现在我们对其进行减一操作。

127.0.0.1:6379> DECR num1(integer) 15
复制代码

与这个命令对应的还有减指定的数据的命令,格式如下:

DECRBY key increment
key为索引 decrement为要增加的值
127.0.0.1:6379> DECRBY num1 2(integer) 13
复制代码

字符串追加

如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。返回的是追加后的长度,格式如下:

APPEND key value
key为索引 value为要追加的字符串
复制代码

如我们在 mykey1-value1 的后面追加“hello”

127.0.0.1:6379> APPEND mykey1 hello(integer) 11127.0.0.1:6379> GET mykey1"value1hello"
复制代码

Hash 类型

Hash 类型是一个 String 类型的 field(字段)和 value(值)的映射表,它的作用是可以用来存储我们定义的数据对象,所以简单来说它是一个 key 下面存储了多个 key-value 的情况,给大家简单的话一个 Hash 的结构图:

接下来我们来简单讲一下在 Redis 中对于 Hash 这种数据类型,常用的几个命令,

设置一个 Hash 数据

设置 Hash 数据所使用的命令不是 SET,而是 HMSET,你可以理解为 H 代表 Hash 的意思,M 代表 Map 的意思,该命令的格式如下:


HMSET key fieId1 value1 [fieId2 value2…]

  • key 为这个 Hash 数据对应的唯一性索引

  • field 为下面存储的一个键值对的键

  • value 为该键对应的值


如我们设置 key 为“myhash”,里面存储的 field 分别为 name-huixiaoyuan、sex-nan、age-3 的三个键值对

127.0.0.1:6379> HMSET myhash name huixiaoyuan sex nan age 3OK
复制代码

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

查看指定哈希表中所有的字段和值的命令是 HGETALL,作用是取出该 hash 中所有的数据,格式如下


HGETALL key

  • 其中 key 为对应着这个 Hash 数据的索引

如我们查看刚才设置的 hash 数据

127.0.0.1:6379> HGETALL myhash1) "name"2) "huixiaoyuan"3) "sex"4) "nan"5) "age"6) "3"
复制代码

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

上一个命令是获取所有的字段,那么现在这个命令是只获取指定哈希表中指定字段的值,命令的格式如下:

HGET key field

  • key 哈希表的索引

  • field 获取的值对应的字段

如我们获取上面的哈希表中字段为 name 对应的值

127.0.0.1:6379> HGET myhash name"huixiaoyuan"
复制代码

删除一个或多个哈希表字段

删除一个或多个哈希表字段的命令是 HDEL,该命令可以删除指定哈希表中指定的字段,以及其对应的值,格式如下:

HDEL key field1 [field2…]

  • key 为指定的哈希表的索引

  • field 为要删除的值对应的字段,如果要删除多个就以空格分开

如我们要删除索引为“myhash”的哈希表中值为“3”,对应字段为“age”的字段和值为“nan”,对应字段为“sex”的两个字段。

127.0.0.1:6379> HGET myhash name"huixiaoyuan"127.0.0.1:6379> HDEL myhash age sex(integer) 2127.0.0.1:6379> HGETALL myhash1) "name"2) "huixiaoyuan"
复制代码

获取哈希表中字段的数量

该命令可以获取指定哈希表中字段的数量,格式如下:

HLEN key

  • key 为指定的哈希表的索引

127.0.0.1:6379> HLEN myhash(integer) 1
复制代码

获取哈希表中的所有字段

该命令可以获取指定哈希表中所有的字段,但是不返回字段对应的值,格式如下:

HKEYS key

  • key 为指定的哈希表的索引

127.0.0.1:6379> HKEYS myhash1) "name"
复制代码

获取哈希表中所有的值

上一个命令是获取到指定哈希表中所有的字段,但是不返回字段对应的值,那么这个命令就是获取到所有的值,而不返回其对应的字段,格式如下:

HVALS key

  • key 为指定的哈希表的索引

127.0.0.1:6379> HVALS myhash1) "huixiaoyuan"
复制代码


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 3
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
带你掌握Redis数据类型:string和Hash_redis_华为云开发者社区_InfoQ写作平台