Redis五大基本类型——String字符串命令详解(命令用法详解+思维导图详解)
目录
一、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
cat127.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) 2127.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 range127.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 range127.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 range127.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 range127.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
语法:
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字符串命令详解(命令用法详解+思维导图详解)的全部内容了,希望能对你有所帮助!你的点赞收藏关注是对我最大的支持!
相关文章:

Redis五大基本类型——String字符串命令详解(命令用法详解+思维导图详解)
目录 一、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 …...

Flutter中的Material Theme完全指南:从入门到实战
Flutter作为一款热门的跨平台开发框架,其UI组件库Material Design深受开发者喜爱。本文将深入探讨Flutter Material Theme的使用,包括如何借助Material Theme Builder创建符合产品需求的主题风格。通过多个场景和代码实例,让你轻松掌握这一工…...
Python 第三方库 PyQt5 的安装
目录 前言 PyQt5安装 不同操作系统PyQt5安装 一、Windows 系统 二、macOS 系统 三、Linux 系统(以 Ubuntu 为例) 安装 PyQt5 可能会遇到的问题 一、环境相关问题 二、依赖问题 三、网络问题 四、安装工具问题 五、运行时问题 六、环境配置问…...

CSS基础也要进行模电实验
盒子阴影 圆角边框已经介绍过哩,现在先介绍一下盒子阴影的效果如何实现 CSS3中新增了盒子阴影,可以使用box-shadow属性为盒子添加阴影 这是固定的语法: text-shadow: h-shadow v-shadow blur color; 它有这些可选的值: 哦。 …...

贴代码框架PasteForm特性介绍之markdown和richtext
简介 PasteForm是贴代码推出的 “新一代CRUD” ,基于ABPvNext,目的是通过对Dto的特性的标注,从而实现管理端的统一UI,借助于配套的PasteBuilder代码生成器,你可以快速的为自己的项目构建后台管理端!目前管…...
3D Gaussian Splatting 代码层理解之Part3
最后,内容到达了高斯泼溅过程中最有趣的阶段:渲染!这一步可以说是最关键的,因为它决定了模型的真实性。然而,它也可能是最简单的。在本系列的Part 1和Part2,文章演示了如何将 Raw 3D椭球 转换为可渲染的格式,但现在我们实际上必须完成这项工作并渲染到一组固定的像素上。…...
Ceph 中PG与PGP的概述
在Ceph分布式存储系统中,PG(Placement Group)和PGP(Placement Group for Placement purpose)是两个至关重要的概念,它们共同决定了数据在集群中的分布和复制方式。以下是关于Ceph中PG和PGP关系的详细解释&a…...

已解决:spark代码中sqlContext.createDataframe空指针异常
这段代码是使用local模式运行spark代码。但是在获取了spark.sqlContext之后,用sqlContext将rdd算子转换为Dataframe的时候报错空指针异常 Exception in thread "main" org.apache.spark.sql.AnalysisException: java.lang.RuntimeException: java.lang.Nu…...

flutter字体大小切换案例 小字体,标准字体,大字体,超大字体案例
flutter字体大小切换案例 小字体,标准字体,大字体,超大字体案例 Android iOS设备带有选择记录 我的flutter项目版本 environment: sdk: ‘>3.4.4 <4.0.0’ 图片案例 pubspec.yaml 添加依赖 # 屏幕尺寸适配 https://github.com/OpenF…...

智慧建造-运用Trimble技术将梦幻水族馆变为现实【上海沪敖3D】
项目概述 西雅图水族馆耗资1.6亿美元对海洋馆进行扩建。该项目包括建造三个大型栖息地,每个建筑物几乎都没有直边,其中一个主栖息地由520立方米混凝土和355吨钢筋组成。特纳建筑公司的混凝土团队通过强大的贸易合作伙伴和创新的数字制造技术,…...

【NOIP提高组】计算系数
【NOIP提高组】计算系数 C语言实现C实现Java实现Python实现 💐The Begin💐点点关注,收藏不迷路💐 给定一个多项式 (ax by)^k ,请求出多项式展开后 x^n y^m 项的系数。 输入 共一行,包含 5 个整数&#x…...

IDEA部署AI代写插件
前言 Hello大家好,当下是AI盛行的时代,好多好多东西在AI大模型的趋势下都变得非常的简单。 比如之前想画一幅风景画得先去采风,然后写实什么的,现在你只需描述出你想要的效果AI就能够根据你的描述在几分钟之内画出一幅你想要的风景…...

【阅读记录-章节1】Build a Large Language Model (From Scratch)
目录 1. Understanding large language models1.1 What is an LLM?补充介绍人工智能、机器学习和深度学习的关系机器学习 vs 深度学习传统机器学习 vs 深度学习(以垃圾邮件分类为例) 1.2 Applications of LLMs1.3 Stages of building and using LLMs1.4…...

微服务day08
Elasticsearch 需要安装elasticsearch和Kibana,应为Kibana中有一套控制台可以方便的进行操作。 安装elasticsearch 使用docker命令安装: docker run -d \ --name es \-e "ES_JAVA_OPTS-Xms512m -Xmx512m" \ //设置他的运行内存空间&#x…...
JAVA接入WebScoket行情接口
Java脚好用的库很多,开发效率一点不输Python。如果是日内策略,需要更实时的行情数据,不然策略滑点太大,容易跑偏结果。 之前爬行情网站提供的level1行情接口,实测平均更新延迟达到了6秒,超过10只股票并发请…...

使用Axios函数库进行网络请求的使用指南
目录 前言1. 什么是Axios2. Axios的引入方式2.1 通过CDN直接引入2.2 在模块化项目中引入 3. 使用Axios发送请求3.1 GET请求3.2 POST请求 4. Axios请求方式别名5. 使用Axios创建实例5.1 创建Axios实例5.2 使用实例发送请求 6. 使用async/await简化异步请求6.1 获取所有文章数据6…...

Vue2+ElementUI:用计算属性实现搜索框功能
前言: 本文代码使用vue2element UI。 输入框搜索的功能,可以在前端通过计算属性过滤实现,也可以调用后端写好的接口。本文介绍的是通过计算属性对表格数据实时过滤,后附完整代码,代码中提供的是死数据,可…...

抖音热门素材去哪找?优质抖音视频素材网站推荐!
是不是和我一样,刷抖音刷到停不下来?越来越多的朋友希望在抖音上创作出爆款视频,但苦于没有好素材。今天就来推荐几个超级实用的抖音视频素材网站,让你的视频内容立刻变得高大上!这篇满是干货,直接上重点&a…...
spring-cache concurrentHashMap 自定义过期时间
1.自定义实现缓存构建工厂 import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap;import lombok.Getter; import lombok.Setter; import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.…...

解析传统及深度学习目标检测方法的原理与具体应用之道
深度学习目标检测算法 常用的深度学习的目标检测算法及其原理和具体应用方法: R-CNN(Region-based Convolutional Neural Networks)系列1: 原理: 候选区域生成:R-CNN 首先使用传统的方法(如 Se…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

macOS 终端智能代理检测
🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub 在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如: fatal: unable to access https://github.com/ohmyzsh/oh…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...
boost::filesystem::path文件路径使用详解和示例
boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类,封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解,包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...