Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]Redis的5种数据结构及其常用命令。

Redis系列(二):Redis的5种数据结构及其常用命令

上一篇博客,我们讲解了什么是Redis以及在Windows和Linux环境下安装Redis的方法,

没看过的同学可以点击以下链接查看:

Redis系列(一):Redis简介及环境安装

本篇博客我们来讲解下Redis的5种数据结构及其常用命令,5种数据结构分别为:

  1. 字符串String
  2. 列表List
  3. 集合Set
  4. 散列Hash
  5. 有序集合ZSet

注意事项:Redis可以存储键(key)值(value)对的映射,其中键(key)一直是String,而值可以是上面提到的5种数据结构中的一种。

1. 字符串String

在Redis中,字符串可以存储以下3种类型的值:

  1. 字节串(byte string)
  2. 整数
  3. 浮点数

经常使用的字符串命令主要分为以下3种类型:

  1. 常用命令
  2. 自增自减命令
  3. 子串命令

接下来,我们一一讲解。

1.1 常用命令

常用命令主要有:GET、SET、DEL。

GET、SET、DEL命令的功能如下所示:

命令 功能
GET 获取指定键的值
SET 设置指定键的值
DEL 删除指定键的值

然后我们打开一个redis-cli交互式客户端,执行下上面的命令看下效果。

以下是这些命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

1.2 自增自减命令

自增自减命令主要有:INCR、DECR、INCRBY、DECRBY、INCRBYFLOAT。

当用户将一个值存储到Redis字符串的时候,如果这个值可以被转化为整数或者浮点数,那么Redis会察觉到这一点,并允许用户对这个字符串执行各种INCR*DECR*操作。

INCR、DECR命令的功能如下所示:

命令 语法 功能
INCR INCR keyname 将键存储的值加1
DECR DECR keyname 将键存储的值减1

以下是可能存在的3个异常场景:

  1. 对一个不存在的键执行自增或者自减操作,Redis在执行操作时会将这个键的值当作0来处理。
  2. 对一个保存了空串的键执行自增或者自减操作,Redis在执行操作时会将这个键的值当作0来处理。
  3. 对一个值无法被解释为整数或者浮点数的字符串键执行自增或者自减操作,Redis将返回一个错误。

以下是这些命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

INCRBY、DECRBY命令的功能和上面的INCR、DECR命令类似,不过INCRBY、DECRBY可以指定每次自增或者自减的数值,而INCR、DECR每次都自增或者自减1。

INCRBYFLOAT命令与INCRBY命令类似,不过INCRBYFLOAT命令用来自增或者自减浮点,而INCRBY命令用来自增或者自减整数。

INCRBY、DECRBY、INCRBYFLOAT命令的功能如下所示如下所示:

命令 语法 功能
INCRBY INCR keyname amount 将键存储的值加上整数amount
DECRBY DECR keyname amount 将键存储的值减去整数amount
INCRBYFLOAT INCRBYFLOAT keyname amount 将键存储的值加上浮点数amount

我们可以打开一个redis-cli交互式客户端,执行上面的命令看下效果。

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

1.3 子串命令

子串命令主要有:APPEND、GETRANGE、SETRANGE。

APPEND命令的功能如下所示:

命令:APPEND

语法:APPEND keyname value

功能:将值value追加到指定键keyname当前存储的值的末尾

GETRANGE命令的功能如下所示:

命令:GETRANGE

语法:GETRANGE keyname start end

功能:获取一个由偏移量start(包含start)至偏移量end(包含end)范围内所有字符组成的子串

SETRANGE命令的功能如下所示:

命令:SETRANGE

语法:SETRANGE keyname start value

功能:将从start偏移量开始的子串设置为给定值

以下是这些命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

2. 列表List

Redis中的列表主要有以下2个特性:

  1. 有序地存储多个字符串
  2. 列表里面的元素是可以重复的

经常使用的列表命令主要分为以下3种类型:

  1. 常用命令
  2. 阻塞弹出命令
  3. 元素移动命令

接下来,我们一一讲解。

2.1 常用命令

常用命令主要有:RPUSH、LPUSH、RPOP、LPOP、LINDEX、LRANGE、LTRIM。

RPUSH命令的功能如下所示:

命令:RPUSH

语法:RPUSH keyname value [value …]

功能:将一个或多个值推入列表的右端

LPUSH命令的功能如下所示:

命令:LPUSH

语法:LPUSH keyname value [value …]

功能:将一个或多个值推入列表的左端

RPOP命令的功能如下所示:

命令:RPOP

语法:RPOP keyname

功能:移除并返回列表最右端的元素

LPOP命令的功能如下所示:

命令:LPOP

语法:LPOP keyname

功能:移除并返回列表最左端的元素

LINDEX命令的功能如下所示:

命令:LINDEX

语法:LINDEX keyname offset

功能:返回列表中偏移量为offset的元素

LRANGE命令的功能如下所示:

命令:LRANGE

语法:LRANGE keyname start end

功能:返回列表从start(包含start)偏移量到end偏移量(包含end)范围内的所有元素

LTRIM命令的功能如下所示:

命令:LTRIM

语法:LTRIM keyname start end

功能:对列表进行修剪,只保留从start(包含start)偏移量到end偏移量(包含end)范围内的元素

以下是这些命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

2.2 阻塞弹出命令

阻塞弹出命令主要有:BLPOP、BRPOP。

BLPOP命令的功能如下所示:

命令:BLPOP

语法:BLPOP keyname [keyname …] timeout

功能:从第一个非空列表中弹出最左端的元素,如果没有,则在timeout秒之内阻塞并等待可弹出的元素出现

BRPOP命令的功能如下所示:

命令:BRPOP

语法:BRPOP keyname [keyname …] timeout

功能:从第一个非空列表中弹出最右端的元素,如果没有,则在timeout秒之内阻塞并等待可弹出的元素出现

以下是这些命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

2.3 元素移动命令

元素移动命令主要有:RPOPLPUSH、BRPOPLPUSH。

RPOPLPUSH命令的功能如下所示:

命令:RPOPLPUSH

语法:RPOPLPUSH source-key dest-key

功能:从source-key列表中弹出最右端的元素,然后将这个元素推入dest-key列表的最左端,并向用户返回这 个元素

BRPOPLPUSH命令可以认为是RPOPLPUSH命令的阻塞实现,功能如下所示:

命令:BRPOPLPUSH

语法:BRPOPLPUSH source-key dest-key timeout

功能:从source-key列表中弹出最右端的元素,然后将这个元素推入dest-key列表的最左端,并向用户返回这 个元素,如果source-key为空,那么在timeout秒之内阻塞并等待可弹出的元素出现

以下是这些命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

3. 集合Set

Redis的集合以无序的方式来存储多个各不相同的元素。

与上面提到的列表相比,Redis中的集合主要有以下2个特性:

  1. 无序地存储多个字符串
  2. 集合里面的元素是不可以重复的

经常使用的集合命令主要分为以下3种类型:

  1. 常用命令
  2. 元素移动命令
  3. 差集/交集/并集命令

接下来,我们一一讲解。

3.1 常用命令

常用命令主要有:SADD、SMEMBERS、SISMEMBER、SREM、SCARD。

以上命令的功能描述如下所示:

命令 语法 功能
SADD SADD keyname item [item …] 将一个或多个元素添加到集合
SMEMBERS SMEMBERS keyname 返回集合包含的所有元素
SISMEMBER SISMEMBER keyname item 检查元素item是否存在于集合keyname中
SREM SREM keyname item [item …] 从集合里删除一个或多个元素
SCARD SCARD keyname 返回集合包含元素的数量

以下是这些命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

3.2 元素移动命令

元素移动命令主要有:SMOVE。

以上命令的功能描述如下所示:

语法:SMOVE sourcekey destkey item

功能:将集合sourcekey中的元素item移除,并将元素item添加到集合destkey中

​ 如果item被成功移除,返回1,否则返回0

以下是SMOVE命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

3.3 差集/交集/并集命令

交集/并集/差集命令主要有:SDIFF、SDIFFSTORE、SINTER、SINTERSTORE、SUNION、SUNIONSTORE。

以上命令的功能描述如下所示:

命令 语法 功能
SDIFF SDIFF keyname [key-name …] 返回存在于第1个集合,不存在于其他集合的元素(差集运算)
SDIFFSTORE SDIFFSTORE destkey keyname [key-name …] 将存在于第1个集合,不存在于其他集合的元素(差集运算)存储到destkey集合
SINTER SINTER keyname [key-name …] 返回同时存在于所有集合中的元素(交集运算)
SINTERSTORE SINTERSTORE destkey keyname [key-name …] 将同时存在于所有集合中的元素(交集运算)存储到destkey集合
SUNION SUNION keyname [key-name …] 返回至少存在于一个集合中的元素(并集运算)
SUNIONSTORE SUNIONSTORE destkey keyname [key-name …] 将至少存在于一个集合中的元素(并集运算)存储到destkey集合

以下是这些命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

4. 散列Hash

关于数据结构Hash,有些书籍叫做散列,有些书籍叫做哈希,本文中使用名称:散列。

Redis的散列可以存储多个键值对之间的映射,即可以让用户将多个键值对存储到一个Redis键里面,如下所示:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

接下来,我们了解下经常使用的散列命令。

4.1 添加键值对

往散列里添加键值对有2个命令,分别是HSET、HMSET,其中HSET一次只能添加1个键值对,而HMSET一次可以添加多个键值对。

以下是这2个命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

此时的hash-key包含3个键值对,如下所示:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

4.2 获取键值对

获取散列里键值对有以下5个命令:

  1. HGET 从散列里获取指定键的值
  2. HMGET 从散列里获取一个或多个键的值
  3. HKEYS 获取散列包含的所有键
  4. HVALS 获取散列包含的所有值
  5. HGETALL 获取散列包含的所有键值对

以下是这5个命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

4.3 获取键值对数量

可以通过HLEN命令来获取散列包含的键值对数量。

以下是HLEN命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

4.4 判断键是否存在

可以通过HEXISTS命令来检查某个键是否存在于散列中。

以下是HEXISTS命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

4.5 自增/自减

和字符串的自增,自减命令功能类似,在散列里,我们可以使用HINCRBY命令将某个键存储的值加上个整数,使用HINCRBYFLOAT命令将某个键存储的值加上个浮点数。

以下是这2个命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

4.6 删除键值对

可以通过HDEL命令来删除散列中的一个或多个键。

以下是HDEL命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

5. 有序集合ZSet

有序集合和散列一样,可以用于存储多个键值对之间的映射,其中有序集合的键被称为成员(member),每个成员都是各不相同的,有序集合的值被称为分值(score),分值必须为浮点数。

下图表示1个包含2个元素的有序集合示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

接下来,我们了解下经常使用的有序集合命令。

5.1 添加元素

可以通过ZADD命令往有序集合中添加元素。

以下是ZADD命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

此时的zset-key包含3个成员与分值之间的映射,如下所示:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

5.2 获取元素

获取有序集合里元素有以下2个命令:

  1. ZRANGE

    语法:ZRANGE keyname start stop [WITHSCORES]

    功能:返回有序集合中排名介于start和stop之间的成员,如果给定了可选的WITHSCORES选项,

    ​ 那么会将成员的分值一并返回

  2. ZRANGEBYSCORE

    语法:ZRANGEBYSCORE keyname min max [WITHSCORES] [LIMIT offset count]

    功能:返回有序集合中分值介于min和max之间的成员,如果给定了可选的WITHSCORES选项,

    ​ 那么会将成员的分值一并返回

以下是这2个命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

5.3 获取元素数量

可以通过ZCARD命令来获取有序集合包含的成员数量。

以下是ZCARD命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

还可以通过ZCOUNT命令来获取有序集合中分值处于某个区间的成员数量。

以下是ZCOUNT命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

5.4 自增/自减

和字符串的自增,自减命令功能类似,在有序集合里,我们可以使用ZINCRBY命令将某个成员的分值加上个整数。

以下是这ZINCRBY命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

5.5 删除元素

可以通过ZREM命令来删除有序集合中的一个或多个成员。

以下是ZREM命令的使用示例:

Redis系列(二):Redis的5种数据结构及其常用命令[通俗易懂]

如果想了解更多的Redis命令,可以查看官网地址:https://redis.io/commands

6. 源码及参考

Josiah L. Carlson 《Reids实战》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10193.html

(0)
上一篇 2023-01-23
下一篇 2023-01-23

相关推荐

  • redis实现主从复制「建议收藏」

    redis实现主从复制「建议收藏」前面说到了redis在单机的模式下是可以数据持久化的,但是不可以解决单点失败的问题,当单台redis服务器出现问题时,就可能会造成数据的丢失;想要解决这个问题的话我们可以使用Redis的主从模式这也是

    2023-06-13
    190
  • Python中hmac的使用方法

    Python中hmac的使用方法在Python中,hmac模块提供了一种方便的方法来生成HMAC(基于哈希的消息验证代码)。HMAC是一种涉及哈希函数和一个秘密密钥的消息认证码,对于具有消息认证要求的应用程序而言,它是一种非常有用和安全的算法。

    2024-08-01
    30
  • CentOS7下RPM模式搭建MySQL5.7.28主从复制「建议收藏」

    CentOS7下RPM模式搭建MySQL5.7.28主从复制「建议收藏」CentOS7下RPM模式搭建MySQL5.7.28主从复制 一、配置文件: 主库(192.168.128.111): [client] port=3306 socket=/approot/data…

    2023-02-06
    156
  • Spark性能优化指南——初级篇

    Spark性能优化指南——初级篇原文来我的公众号:Spark性能优化指南——初级篇 一. Spark作业原理 我们使用spark-submit提交一个Spark作业之后,这个作业就会启动一个对应的Driver进程。该进程是向集群管理

    2022-12-28
    174
  • 手把手教你用策略模式 写echarts的配置项option

    手把手教你用策略模式 写echarts的配置项option前言:策略模式和适配器模式很像 但前者策略的接口和相关类会暴露出来,并且每个策略的“计算内容”都不同【常用于计算】。 一、研究下echarts官网的重要配置 1.1 常用项主要有title lege…

    2023-03-31
    149
  • Java判断素数

    Java判断素数随着计算机科学的发展,人们对数学问题的研究越来越多地依赖于计算机技术。素数是一种基本而重要的数学概念,而Java是一种流行的、跨平台的编程语言,可以用来检验一个数是否为素数。在本文中,我们将研究如何在Java中判断素数。

    2024-09-01
    23
  • 学术分享平台_sci hub搜不到文章

    学术分享平台_sci hub搜不到文章在最新一届国际数据库顶级会议 ACM SIGMOD 2022 上,来自清华大学的李国良和张超两位老师发表了一篇论文:《HTAP Database: What is New and What is Ne

    2023-06-03
    177
  • 使用Python输入标题

    使用Python输入标题在网页开发中,标题是非常重要的元素之一,它可以让用户快速地了解页面的内容和主题,因此,我们需要用一种简单、快捷的方式来添加和编辑标题。Python 作为一种通用的编程语言,拥有丰富的库和内置函数,可以轻松地实现标题的添加、编辑和格式化,本篇文章将从多个方面详细阐述如何使用 Python 添加和编辑标题。

    2024-08-21
    25

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注