2024 RedisAnd Mysql基础与进阶操作系列(16-1)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: Redis数据类型之string类型及操作:含【NCR/DECR/INCRBY/DECRBY、 GETSET、SETNX、SETRANGE/GETRANGE、SETBIT/GETBIT、MSET/MGET/MSETNX等具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法

欢迎各位彦祖与热巴畅游本人专栏与博客

你的三连是我最大的动力

以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现]

专栏跑道一

➡️网络空间安全——全栈前沿技术持续深入学习

image.gif

专栏跑道二

➡️ 24 Network Security -LJS

image.gif

image.gif

image.gif

专栏跑道三


➡️ MYSQL REDIS Advance operation

image.gif

专栏跑道四

➡️HCIP;H3C-SE;CCIP——LJS[华为、华三、思科高级网络]

image.gif

专栏跑道五

➡️RHCE-LJS[Linux高端骚操作实战篇]

image.png

专栏跑道六

➡️数据结构与算法[考研+实际工作应用+C程序设计]

image.gif

专栏跑道七

➡️RHCSA-LJS[Linux初级及进阶骚技能]

image.gif

image.gif

上节回顾





Redis数据类型之string类型及操作

1.string 类型及操作

简介

  • 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这也就是意味着该类型可以接受任何格式的数据
  • 如JPEG图像数据或Json对象描述信息等。
  • 在Redis中字符串类型的Value多可以容纳的数据长度是512M。

2.相关命令列表[重在融汇贯通和如何快速运用]

String命令语法格式及说明表一

String命令语法格式及说明表一

命令原型 时间复杂度 命令描述 相关命令列表
APPEND key value O(1)
  • 如果该Key已经存在,APPEND命令将参数Value的数据追加到已存在Value的末尾。

  • 如果该Key不存在,APPEND命令将会创建一个新的Key/Value
追加后 Value的 长度
DECR key O(1)
  • 将指定Key的Value原子性的递减1。

  • 如果该Key不存在,其 初始值为0,在decr之后其值为-1。

  • 如果Value的值不能转 换为整型值,如Hello,该操作将执行失败并返回相应的错 误信息。

  • 注意:该操作的取值范围是64位有符号整型
递减后的 Value 值
INCR key O(1)
  • 将指定Key的Value原子性的递增1。

  • 如果该Key不存在,其初始值为0,在incr之后其值为1。

  • 如果Value的值不能转换 为整型值,如Hello,该操作将执行失败并返回相应的错误 信息。

  • 注意:该操作的取值范围是64位有符号整型
递增后的 Value 值
DECRBY key decrement O(1)
  • 将指定Key的Value原子性的减少decrement。

  • 如果该Key 不存在, 其初始值为0,在decrby之后其值为decrement。

  • 如果Value的值不能转换为整型值,如 Hello,该操作将执行失败并返回相应的错误信 息。

  • 注意: 该操作的取值范围是64位有符号整型
减少后的 Value 值
INCRBY key increment O(1)
  • 将指定Key的Value原子性的增加increment。

  • 如果该Key 不存在, 其初始值为0,在incrby之后其值为increment。

  • 如果Value的值不能转换为整型值,如Hello,该操作将执 行失败并返回相应的错误信 息。

  • 注意:该操作的取值范围 是64位有符号整型
减少后的 Value 值

String命令语法格式及说明表二

String命令语法格式及说明表二

命令原型 时间复杂度 命令描述 相关命令列表
GET key O(1)
  • 获取指定Key的Value。

  • 如果与该Key关联的Value不是 string类型,Redis将返回错误信息

  • 因为GET命令只能用 于获取string Value
与该Key 相关的 Value, 如果该 Key不存 在,返回 ni
SET key value O(1)
  • 设定该Key持有指定的字符串Value
  • 如果该Key已经存在,则覆盖其原有值
总是返 回"OK"

GET

SET key value

O(1)
  • 原子性的设置该Key为指定的Value,同时返回该Key的原 有值。

  • 和GET命令一样,该命令也只能处理string Value, 否则Redis将给出相关的错误信息
返回该 Key的原 有值,如 果该Key 之前并不 存在,则 返回ni
STRLEN key O(1)
  • 返回指定Key的字符值长度,如果Value不是string类型

  • Redis将执行失败并给出相关的错误信息
返回指定Key的 Value字 符长度, 如果该 Key不存 在,返回 0
SETEX key seconds value O(1)
  • 原子性完成两个操作,一是设置该Key的值为指定字符串, 同时设置该Key在Redis服务器中的存活时间(秒数)。

  • 该命令主要应用于Redis被当做Cache服务器使用时
SETNX key value O(1)
  • 如果指定的Key不存在,则设定该Key持有指定字符串 Value,此时其效果等价于SET命令。

  • 相反,如果该Key已 经存在,该命令将不做任何操作并返回
1表示设置成功, 否则0
SETRANGE key offset value O(1)
  • 替换指定Key的部分字符串值。从offset开始,替换的长度为该命令第三个参 数value的字符串长度,其中如果offset 的值大于该Key的原有值Value的字符串长度,Redis将会 在Value的后面补齐(offset - strlen(value))数量的0x00,之后再追加新值。

  • 如果该键不存在,该命令会将其原值的长度假设为0,并在其后添补offset个0x00后 再追加新值。

  • 鉴于字符串Value的最大长度为512M,因此offset的最大值为536870911。最后需要注意的是,如果该命令在执行时致使指定Key的原有值长度增加,这将会导致Redis重新分配足够的内存以容纳替换后的全部字符串,因此就会带来一定的性能折损
修改后的字符串 Value长 度

 

String命令语法格式及说明表三

String命令语法格式及说明表三

命令原型 时间复杂度 命令描述 相关命令列表
GETRANGE key start end O(1)
  • 如果截取的字符串长度很短,我们可以该命令的时间复杂度视为O(1),否则就是O(N),这里N表示截取的子字符串长度。

  • 该命令在截取子字符串时,将以闭区间的方式同时 包含start(0表示第一个字符)和end所在的字符

  • 如果end值超过Value的字符长度,该命令将只是截取从start开始之后所有的字符数据
子字符串
SETBIT key offset value O(1)
  • 设置在指定Offset上BIT的值,该值只能为1或0,在设定后该命令返回该 Offset上原有的BIT值。

  • 如果指定Key不存在,该命令将创建一个新值,并在指定的Offset上设定参 数中的BIT值。

  • 如果Offset大于 Value的字符长度,Redis将 拉长Value值并在指定Offset上设置参数中的BIT值,中间添加的BIT值为0。最后需要说明的是 Offset值必须大于 0
在指定Offset上的BIT原 有值
GETBIT key offset O(1)
  • 返回在指定Offset上BIT的值,0或1。

  • 如果Offset超过 string value的长度,该命令将返回0,所以对于空字符串 始终返回0
在指定 Offset上 的BIT 值
MGET key [key ...] O(N)
  • N表示获取Key的数量。返回所有指定Keys的Values

  • 如果其中某个Key不存在,或者其值不为string类型,该Key的Value将返回nil
返回一组 指定Keys 的Values 的列表
MSET key value [key value ...] O(N)
  • N表示指定Key的数量。

  • 该命令原子性的完成参数中所有 key/value的设置操作

  • 具体行为可以看成是多次迭代执行SET命令。
该命令不会失败, 始终返回 OK
MSETNX key value [key value ...] O(N)
  • N表示指定Key的数量。

  • 该命令原子性的完成参数中所有 key/value的设置操作

  • 其具体行为可以看成是多次迭代执行SETNX命令。

  • 然而这里需要明确说明的是,如果在这一 批Keys中有任意一个Key已经存在了,那么该操作将全部回滚,即所有的修改都不会生效。
1表示所有Keys都设置成 功,0则 表示没有 任何Key 被修改

3.命令示例[建议大家上手小练一下下;时间是检验真理的唯一标准]

3.1.执行Redis客户端工具

SET/GET/APPEND/STRLEN:
/> redis-cli
  • image.gif
  • 判断该键是否存在,存在返回1,否则返回0
redis 127.0.0.1:6379>exists mykey   
(integer) 0
  • image.gif
  • 如上段代码:该键并不存在,因此append命令返回当前Value的长度
redis 127.0.0.1:6379> append mykey "hello" 
(integer) 5
  • image.gif
  • 如上:该键已经存在,因此返回追加后Value的长度
redis 127.0.0.1:6379>append mykey " world"
(integer) 11
  • image.gif
  • 通过get命令获取该键,以判断append的结果
redis 127.0.0.1:6379>get mykey  
"hello world"
  • image.gif
  • 通过set命令为键设置新值,并覆盖原有值
redis 127.0.0.1:6379>set mykey "this is a test"
OK
redis 127.0.0.1:6379>get mykey
"this is a test"
  • image.gif
  • 获取指定Key的字符长度,等效于C库中strlen函数
redis 127.0.0.1:6379>strlen mykey  
(integer) 14
  • image.gif

3.2. INCR/DECR/INCRBY/DECRBY:

  • 设置Key的值为20
redis 127.0.0.1:6379>set mykey 20
OK
  • image.gif
  • 该Key的值递增1
redis 127.0.0.1:6379>incr mykey
(integer) 21
  • image.gif
  • 该Key的值递减1
redis 127.0.0.1:6379>decr mykey
(integer) 20
  • image.gif
  • 删除已有键
redis 127.0.0.1:6379>del mykey  
(integer) 1
  • image.gif
  • 对空值执行递减操作,其原值被设定为0,递减后的值为-1
redis 127.0.0.1:6379>decr mykey
(integer) -1
redis 127.0.0.1:6379>del mykey   
(integer) 1
  • image.gif
  • 对空值执行递增操作,其原值被设定为0,递增后的值为1
redis 127.0.0.1:6379> incr mykey
(integer) 1
  • image.gif
  • 将该键的Value设置为不能转换为整型的普通字符串
redis 127.0.0.1:6379>set mykey hello
OK
  • image.gif
  • 在该键上再次执行递增操作时,Redis将报告错误信息
redis 127.0.0.1:6379>incr mykey
(error) ERR value is not an integer or out of range
redis 127.0.0.1:6379>set mykey 10
OK
redis 127.0.0.1:6379>decrby mykey 5
(integer) 5
redis 127.0.0.1:6379>incrby mykey 10
(integer) 15
  • image.gif

3.3. GETSET

  • 将计数器的值原子性的递增1
redis 127.0.0.1:6379>incr mycounter 
(integer) 1
  • image.gif
  • 在取计数器原有值的同时,并将其设置为新值,这两个操作原子性的同时完成
redis 127.0.0.1:6379>getset mycounter 0 
"1"
  • image.gif
  • 查看设置后的结果
redis 127.0.0.1:6379>get mycounter
"0"
  • image.gif

3.4: SETEX

  • 设置指定Key的过期时间为10秒
redis 127.0.0.1:6379>setex mykey 10 "hello"   
OK
  • image.gif
  • 通过ttl命令查看一下指定Key的剩余存活时间(秒数),0表示已经过期,-1表示永不过期
redis 127.0.0.1:6379>ttl mykey 
(integer) 4
  • image.gif
  • 在该键的存活期内我们仍然可以获取到它的Value
redis 127.0.0.1:6379>get mykey 
"hello"
  • image.gif
  • 该ttl命令的返回值显示,该Key已经过期
redis 127.0.0.1:6379>ttl mykey 
(integer) 0
  • image.gif
  • 获取已过期的Key将返回nil
redis 127.0.0.1:6379>get mykey 
(nil)
  • image.gif

3.5: SETNX

  • 删除该键,以便于下面的测试验证
redis 127.0.0.1:6379>del mykey 
(integer) 1
  • image.gif
  • 该键并不存在,因此该命令执行成功
redis 127.0.0.1:6379>setnx mykey "hello" 
(integer) 1
  • image.gif
  • 该键已经存在,因此本次设置没有产生任何效果
redis 127.0.0.1:6379>setnx mykey "world" 
(integer) 0
  • image.gif
  • 从结果可以看出,返回的值仍为第一次设置的值
redis 127.0.0.1:6379>get mykey 
"hello"
  • image.gif

3.6: SETRANGE/GETRANGE

  • 设定初始值
redis 127.0.0.1:6379>set mykey "hello world" 
OK
  • image.gif
  • 从第六个字节开始替换2个字节(dd只有2个字节)
redis 127.0.0.1:6379>setrange mykey 6 dd   
(integer) 11
  • image.gif
  • 查看替换后的值
redis 127.0.0.1:6379>get mykey
"hello ddrld"
  • image.gif
  • offset已经超过该Key原有值的长度了,该命令将会在末尾补0
redis 127.0.0.1:6379>setrange mykey 20 dd 
(integer) 22
  • image.gif
  • 查看补0后替换的结果
redis 127.0.0.1:6379>get mykey 
"hello ddrld\x00\x00\x00\x00\x00\x00\x00\x00\x00dd"
  • image.gif
  • 删除该Key
redis 127.0.0.1:6379>del mykey 
(integer) 1
  • image.gif
  • 替换空值
redis 127.0.0.1:6379>setrange mykey 2 dd 
(integer) 4
  • image.gif
  • 查看替换空值后的结果
redis 127.0.0.1:6379>get mykey 
"\x00\x00dd"
  • image.gif
  • 设置新值
redis 127.0.0.1:6379>set mykey "0123456789"   
OK
  • image.gif
  • 截取该键的Value,从第一个字节开始,到第二个字节结束
redis 127.0.0.1:6379>getrange mykey 1 2 
"12"
  • image.gif
  • 20已经超过Value的总长度,因此将截取第一个字节后面的所有字节
redis 127.0.0.1:6379>getrange mykey 1 20   
"123456789"
  • image.gif

3.7: SETBIT/GETBIT

redis 127.0.0.1:6379>del mykey
(integer) 1
  • image.gif
  • 设置从0开始计算的第七位BIT值为1,返回原有BIT值0
redis 127.0.0.1:6379> setbit mykey 7 1   
(integer) 0
  • image.gif
  • 获取设置的结果,二进制的0000 0001的十六进制值为0x01
redis 127.0.0.1:6379>get mykey
"\x01"
  • image.gif
  • 设置从0开始计算的第六位BIT值为1,返回原有BIT值0
redis 127.0.0.1:6379>setbit mykey 6 1   
(integer) 0
  • image.gif
  • 获取设置的结果,二进制的0000 0011的十六进制值为0x03
redis 127.0.0.1:6379>get mykey
"\x03"
  • image.gif
  • 返回了指定Offset的BIT值
redis 127.0.0.1:6379>getbit mykey 6
(integer) 1
  • image.gif
  • Offset已经超出了value的长度,因此返回0
redis 127.0.0.1:6379>getbit mykey 10
(integer) 0
  • image.gif

3.8:MSET/MGET/MSETNX

  • 批量设置了key1和key2两个键
redis 127.0.0.1:6379>mset key1 "hello" key2 "world"  
OK
  • image.gif
  • 批量获取了key1和key2两个键的值
redis 127.0.0.1:6379>mget key1 key2 
1) "hello"
2) "world"
  • image.gif
  • 批量设置了key3和key4两个键,因为之前他们并不存在,所以该命令执行成功并返回1
redis 127.0.0.1:6379>msetnx key3 "stephen" key4 "liu"
(integer) 1
redis 127.0.0.1:6379>mget key3 key4 
1) "stephen"
2) "liu"
  • image.gif
  • 批量设置了key3和key5两个键,但是key3已经存在,所以该命令执行失败并返回0
redis 127.0.0.1:6379>msetnx key3 "hello" key5 "world"
(integer) 0
  • image.gif
  • 批量获取key3和key5,由于key5没有设置成功,所以返回nil
redis 127.0.0.1:6379>mget key3 key5 
1) "stephen"
2) (nil)




相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
16天前
|
NoSQL 关系型数据库 MySQL
2024 RedisAnd Mysql基础与进阶操作系列(17)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
如何通过php和python客户端来操作Redis数据库等保姆式具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
16天前
|
存储 NoSQL 关系型数据库
2024 RedisAnd Mysql基础与进阶操作系列(13)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
Redis之Nosql数据库分类、存储类型、特点;Redis 作用、与其他库的对比、使用场景以及如何部署、安装等具体详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
16天前
|
SQL 存储 NoSQL
2024Mysql And Redis基础与进阶操作系列(12)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
MYSQL之如何开启、提交、回滚事务和MYSQL事务特性等具体详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
2024Mysql And Redis基础与进阶操作系列(12)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
|
16天前
|
SQL NoSQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(13)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
MYSQL日志之详解如何配置查看二进制、查询及慢查询日志;备份与恢复等具体详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
2024Mysql And Redis基础与进阶操作系列(13)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
|
17天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习(8)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
17天前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构的基本概念;算法的基本概念、特性以及时间复杂度、空间复杂度等举例说明;【含常见的报错问题及其对应的解决方法】
|
17天前
|
存储 人工智能 算法
2024重生之回溯数据结构与算法系列学习(7)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
IKU达人数据结构与算法系列学习之队列的基本概念、如何判断队列已满/已空、队列的链式存储结构[头的出入队]、双端队列、中缀、后缀、前缀表达式、特殊矩阵和一二维数组的压缩储存等具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法 你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
17天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找习题精讲等具体详解步骤以及举例说明
|
16天前
|
NoSQL 关系型数据库 Redis
2024 RedisAnd Mysql基础与进阶操作系列(18)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
Redis 如何高级应用之密码防护、数据持久化、基于文件追加方式持久化、主从同步、消息订阅类型与之对应的命令、事务从开始到执行会经历以下三个阶段、多数据库等保姆式具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
16天前
|
存储 NoSQL 关系型数据库
2024 RedisAnd Mysql基础与进阶操作系列(15)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
2024全网最全切最为详细的Redis库配置;你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽

相关产品

  • 云数据库 RDS MySQL 版