Redis五大基本类型——String字符串命令详解(命令用法详解+思维导图详解)

news2024/12/27 14:01:43

目录

一、String字符串类型介绍

二、常见命令

1、SET

2、GET

3、MGET

4、MSET

·使用MGET 和 使用多次GET的区别

5、DEL

6、SETNX

·SET、SET NX和SET XX执行流程

7、INCR

8、INCRBY

9、DECR

10、DECYBY

11、INCRBYFLOAT

12、APPEND

13、GETRANGE

14、SETRANGE

15、STRLEN

三、命令小结


一、String字符串类型介绍

        字符串类型是Redis 最基础的数据类型,Redis中所有键的类型都是字符串类型。其他几种数据库类型都是在字符串类型基础上构建的,例如列表和集合的元素类型都是字符串类型

        字符串类型的实际可以是字符串,包含一般格式的字符串或者类似JSON、XML格式的字符串;也可以是数字,包括整数和浮点型;也可以是二进制流数据,例如图片、音频、视频等。但要注意,一个字符串的长度不可以超过512MB。

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

        想显示中文,需要在连接redis服务器时,使用命令:redis-cli --raw

二、常见命令

1、SET

        将String类型的value设置到key当中。如果key之前存在,无论原来的数据类型是什么,覆盖。之前关于此key的TTL也全部失效。

语法:

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

[ ]内是选填项,其他的是必填项

EX seconds:以秒作为单位设置key的过期时间

PX milliseconds:以毫秒作为单位设置key的过期时间

KEEPTTL:保留设置前指定键的生存时间

NX:只在key不存在时才设置,如果设置前key已存在,则不执行

XX:只在key存在时才设置,如果设置前key不存在,则不执行

返回值:

如果设置成功,返回OK

如果设置失败,SET不会执行,并返回nil

示例:

127.0.0.1:6379> exists key
0
127.0.0.1:6379> SET key dog 
OK
127.0.0.1:6379> get key
dog
127.0.0.1:6379> SET key cat NX
(nil)
127.0.0.1:6379> get key
dog
127.0.0.1:6379> SET key cat XX
OK
127.0.0.1:6379> get key
cat

127.0.0.1:6379> SET key1 111 NX
OK
127.0.0.1:6379> get key1
111
127.0.0.1:6379> SET key2 222 XX
(nil)
127.0.0.1:6379> get key2
(nil)

127.0.0.1:6379> SET key "will expire in 10s" EX 10
OK
127.0.0.1:6379> get key
will expire in 10s
127.0.0.1:6379> get key  #10s后
(nil)

2、GET

        获取key对应的value。如果key不存在则返回nil,如果value的数据类型不是string,则会报错。

语法:

GET key

返回值:

key对应的value,或者nil

示例:

127.0.0.1:6379> set key1 111
OK
127.0.0.1:6379> get key1
111
127.0.0.1:6379> set key2 "111"
OK
127.0.0.1:6379> get key2
111
127.0.0.1:6379> del key1  #删除key1
1
127.0.0.1:6379> get key1
(nil)
127.0.0.1:6379> HSET key name dog  #设置一个不是String类型的key
1
127.0.0.1:6379> get key
WRONGTYPE Operation against a key holding the wrong kind of value

3、MGET

        一次性获取多个key的值。如果key不存在或者对应的的数据类型不是string,则返回nil。

语法:

MGET key [key ...]

返回值:

对应value的列表

示例:

127.0.0.1:6379> SET key1 111
OK
127.0.0.1:6379> SET key2 222
OK
127.0.0.1:6379> SET key3 333
OK
127.0.0.1:6379> MGET key1 key2 key3
111
222
333
127.0.0.1:6379> MGET key1 key2 key3 key4
111
222
333
(nil)

4、MSET

        一次性设置多个key的值。

语法:

MSET key value [key value ...]

返回值:

永远是OK

示例:

127.0.0.1:6379> MSET key1 111 key2 222 key3 333
OK
127.0.0.1:6379> get key1
"111"
127.0.0.1:6379> mget key1 key2 key3
1) "111"
2) "222"
3) "333"

·使用MGET 和 使用多次GET的区别

        如图所示,使用mget/mset 有效的减少了网络时间,所以性能相较多次使用get/set来说更高。使用批量操作可以有效的提高效率。

        但是要注意,由于redis是单线程的,一次批量传输或获取的数据不宜过多,避免因为单一命令执行时间过长导致redis阻塞~

5、DEL

        删除指定的key。

语法:

DEL key [key ...]

返回值:

删除的个数

示例:

127.0.0.1:6379> set key1 111
OK
127.0.0.1:6379> set key2 222
OK
127.0.0.1:6379> set key3 333
OK
127.0.0.1:6379> DEL key1
(integer) 1
127.0.0.1:6379> DEL key2 key3
(integer) 2

127.0.0.1:6379> exists key
(integer) 0
127.0.0.1:6379> DEL key
(integer) 0

6、SETNX

        设置key-value,但只允许在 key 之前不存在的前提下。

语法:

 SETNX key value

返回值:

1表示设置成功

0表示没有设置

示例:

127.0.0.1:6379> SETNX key1 111
(integer) 1
127.0.0.1:6379> get key1
"111"
127.0.0.1:6379> SETNX key2 222
(integer) 1
127.0.0.1:6379> get key2
"222"
127.0.0.1:6379> SETNX key1 666
(integer) 0
127.0.0.1:6379> get key1
"111"

·SET、SET NX和SET XX执行流程

7、INCR

        将key对应的value表示的数字加一。如果key不存在们则视为key对应的value是0,创建key;如果key对应的string不是一个整数或者范围超过了64位有符号整数,则报错。

语法:

INCR key

返回值:

integer类型的加完后的数值

示例:

127.0.0.1:6379> EXISTS key1
(integer) 0
127.0.0.1:6379> INCR key1
(integer) 1
127.0.0.1:6379> get key1
"1"

127.0.0.1:6379> set key2 222
OK
127.0.0.1:6379> INCR key2
(integer) 223
127.0.0.1:6379> get key2
"223"

127.0.0.1:6379> set key3 three
OK
127.0.0.1:6379> incr key3
(error) ERR value is not an integer or out of range

127.0.0.1:6379> set key3 33333333333333333333333333333333333333333333333333333333333333333333333333333333333333
OK
127.0.0.1:6379> INCR key3
(error) ERR value is not an integer or out of range

8、INCRBY

        将key对应的value表示的数字加上对应的值。如果key不存在们则视为key对应的value是0,创建key;如果key对应的string不是一个整数或者范围超过了64位有符号整数,则报错。

语法:

INCRBY key increment

返回值:

integer类型的加完后的数值

示例:

127.0.0.1:6379> exists key1
(integer) 0
127.0.0.1:6379> INCRBY key1 111
(integer) 111
127.0.0.1:6379> get key1
"111"

127.0.0.1:6379> set key2 222
OK
127.0.0.1:6379> INCRBY key2 111
(integer) 333
127.0.0.1:6379> get key2
"333"

127.0.0.1:6379> set key3 three
OK
127.0.0.1:6379> INCRBY key3 1
(error) ERR value is not an integer or out of range

127.0.0.1:6379> set key3 333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
OK
127.0.0.1:6379> INCRBY key3 1
(error) ERR value is not an integer or out of range

9、DECR

        将key对应的value表示的数字减一。如果key不存在们则视为key对应的value是0,创建key;如果key对应的string不是一个整数或者范围超过了64位有符号整数,则报错。

语法:

DECR KEY

返回值:

integer类型的减完后的数值

示例:

127.0.0.1:6379> exists key1 
(integer) 0
127.0.0.1:6379> DECR key1
(integer) -1
127.0.0.1:6379> get key1
"-1"
 
127.0.0.1:6379> set key2 222
OK
127.0.0.1:6379> DECR key2
(integer) 221
127.0.0.1:6379> get key2
"221"

127.0.0.1:6379> set key3 three 
OK
127.0.0.1:6379> DECR key3
(error) ERR value is not an integer or out of range

127.0.0.1:6379> set key3 3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
OK
127.0.0.1:6379> DECR key3
(error) ERR value is not an integer or out of range

10、DECYBY

        将key对应的value表示的数字减去对应的值。如果key不存在们则视为key对应的value是0,创建key;如果key对应的string不是一个整数或者范围超过了64位有符号整数,则报错。

语法:

DECRBY key increment

返回值:

integer类型的减完后的数值

示例:

127.0.0.1:6379> exists key1
(integer) 0
127.0.0.1:6379> DECRBY key1 111
(integer) -111
127.0.0.1:6379> get key1
"-111"

127.0.0.1:6379> set key2 222
OK
127.0.0.1:6379> DECRBY key2 111
(integer) 111
127.0.0.1:6379> get key2
"111"
 
127.0.0.1:6379> set key3 three
OK
127.0.0.1:6379> DECRBY key3 1
(error) ERR value is not an integer or out of range
 
127.0.0.1:6379> set key3 33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
OK
127.0.0.1:6379> DECRBY key3 1
(error) ERR value is not an integer or out of range

11、INCRBYFLOAT

        将key对应的value表示的浮点数加上对应的值。如果对应的是负数,则视为减去对应的值;如果key不存在们则视为key对应的value是0,创建key;如果key对应的string不是一个浮点数,则报错。允许使用科学记数法表示浮点数。

什么是科学记数法:

        科学记数法是一种记数的方法。把一个数表示成a与10的n次幂相乘的形式(1≤|a|<10,a不为分数形式,n为整数),这种记数法叫做科学记数法。当我们要标记或运算某个较大或较小且位数较多的数时,用科学记数法免去浪费很多空间和时间。

语法:

INCRBYFLOAT key increment

返回值:

加/减完后的数值

示例:

127.0.0.1:6379> exists key1
(integer) 0
127.0.0.1:6379> INCRBYFLOAT key1 1.1
"1.1"
127.0.0.1:6379> INCRBYFLOAT key1 -0.1
"1"

127.0.0.1:6379> set key2 1.0e3
OK
127.0.0.1:6379> INCRBYFLOAT key2 100
"1100"
127.0.0.1:6379> INCRBYFLOAT key2 -100
"1000"

12、APPEND

        如果 key 已经存在并且是⼀个 string,命令会将 value 追加到原有 string 的后边。如果 key 不存在,则效果等同于 SET 命令。

语法:

APPEND key value

返回值:

追加完成后string的长度

示例:

127.0.0.1:6379> exists key1
(integer) 0
127.0.0.1:6379> APPEND key1 hello
(integer) 5
127.0.0.1:6379> get key1
"hello"
127.0.0.1:6379> APPEND key1 world
(integer) 10
127.0.0.1:6379> get key1
"helloworld"

13、GETRANGE

        返回 key 对应的 value的⼦串,由 start 和 end 确定(左闭右闭)。可以使⽤负数表⽰倒数。-1 代表倒数第⼀个字符,-2 代表倒数第⼆个,其他的与此类似。超过范围的偏移量会根据 string 的⻓度调整 成正确的值。

语法:

GETRANGE key start end

返回值:

string类型的字串

示例:

127.0.0.1:6379> get key1
"helloworld"
127.0.0.1:6379> GETRANGE key1 0 -1
"helloworld"
127.0.0.1:6379> GETRANGE key1 0 4
"hello"
127.0.0.1:6379> GETRANGE key1 -10 -1
"helloworld"
127.0.0.1:6379> GETRANGE key1 -100 100
"helloworld"
127.0.0.1:6379> GETRANGE key1 100 200
""

14、SETRANGE

        从指定的偏移开始覆盖字符串的一部分。

语法:

SETRANGE key offset value

返回值:

替换后的string的长度

示例:

127.0.0.1:6379> set key "hello world!"
OK
127.0.0.1:6379> get key
"hello world!"
127.0.0.1:6379> SETRANGE key 1 ooo
(integer) 12
127.0.0.1:6379> get key
"hoooo world!"
127.0.0.1:6379> SETRANGE key 6 aabbccdd
(integer) 14
127.0.0.1:6379> get key
"hoooo aabbccdd"

15、STRLEN

        获取key对应的value的长度,当key存放的类型不是string时,报错。

语法:

STRLEN key

返回值:

当key存在且value是string类型时,返回对应的长度

当key不存在时,返回0

示例:

127.0.0.1:6379> set key1 "hello world!!!"
OK
127.0.0.1:6379> STRLEN key1
(integer) 14
127.0.0.1:6379> exists key2
(integer) 0
127.0.0.1:6379> STRLEN key2
(integer) 0

三、命令小结


        以上就是 Redis五大基本类型——String字符串命令详解(命令用法详解+思维导图详解)的全部内容了,希望能对你有所帮助!你的点赞收藏关注是对我最大的支持!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dubbo 3.x源码(25)—Dubbo服务引用源码(8)notify订阅服务通知更新

基于Dubbo 3.1&#xff0c;详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了接口级的服务引入订阅的refreshInterfaceInvoker方法&#xff0c;当时还有最为关键的notify服务通知更新的部分源码没有学习&#xff0c;本次我们来学习notify通知本地服务更新的源码。 Dubb…

STM32+AI语音识别智能家居系统

基于 STM32 和 AI 语音识别的智能家居系统的详细硬件和软件设计&#xff0c;包括各个模块的详细描述和代码示例。 一、硬件设计 1. 微控制器&#xff08;STM32&#xff09;&#xff1a; 选择 STM32F7 系列或更高性能的芯片&#xff0c;如 STM32F767ZIT6&#xff0c;以满足处理…

飞凌嵌入式RK3576核心板已适配Android 14系统

在今年3月举办的RKDC2024大会上&#xff0c;飞凌嵌入式FET3576-C核心板作为瑞芯微RK3576处理器的行业首秀方案重磅亮相&#xff0c;并于今年6月率先量产发货&#xff0c;为客户持续稳定地供应&#xff0c;得到了众多合作伙伴的认可。 FET3576-C核心板此前已提供了Linux 6.1.57…

elementUI input 禁止内容两端存在空格,或者是自动去除两端空格

需求 项目中有需求&#xff1a;输入框中禁止内容两端存在空格&#xff0c;或者是自动去除两端空格。 解决方法 vue的api文档中有过介绍&#xff0c;使用.trim可以去掉用户输入内容中两端的空格&#xff0c;如下图 代码 <el-input v-model.trim"name" cleara…

初识算法 · 位运算(end)

目录 前言&#xff1a; 题目解析 算法原理 算法编写 前言&#xff1a; 本文作为初识算法 位运算的最后一篇文章&#xff0c;使用一道hard题目来结束这个专题&#xff0c;题目的链接为&#xff1a; 面试题 17.19. 消失的两个数字 - 力扣&#xff08;LeetCode&#xff09;…

3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用)

3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用) 文章目录 3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用)前言1. Spring Cloud Eureka 的概述1.1 服务治理概述1.2 服务注册与发现 2. 实践&#xff1a;创建单机 Eureka Server 注册中心2.1 需求说明 图解…

springboot实现简单的数据查询接口(无实体类)

目录 前言&#xff1a;springboot整体架构 1、ZjGxbMapper.xml 2、ZjGxbMapper.java 3、ZjGxbService.java 4、ZjGxbController.java 5、调用接口测试数据是否正确 6、打包放到服务器即可 前言&#xff1a;springboot整体架构 文件架构&#xff0c;主要编写框选的这几类…

awk(常用)

这个有点难 O.o 一、awk # 语法 awk 参数 模式 {动作} 文件# 第一列&#xff0c;包含p的 $1~"p" # 第一列&#xff0c;不包含p的 $1!~"p" # 开始时干嘛&#xff0c;结束时干嘛 awk BEGIN{开始时做的事}END{结束时做的事}{print $0} 文件 1、内置变量&…

EXPLAIN优化慢SQL

项目中发现数据查询很慢&#xff0c;导致前端超时等待的问题。经过日志打印发现&#xff0c;查询sql耗时10秒以上&#xff0c;相关sql如下&#xff1a; select distincttablemodel.*from pjtask_model tablemodelJOIN buss_type_permission a ON (tablemodel.fields_data_id …

Skywalking搭建-来自于图灵课堂

Skywalking主要用于链路追踪&#xff0c;日志收集查看&#xff0c;异常日志查看&#xff0c;服务监控弱一些&#xff0c;服务器监控可以使用prometheus 一、搭建服务端&#xff0c;使用startup.bat启动 配置持久化&#xff0c;如果是用mysql持久化&#xff0c;拷贝mysql链接包…

ZooKeeper单机、集群模式搭建教程

单点配置 ZooKeeper在启动的时候&#xff0c;默认会读取/conf/zoo.cfg配置文件&#xff0c;该文件缺失会报错。因此&#xff0c;我们需要在将容器/conf/挂载出来&#xff0c;在制定的目录下&#xff0c;添加zoo.cfg文件。 zoo.cfg logback.xml 配置文件的信息可以从二进制包…

计算机网络(11)和流量控制补充

这一篇对数据链路层中的和流量控制进行详细学习 流量控制&#xff08;Flow Control&#xff09;是计算机网络中确保数据流平稳传输的技术&#xff0c;旨在防止数据发送方发送过多数据&#xff0c;导致接收方的缓冲区溢出&#xff0c;进而造成数据丢失或传输失败。流量控制通常…

二元一次不定方程@整数解问题

文章目录 二元一次不定方程|整数解定理1整数解存在充要条件定理2 通解特解知识回顾利用辗转相除法求例 使用表达式凑出通解 二元一次不定方程|整数解 二元一次不定方程的一般形式为 a x b y c ax by c axbyc(1) 其中 a a a、 b b b、 c c c 是整数&#xff0c;且 a a a…

深入理解Flutter生命周期函数之StatefulWidget(一)

目录 前言 1.为什么需要生命周期函数 2.开发过程中常用的生命周期函数 1.initState() 2.didChangeDependencies() 3.build() 4.didUpdateWidget() 5.setState() 6.deactivate() 7.dispose() 3.Flutter生命周期总结 1.调用顺序 2.函数调用时机以及主要作用 4.生…

llama factory lora 微调 qwen2.5 7B Instruct模型

项目背景 甲方提供一台三卡4080显卡 需要进行qwen2.5 7b Instruct模型进行微调。以下为整体设计。 要使用 LLaMA-Factory 对 Qwen2.5 7B Instruct模型 进行 LoRA&#xff08;Low-Rank Adapters&#xff09;微调&#xff0c;流程与之前提到的 Qwen2 7B Instruct 模型类似。LoRA …

机器学习day2-特征工程

四.特征工程 1.概念 一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程 将任意数据&#xff08;文本或图像等&#xff09;转换为数字特征&#xff0c;对特征进行相关的处理 步骤&#xff1a;1.特征提取&#xff1b;2.无量纲化&#xff08;预处理&#xf…

Llama架构及代码详解

Llama的框架图如图&#xff1a; 源码中含有大量分布式训练相关的代码&#xff0c;读起来比较晦涩难懂&#xff0c;所以我们对llama自顶向下进行了解析及复现&#xff0c;我们对其划分成三层&#xff0c;分别是顶层、中层、和底层&#xff0c;如下&#xff1a; Llama的整体组成…

stm32在linux环境下的开发与调试

环境安装 注&#xff1a;文末提供一键脚本 下载安装stm32cubeclt 下载地址为&#xff1a;https://www.st.com/en/development-tools/stm32cubeclt.html 选择 linux版本下载安装 安装好后默认在家目录st下 > $ ls ~/st/stm32cubeclt_1.16.0 …

第T7周:Tensorflow实现咖啡豆识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标 具体实现 &#xff08;一&#xff09;环境 语言环境&#xff1a;Python 3.10 编 译 器: PyCharm 框 架: &#xff08;二&#xff09;具体步骤 1. 使…

亲测有效:Maven3.8.1使用Tomcat8插件启动项目

我本地maven的settings.xml文件中的配置&#xff1a; <mirror><id>aliyunmaven</id><mirrorOf>central</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url> </mirror>…