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…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
归并排序:分治思想的高效排序
目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法,由约翰冯诺伊曼在1945年提出。其核心思想包括: 分割(Divide):将待排序数组递归地分成两个子…...
Linux 内存管理调试分析:ftrace、perf、crash 的系统化使用
Linux 内存管理调试分析:ftrace、perf、crash 的系统化使用 Linux 内核内存管理是构成整个内核性能和系统稳定性的基础,但这一子系统结构复杂,常常有设置失败、性能展示不良、OOM 杀进程等问题。要分析这些问题,需要一套工具化、…...
