当前位置: 首页 > news >正文

Redis 中String类型操作命令(命令演示,时间复杂度,返回值,注意事项)

String 类型

文章目录

  • String 类型
  • set 命令
  • get 命令
  • mset 命令
  • mget 命令
  • get 和 mget 的区别
  • incr 命令
  • incrby 命令
  • decr 命令
  • decrby 命令
  • incrbyfloat 命令
  • append 命令
  • getrange 命令
  • setrange 命令

字符串类型是 Redis 中最基础的数据类型,在讲解命令之前,我们先讨论以下 Redis 中的 String 类型,关于 Redis 中的 String 类型,要注意三点:

① Redis 中的 “键” 都是 String 类型,而 Redis 中的 value 是多种类型的,而在这多种中类型中,它们存储的元素类型也都是 String 类型,比如,list 类型,set 类型,存储的元素值是 String 类型。

② 如果 value 是 String 类型,它可以是一般的字符串,也可以是 JSON、XML 格式的字符串,也可以是 “数字”,二进制流数据,例如图片,但是,这里的字符串最好不要太大,否则的话读取时间会很长。

③ Redis 中 String 类型数据的存储都是按照**“二进制数据”**存储的,并且,Redis 是不处理字符集编码问题的,客户端传入的命令中,使用的是什么字符集编码,存储时就是什么字符集编码。

下面,就来简单看一下几个常用的命令:

set 命令

设置 key 和 value,在不指定选型的默认情况下,如果指定的 key 存在的话,则更新 value 值,如果 key 不存在的话,则存储 key 和 value

语法:set key [expiration EX seconds|PX milliseconds] [NX|XX]

选项解释:

EX seconds :设置 key 的过期时间,单位是:秒

PX milliseconds:设置 key 的过期时间,单位是:毫秒

NX:如果 key 不存在,则存储 key 和 value,如果 key 存在,则不能存储

XX:如果 key 存在则存储,如果 key 不存在,则不存储

时间复杂度:O(1)

返回值:ok

操作演示:

在这里插入图片描述

注意:上述我存储的 key 和 value 都是字符串类型,而在 Redis 中,字符串类型加不加引号都是可以的,以及加双引号或单引号也都不会出错。

get 命令

根据 key 获取 value,如果 value 的数据类型不是 String ,则会报错

语法:get key

时间复杂度:O(1)

返回值:key 对应的value,如果key不存在,返回 nil

操作演示:

在这里插入图片描述

mset 命令

一次设置多个 key

语法:mset key [key……]

时间复杂度:O(k),这里的 k 表示 key 的个数

返回值:ok

操作演示:

在这里插入图片描述

mget 命令

一次获取多个 key 的 value

语法:mget key [key……]

时间复杂度:O(k)

返回值:key 对应的 value

操作演示:

在这里插入图片描述

get 和 mget 的区别

要记住,Redis 的架构是“客户端-服务器”架构,每一次传入命令都是向服务器发送一次请求,是通过网络传输的,而网络传输的速度也是比较慢的,并且也可能会因为一些因素导致传输失败,毕竟网上有一句话是这样讲的:再牛的网络,也敌不过挖掘机的一铲子,所以,如果要设置多个key 或 获取多个 key 使用 get 和 mget 所发送请求的个数就相差很大,如下图:

在这里插入图片描述

在这里插入图片描述

所以,mget / mset 这种批量操作,可以有效的节约网络时间,但需要注意的时,批量操作时指定的 key 不要太多,否则的话,容易导致 Redis 阻塞。

incr 命令

将 key 对应的 String 表示的数字加1,如果 key 不存在,则设置key,并且认为 key 对应的 vlaue 的值为 0,如果,key 所对应的 value 的值不是一个数字,或者数字的范围超过了 64位有符号的整型,则报错

语法:incr key

时间复杂度:O(1)

返回值:成功加完后的数值

操作演示:

在这里插入图片描述

incrby 命令

将 key 对应的 String 表示的数字加上指定的 n,如果 key 不存在,则设置key,并且认为 key 对应的 vlaue 的值为 0,如果,key 所对应的 value 的值不是一个数字,或者数字的范围超过了 64位有符号的整型,则报错

语法:incrby key n

时间复杂度:O(1)

返回值:成功添加后的值

操作演示:

在这里插入图片描述

decr 命令

将 key 对应的 String 表示的数字减 1,如果 key 不存在,则设置key,并且认为 key 对应的 vlaue 的值为 0,如果,key 所对应的 value 的值不是一个数字,或者数字的范围超过了 64位有符号的整型,则报错

语法:decr key

时间复杂度:O(1)

返回值:成功减去后的值

操作演示:

在这里插入图片描述

decrby 命令

decrby 命令同样也是减操作,只不过是减去我们指定的数值,和上面的 incrby 命令的操作方式一样,这里就不再演示。

incrbyfloat 命令

incrbyfloat 命令是针对 value +/- 小数,操作方式同样和上面的加减命令操作方式一样,这里也不再演示。

以上一组命令都是对value是数字时进行操作的,很多存储系统和编程语⾔内部使⽤CAS机制实现计数功能,会有⼀定的CPU开销,但在Redis中完全不存在这个问题,因为Redis是单线程架构,任何命令到了Redis服务端都要顺序执⾏。

append 命令

如果 key 已经存在,并且 value 是字符串,那么 append 命令会将指定的value值拼接到字符串后面,如果不存在,用法和set一样,就会添加一个新的元素

语法:append key value

时间复杂度:O(1)

返回值:字符串的长度

操作演示:

在这里插入图片描述

getrange 命令

获取 key 对应的字符中的子串

语法:getrange key start end

start:左区间(闭)

end:右区间(闭)

并且可以使用负数表示倒数,-1 表示最后一个位置的元素,-2 表示倒数第二个位置的元素

时间复杂度:O(k),k 是[start,end]区间的长度

返回值:返回指定位置的字串

操作演示:

在这里插入图片描述

setrange 命令

覆盖字符串的一部分

语法:setrange key offset value

offset:指定需要覆盖的开始位置

value:新的字符串

时间复杂度:O(k),k 表示 value 的长度

返回值:替换后的字符串的长度

操作演示:

在这里插入图片描述

http://www.lryc.cn/news/398413.html

相关文章:

  • 2024亚太杯中文赛B题洪水灾害的数据分析与预测原创论文分享
  • Oracle 19c 统一审计表清理
  • PostgreSQL(二十二)缓冲区管理器
  • 流程制造业与离散制造业有何差异?流程行业智能制造关注什么?
  • 【论文速读】《面向深度学习的联合消息传递与自编码器》,无线AI的挑战和解决思路
  • C++从入门到起飞之——输入输出!
  • 米文AD10配置gmsl摄像头操作
  • 【Selenium配置】WebDriver安装浏览器驱动(ChromeEdge)
  • 预测算法面试
  • 号称世界上第一个开源实时翻译的 App,微软开源GraphRAG:极大增强大模型问答、摘要、推理,以及开源基于ChatGPT的超级文本代码智能体(附代码地址)
  • PyTorch 2-深度学习-模块
  • 【MyBatis】MyBatis 理论 40 问(二)
  • 数据分析——Python网络爬虫(三){爬虫基本原理}
  • Linux 忘记root密码,通过单用户模式修改
  • 安卓热门面试题二
  • agents 分类
  • 【期末考试复习】概率论与数理统计(知识点模式 - 复习题2)
  • Jetpack Compose实现一个简单的微信UI
  • myeclipse开发ssm框架项目图书管理系统 mysql数据库web计算机毕业设计项目
  • 网络安全防御 -- 防火墙安全策略用户认证综合实验
  • 捷配笔记-PCB阻焊颜色对产品有什么影响?
  • 网信大数据信用报告查询怎么查?网信大数据有什么作用?
  • 【Vue】vue-element-admin组件化功能
  • [论文笔记]涨点近5%! 以内容中心的检索增强生成可扩展的级联框架:Pistis-RAG
  • 时钟系统框图(时钟树)解析
  • DNS缓存详解
  • 一款好用的特殊字符处理工具
  • 双重锁定:零信任沙箱 完美的安全保障
  • 【小沐学Python】在线web数据可视化Python库:Bokeh
  • GitHub 站点打不开