Redis常用命令——String篇

  前面我们讲解了一些 Redis 的全局命令(Redis常用基本全局命令)。所谓全局命令,就是可以匹配任意一个数据结构进行使用。但是不同的数据结构,也有自己的操作命令。本篇文章主要讲解的是 String 的操作命令,希望会对你有所帮助。

文章目录

一、简单介绍

二、常用命令

2、1 常见命令

set

get

MGET 和 MSET

SETNX、SETEX

2、2 计数命令

INCR 和 INCRBY

DECR 和 DECRBY

INCRBYFLOAT

2、3 其他命令

APPEND

 GETRANGE

SETRANGE

STRLEN

三、小结


🙋‍♂️ 作者:@Ggggggtm 🙋‍♂️

👀 专栏:Redis 👀

💥 标题: Redis命令——String篇 💥

 ❣️ 寄语:与其忙着诉苦,不如低头赶路,奋路前行,终将遇到一番好风景 ❣️

一、简单介绍

  我们再次强调:redis 所有的key都是字符串(String)类型,value的类型是存在差异的!而我们本篇文章讲解的 String 的命令操作,也是针对 value 的。

  Redis 中的字符串,直接就是按照字节数组(二进制数据)的方式存储的!不会做任何的编码转换,存的是啥,取出来就还是啥!不仅仅可以存储文本数据,还支持存储整数、文本、JSON、二进制数据等。

  字符串类型是Redis最基础的数据类型,关于字符串需要特别注意:

  • 首先Redis 中所有的键的类型都是字符串类型,而且其他几种数据结构也都是在字符串类似基础上构建的,例如列表和集合的元素类型是字符串类型,所以字符串类型能为其他4种数据结构的学习奠定基础。
  • 其次,如下图所示,字符串类型的值实际可以是字符串,包含一般格式的字符串或者类似JSON、XML格式的字符串;数字,可以是整型或者浮点型;甚至是二进制流数据,例如图片、音频、视频等。不过一个字符串的最大值不能超过512 MB。

  由于Redis内部存储字符串完全是按照二进制流的形式保存的,所以Redis是不处理字符集编码问题的,客户端传入的命令中使用的是什么字符集编码,就存储什么字符集编码。

  下面我们就来看一下String的操作命令。

二、常用命令

2、1 常见命令

set

  前面文章中我们讲解过set命令的使用。在此我们再次详细解释一下 set 命令的使用。首先,get、set都是针对 String 的命令,也是最为重要和基础的两个命令!set 语法格式:

SET key value [expiration EX seconds|PX milliseconds] [NX|XX]

  下面是对 set 命令参数的详细解释:

  • key:指定要设置值的键。
  • value: 要存储的值。
  • [expiration EX seconds | PX milliseconds]: 可选参数,用于设置键的过期时间。可以使用EX参数和以秒为单位的时间来设置过期时间,或者使用PX参数和以毫秒为单位的时间来设置过期时间。过期后会自动删除!具体实例如下:
  • [NX|XX]: 可选参数,用于指定设置操作的行为。NX——只在key不存在时才进行设置,即如果key之前已经存在,设置不执行。XX——只在key存在时才进行设置,即如果key之前不存在,设置不执行。具体实例如下:

  注意,redis文档给出的语法格式说明:

  • [ ] 相当于一个独立的单元,表示可选项(可有可无的);
  • 其中 | 表示 "或者" 的意思,多个只能出现一个;
  • [ ] 和 [ ] 之间,是可以同时存在的。

get

  get命令没什么好解释的,也是只支持字符串(String)类型的value。如果不匹配,则直接会报错提示。具体如下:

  语法也很简单:

get key

  直接使用即可,这里不再做过多解释!需要学习的可以参看此篇文章:Redis常用基本全局命令。

MGET 和 MSET

  在Redis中,MGET和MSET是用于批量获取和设置多个键值对的命令。之前我们也说明了Redis是一个基于网络的客户端/服务器的中间件。为了减少网络IO的次数,那么就出现了MGET 和 MSET 指令。类似的Redis都有很多命令都是可以支持一次操作多个键值对的。其目的就是为了提高效率。

  我们先来看一下MGET 命令语法:

MGET key [key ...]

  理解并不难,我们直接看实例:

   我们再来看一下MSET 的语法:

 MSET key value [key value ...]

  我们直接看实例:

  两者的时间复杂度均为O(n),这里的 n 并不是指的redis中所有的key,而是我们所设置的key的个数。即使mset 和 mget 指令可以一次操作多个键值对,但是并不会一次设置或者获取 太对的键值对。因为我一次设置假设10w个键值对,有可能把redis 给阻塞住了!导致其他的命令不能够被执行,引起连锁反应!

SETNX、SETEX

  SETNX、SETEX其实就是把set 中的nx 和 ex选项结合成为一个命令了。这里再简单解释一下。

  SETNX 命令用于在 Redis 中设置一个 key 的值,如果这个 key 不存在的话。如果设置成功,返回 1;如果 key 已经存在,则不做任何操作,返回 0。具体实例如下:

  SETEX 命令用于在 Redis 中设置一个 key 的值,并指定该 key 在指定的秒数后过期。如果设置成功,返回 OK。这里要说明一下其语法:

SETEX key seconds value

  我们直接看一个实例:

2、2 计数命令

INCR 和 INCRBY

  在 Redis 中,INCR 和 INCRBY 命令都用于对存储在指定 key 中的值进行增量操作。

  1. INCR 命令用于将存储在指定 key 的值递增 1。如果 key 不存在,则先将其设置为 0,然后再执行递增操作。语法:INCR key。
  2. INCRBY 命令用于将存储在指定 key 的值递增指定的增量值。如果 key 不存在,则先将其设置为 0,然后再执行递增操作。语法:INCRBY key increment。

  注意:如果INCR 和 INCRBY key对应的string 不是一个整型或者范围超过了64位有符号整型,则报错。我们来看一下实例:

DECR 和 DECRBY

  在 Redis 中,DECR 和 DECRBY 命令与 INCR 和 INCRBY 命令相反,用于对存储在指定 key 中的值进行减量操作。

  1. DECR 命令用于将存储在指定 key 的值递减 1。如果 key 不存在,则先将其设置为 0,然后再执行递减操作。语法:DECR key。
  2. DECRBY 命令用于将存储在指定 key 的值递减指定的减量值。如果 key 不存在,则先将其设置为 0,然后再执行递减操作。语法:DECRBY key decrement。

  注意:如果DECR 和 DECRBY key对应的string 不是一个整型或者范围超过了64位有符号整型,则报错

INCRBYFLOAT

  INCRBYFLOAT是 Redis 中用于对存储在指定键中的浮点数值进行增加或减少操作的命令。下面是关于 INCRBYFLOAT 命令语法:

INCRBYFLOAT key increment

功能描述:

  • INCRBYFLOAT 命令用于在指定键存储的值为浮点数时,将这个值增加(或减少)指定的浮点数增量。
  • 如果键不存在,那么在执行命令前,会先将键的值设置为 0,再执行增加操作。
  • 如果键包含的值不是浮点数,命令将返回错误。
  • 增量参数可以是正数也可以是负数,用来增加或减少存储在键中的浮点数值。

  注意:并没有DECRBYFLOAT,我们可以通过INCRBYFLOAT key 负数 来实现对 key 的减法操作。这里就不再举例了,大家可以自己操作一下。

2、3 其他命令

APPEND

  append 顾名思义就是追加嘛!如果key已经存在并且是一个string,命令会将value追加到原有string的后边。如果key不存在,会先将键的值设置为空字符串再进行追加操作,则效果等同于SET命令。最终返回值为追加后字符串的长度。其语法如下:

 APPEND KEY VALUE

  具体实例如下:

  可不可以追加汉字呢?是可以的。具体如下:

  append返回值,长度的单位是字节。但是为什么会是6个字节呢?redis的字符串不会对字符编码做任何处理(redis 不认识字符,只认识字节)。当前咱们的xshell终端,默认的字符编码是utf8,在终端中输入汉字之后,也就是按照utf8编码的。一个汉字在utf8字符集中通常是3个字节的。

  我们通过get 获取value时,发现并不是我们所想的到的汉字,而是一堆二进制。因为存储进去时,并没有指定编码格式,那么存储的就是二进制,并且是以utf8所对应的编码方式的二进制存储进去的。所以我们得到的就是一堆二进制。

  在启动redis客户端的时候,加上一个--raw这样的选项。就可以使redis客户端能够自动的把二进制数据尝试翻译。具体如下:

 GETRANGE

  GETRANGE 命令用于获取指定键对应值的子字符串(根据指定的起始位置和结束位置)。语法:

GETRANGE key start end

  返回key对应的string的子串,由start和 end确定(左闭右闭),并且起始位置为0。可以使用负数表示倒数。-1代表倒数第一个字符(len - 1),-2代表倒数第二个(len - 2),其他的与此类似。超过范围的偏移量会根据string的长度调整成正确的值。具体实例如下:

  

  如果字符串中保存的是汉字,此时进行子串切分,很可能切出来的就不是完整的汉字了!如下:

  上述的代码,是强行切出了中间的四个字节。随便这么一切,切出的结果在utf8码表上不知道能查出啥了。

SETRANGE

  SETRANGE 命令用于替换指定键对应值的字符串中的部分内容。语法:

SETRANGE key offset value

  offset 为偏移量,表示从哪个位置开始替换字符串内容(以 0 表示)。value就是覆盖指定位置的值。注意:setrange 是用来覆盖替换的,并不是插入!具体实例如下:

  setrange针对不存在的key也是可以操作的.不过会把 offset之前的内容填充成0x00.具体如下:

STRLEN

  STRLEN 命令用于获取存储在指定键中的字符串值的长度。当key存储的value不是string时,直接报错。或者当 key 不存在时,返回 0。语法:

STRLEN key

  具体实例如下:

三、小结

  上述命令总结出如下表格,根据不同场景可以做出不同选择。具体如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/639634.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

fortran77 初始化矩阵 打印矩阵 模版 备拷

1,源码 SUBROUTINE INIT_MATRIX(A, m, n, lda)DOUBLE PRECISION A(*)CALL SRAND(2024)DO i1, mDO j1, nA(i lda*(j-1)) RAND() RAND() C WRITE(*, (F8.4)) A(i)END DOEND DOENDSUBROUTINE PRINT_MATRIX(A, m, n, lda)DOUBLE PREC…

pytorch-20_1 LSTM在股价数据集上的预测实战

LSTM在股价数据集上的预测实战 使用完整的JPX赛题数据,并向大家提供完整的lstm流程。 导包 import numpy as np #数据处理 import pandas as pd #数据处理 import matplotlib as mlp import matplotlib.pyplot as plt #绘图 from sklearn.preprocessing import M…

Postgresql 基础学习

一、介绍 PostgreSQL是一个开源的关系型数据库管理系统(RDBMS),它支持SQL语言的所有功能,具有可扩展性、高并发性和可靠性等特点。 以下是一些 PostgreSQL 的特点: 开源:PostgreSQL是一个非常受欢迎的开源…

计算机系统概述习题

选择题 电子计算机问世至今,新型计算机不断推陈出新,不管怎么更新,依然具有“存储程序”的特点,最早提出这种概念的是(B) A. 巴贝奇 B. 冯*诺伊曼 C. 帕斯卡 D. 贝尔 B下列描述中___是正确的。 A. 控制器能理解,解释…

Creating Server TCP listening socket *:6379: listen: Unknown error

错误: 解决方法: 在redis安装路径中打开cmd命令行窗口,输入 E:\Redis-x64-3.2.100>redis-server ./redis.windows.conf结果:

OpenHarmony轻量系统中内核资源主要管理方式

一、背景 OpenAtom OpenHarmony(以下简称“OpenHarmony”)轻量系统面向MCU类处理器例如ARM Cortex-M、RISC-V 32位的设备,硬件资源极其有限,支持的设备最小内存为128KiB,可以提供多种轻量级网络协议,轻量级…

5.1 Go 函数的定义与调用

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

解决无法启动Redis,打开redis-server闪退的问题

【问题】 ① 双击redis-server.exe闪退。 ② 终端运行redis-server没反应。 但是终端运行redis -cli没问题。 【解决方法】 步骤1:找到Redis文件夹,右击,在终端打开。 步骤2:输入命令:redis-server.exe redis.windows…

论文阅读笔记:Task-Customized Mixture of Adapters for General Image Fusion

论文阅读笔记:Task-Customized Mixture of Adapters for General Image Fusion 1 背景2 创新点3 方法4 模块4.1 任务定制混合适配器4.2 提示生成4.3 提示驱动融合4.4 互信息正则化MIR4.5 任务定制化损失 5 实验5.1 VIF任务5.2 MEF任务5.3 MFF任务5.4 消融实验5.5 性…

网络编程 一

一、UDP socket api的使用 Java 把系统原生的封装了. 核心的类有两个: 1 -> DatagramSocket 操作系统中,有一类文件,就叫socket文件. socket文件,抽象表示了 " 网卡"这样的硬件设备. 进行网络通信最核心的硬件设备网卡 通过网卡发送数据,就是写…

人工智能应用-实验8-用生成对抗网络生成数字图像

文章目录 🧡🧡实验内容🧡🧡🧡🧡代码🧡🧡🧡🧡分析结果🧡🧡🧡🧡实验总结🧡🧡 &#x1f9…

spark的简单学习一

一 RDD 1.1 RDD的概述 1.RDD(Resilient Distributed Dataset,弹性分布式数据集)是Apache Spark中的一个核心概念。它是Spark中用于表示不可变、可分区、里面的元素可并行计算的集合。RDD提供了一种高度受限的共享内存模型,即RD…

想学接口测试,不知道那个工具适合?

引言: 接口测试在软件开发中扮演着至关重要的角色,它可以帮助我们验证系统的功能、性能和安全性。而选择适合的工具是进行接口测试的重要一步。本文将从零开始,为你详细介绍如何选择合适的工具,并提供规范的指导。 一、了解接口…

【大数据】MapReduce实战

文章目录 [toc]Word CountMapperReducerrun.sh本地调试 基于白名单的Word CountMapperReducerrun.sh本地调试 文件分发-fileMapperReducerrun.sh -cacheFileMapperReducerrun.sh -cacheArchiveMapperReducerrun.sh 杀死MapReduce Job排序压缩文件mr_ip_lib_python本地调试 个人…

PE文件(六)新增节-添加代码作业

一.手动新增节添加代码 1.当预备条件都满足,节表结尾没有相关数据时: 现在我们将ipmsg.exe用winhex打开,在节的最后新增一个节用于存放我们要增加的数据 注意:飞鸽的文件对齐和内存对齐是一致的 先判断节表末尾到第一个节之间…

《书生·浦语大模型实战营》第一课 学习笔记:书生·浦语大模型全链路开源体系

文章大纲 1. 简介与背景智能聊天机器人与大语言模型目前的开源智能聊天机器人与云上运行模式 2. InternLM2 大模型 简介3. 视频笔记:书生浦语大模型全链路开源体系内容要点从模型到应用典型流程全链路开源体系 4. 论文笔记:InternLM2 Technical Report简介软硬件基础…

Flat Ads获广东电视台报道!CEO林啸:助力更多企业实现业务全球化增长

近日,在广州举行的第四届全球产品与增长展会(PAGC2024)上,Flat Ads凭借其卓越的一站式全球化营销和创新的变现方案大放异彩,不仅吸引了众多业界目光,同时也在展会上斩获了备受瞩目的“金帆奖”,展现了其在全球化营销推广领域的卓越实力和专业服务。 在大会现场,Flat Ads的CEO林…

fyne网格包裹布局

fyne网格包裹布局 与之前的网格布局一样,网格环绕布局以网格模式创建元素排列。但是,此网格没有固定数量的列,而是为每个单元格使用固定大小,然后将内容流到显示项目所需的行数。 layout.NewGridWrapLayout(size) 您可以使用其中…

如何官方查询论文分区,中科院及JCR

中科院分区 有一个小程序:中科院文献情报中心分区表 点2023升级版,输入期刊名 大类1区 JCR分区 进入官方网站 Journal Citation Reports 输入要查询的期刊名,点开 拼命往下拉 这就是根据影响因子的排名,在computer science&am…

Dijkstra算法求最短路径 c++

目录 【问题背景】 【相关知识】 【算法思想】 【算法实现】 【伪代码】 【输入输出】 【代码】 【问题背景】 出门旅游,有些城市之间有公路,有些城市之间则没有,如下图。为了节省经费以及方便计划旅程,希望在出发之前知道…