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

【Redis学习】String字符串

Redis学习笔记:

https://blog.csdn.net/2301_80220607/category_13051025.html?spm=1001.2014.3001.5482

前言:

字符串类型是 Redis 最基础的数据类型,关于字符串需要特别注意:首先 Redis 中所有的键的类型都是字符串类型,而且其他几种数据结构也都是在字符串类型基础上构建的,例如列表和集合的元素类型是字符串类型,所以字符串类型能为其他 4 种数据结构的学习奠定基础。其次,字符串类型的值实际可以是字符串(包含一般格式的字符串或者类似 JSON、XML 格式的字符串)、数字(可以是整型或者浮点型)、甚至是二进制流数据(例如图片、音频、视频等)。不过一个字符串的最大值不能超过 512 MB。

目录

1.1 常见命令

1.1 SET

1.2 GET

1.3 MGET

1.4 MSET

1.5 SETNX

2. 计数命令

2.1 INCR

2.2 INCRBY

2.3 DECR

2.4 DECRBY

2.5 INCRBYFLOAT

3. 其它命令

3.1 APPEND

3.2 GETRANGE

3.3 SETRANGE

3.4 STRLEN

4.String内部编码

5. 典型使用场景


1.1 常见命令

1.1 SET

将 string 类型的 value 设置到 key 中。如果 key 之前存在,则覆盖,⽆论原来的数据类型是什么。之 前关于此 key 的 TTL 也全部失效。
语法:
SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
时间复杂度:O(1)
选项:
SET 命令⽀持多种选项来影响它的⾏为:
  • EX seconds⸺使⽤秒作为单位设置 key 的过期时间。
  • PX milliseconds⸺使⽤毫秒作为单位设置 key 的过期时间。
  • NX ⸺只在 key 不存在时才进⾏设置,即如果 key 之前已经存在,设置不执⾏。
  • XX ⸺只在 key 存在时才进⾏设置,即如果 key 之前不存在,设置不执⾏。
注意:由于带选项的 SET 命令可以被 SETNX SETEX PSETEX 等命令代替,所以之后的版本 中,Redis 可能进⾏合并。
返回值:
  • 如果设置成功,返回 OK。
  • 如果由于 SET 指定了 NX 或者 XX 但条件不满⾜,SET 不会执⾏,并返回 (nil)。

1.2 GET

获取 key 对应的 value。如果 key 不存在,返回 nil。如果 value 的数据类型不是 string,会报错。
语法:
GET key
  • 时间复杂度:O(1)
  • 返回值:key 对应的 value,或者 nil 当 key 不存在。

1.3 MGET

⼀次性获取多个 key 的值。如果对应的 key 不存在或者对应的数据类型不是 string,返回 nil。
语法:
MGET key [key ...]
  • 时间复杂度:O(N),N 是 key 数量
  • 返回值:对应 value 的列表

1.4 MSET

⼀次性设置多个 key 的值。
语法:
MSET key value [key value ...]
  • 时间复杂度:O(N) N 是 key 数量
  • 返回值:永远是 OK

1.5 SETNX

设置 key-value 但只允许在 key 之前不存在的情况下。
语法:
SETNX key value
  • 时间复杂度:O(1)
  • 返回值:1 表⽰设置成功。0 表⽰没有设置。

2. 计数命令

2.1 INCR

将 key 对应的 string 表⽰的数字加⼀。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对 应的 string 不是⼀个整型或者范围超过了 64 位有符号整型,则报错。
语法:
INCR key
  • 时间复杂度:O(1)
  • 返回值:integer 类型的加完后的数值。

2.2 INCRBY

将 key 对应的 string 表⽰的数字加上对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如 果 key 对应的 string 不是⼀个整型或者范围超过了 64 位有符号整型,则报错。
语法:
INCRBY key decrement
  • 时间复杂度:O(1)
  • 返回值:integer 类型的加完后的数值。

2.3 DECR

将 key 对应的 string 表⽰的数字减⼀。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对 应的 string 不是⼀个整型或者范围超过了 64 位有符号整型,则报错。
语法:
DECR key
  • 时间复杂度:O(1)
  • 返回值:integer 类型的减完后的数值。

2.4 DECRBY

将 key 对应的 string 表⽰的数字减去对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如 果 key 对应的 string 不是⼀个整型或者范围超过了 64 位有符号整型,则报错。
语法:
DECRBY key decrement
  • 时间复杂度:O(1)
  • 返回值:integer 类型的减完后的数值。

2.5 INCRBYFLOAT

将 key 对应的 string 表⽰的浮点数加上对应的值。如果对应的值是负数,则视为减去对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的不是 string,或者不是⼀个浮点数,则报 错。允许采⽤科学计数法表⽰浮点数。
语法:
INCRBYFLOAT key increment
  • 时间复杂度:O(1)
  • 返回值:加/减完后的数值。

3. 其它命令

3.1 APPEND

如果 key 已经存在并且是⼀个 string,命令会将 value 追加到原有 string 的后边。如果 key 不存在, 则效果等同于 SET 命令。
语法:
APPEND KEY VALUE
  • 时间复杂度:O(1). 追加的字符串⼀般⻓度较短, 可以视为 O(1).
  • 返回值:追加完成之后 string 的⻓度。

3.2 GETRANGE

返回 key 对应的 string 的⼦串,由 start 和 end 确定(左闭右闭)。可以使⽤负数表⽰倒数。-1 代表 倒数第⼀个字符,-2 代表倒数第⼆个,其他的与此类似。超过范围的偏移量会根据 string 的⻓度调整 成正确的值。
语法:
GETRANGE key start end
  • 时间复杂度:O(N). N 为 [start, end] 区间的⻓度. 由于 string 通常⽐较短, 可以视为是 O(1)
  • 返回值:string 类型的⼦串

3.3 SETRANGE

覆盖字符串的⼀部分,从指定的偏移开始。
语法:
SETRANGE key offset value
  • 时间复杂度:O(N), N 为 value 的⻓度. 由于⼀般给的 value ⽐较短, 通常视为 O(1).
  • 返回值:替换后的 string 的⻓度。

3.4 STRLEN

获取 key 对应的 string 的⻓度。当 key 存放的类似不是 string 时,报错。
语法:
STRLEN key
  • 时间复杂度:O(1)
  • 返回值:string 的⻓度。或者当 key 不存在时,返回 0。

4.String内部编码

字符串类型的内部编码有3种:

  • int:8个字节的长整型
  • embstr:小于等于39个字节的字符串
  • raw:大于39个字节的字符串

整形类型示例如下:

127.0.0.1:6379> set key 111
OK
127.0.0.1:6379> object encoding key
"int"

短字符串类型示例:

127.0.0.1:6379> set key aaa
OK
127.0.0.1:6379> object encoding key
"embstr"

长字符串类型示例:

127.0.0.1:6379> set key aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
OK
127.0.0.1:6379> object encoding key
"raw"

5. 典型使用场景

  • 缓存功能
  • 计数功能
  • 共享会话(Session)
  • 手机验证码

感谢各位大佬观看,创作不易,还望各位大佬点赞支持!!!

http://www.dtcms.com/a/424331.html

相关文章:

  • 项目实战:ecshop
  • 白城北京网站建设邵阳小学网站建设
  • SpringBoot 的配置文件与日志
  • 物联网技术与应用第三节课笔记
  • 【Java】P10 面向对象编程完全指南(S1-2 基础篇 包管理与导入)
  • C++ 特性 --内部类 模板类中取出来类类型问题
  • ip地址直接访问网站东莞市网络seo推广企业
  • 5090裸金属租用:捷智算助力企业数字化转型
  • 北京网站建设设计南阳网站建设哪家好
  • 大模型原理与实践:第一章-NLP基础概念完整指南_第1部分-概念和发展历史
  • 国企门户网站建设方案电子商务网站策划方案
  • 【Linux】cgdb调试工具的使用
  • 南京建设网站要多少钱线上推广活动
  • 做网站专题页需要注意什么app制作开发报价
  • iTerm2使用Shell Integration优雅地实现单个文件上传与下载
  • 怎样做网站漂浮精通网站开发
  • 西安网站制作sxyun昆明网站建设公司哪家好
  • 突破NER性能瓶颈:BERT与LLM协同的混合架构实践
  • 网站建设与管理课件seo排名优化联系13火星软件
  • 网站做前端去国外做外卖网站
  • 分布式任务事务框架设计与实现方案
  • 漳州 网站建设多少钱成都旅游攻略景点必去
  • pytorch基本运算-torch.normal()函数生成的随机数据添加噪声
  • 通辽建设工程网站网上做效果图网站有哪些
  • DragonBalls_One013
  • 湖南网站建设哪家有定制软件如何收费
  • 专门做招商的网站是什么wordpress两栏
  • 七彩喜艾灸机器人:传统技艺与AI的共生共舞
  • svn: E200009
  • SVN 主分支合并之通过主分支合并子分支操作流程