【Redis】 String 字符串类型常见命令

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 【Redis】 String 字符串类型常见命令

🍃前言

字符串类型是 Redis 最基础的数据类型,下面将介绍使用该类型时常用的命令,关于字符串需要特别注意:

  1. ⾸先 Redis 中所有的键的类型都是字符串类型,⽽且其他⼏种数据结构也都是在字符串类似基础上构建的,例如列表和集合的元素类型是字符串类型,所以字符串类型能为其他 4 种数据结构的学习奠定基础。
  2. 其次,字符串类型的值实际可以是字符串,包含⼀般格式的字符串或者类似JSON、XML格式的字符串;数字,可以是整型或者浮点型;甚⾄是⼆进制流数据,例如图⽚、⾳频、视频等。不过⼀个字符串的最⼤值不能超过512MB。

🎋常见命令

🚩set

将 string 类型的 value 设置到 key 中。如果 key 之前存在,则覆盖,⽆论原来的数据类型是什么。之前关于此 key 的 TTL 也全部失效。

语法:

SET key value [expiration EX seconds|PX milliseconds] [NX|XX]

SET命令⽀持多种选项来影响它的⾏为:

  • EX seconds 使⽤秒作为单位设置 key 的过期时间。
  • PX milliseconds 使⽤毫秒作为单位设置 key的过期时间。
  • NX 只在 key 不存在时才进⾏设置,即如果 key 之前已经存在,设置不执⾏。
  • XX 只在 key 存在时才进⾏设置,即如果 key 之前不存在,设置不执⾏。

时间复杂度:

  • O(1)

返回值:

  • 如果设置成功,返回 OK。
  • 如果由于 SET 指定了 NX 或者 XX 但条件不满⾜,SET 不会执⾏,并返回(nil)。

🚩get

key 对应的 value。如果 key 不存在,返回 nil。如果 value 的数据类型不是string,会报错。

语法:

get key

时间复杂度:

  • O(1)

返回值:

  • key对应的value,或者 nil 当 key 不存在

🚩mget

⼀次性获取多个 key 的值。如果对应的 key 不存在或者对应的数据类型不是 string,返回 nil。

语法:

mget key [key ...]

时间复杂度:

  • O(N) , N是key数量,数量较少时可理解为O(1)

返回值:

  • 对应 value 的列表

🚩mset

次性设置多个 key 的值。

语法:

mset key value [key value ...]

时间复杂度:

  • O(N) ,N是key数量,数量较少时可理解为O(1)

返回值:

  • 永远是 OK

🚩setnx

设置 key-value 但只允许在 key 之前不存在的情况下。

语法:

setnx key value

时间复杂度:

  • O(1)

返回值:

  • 1 表⽰设置成功。0 表⽰没有设置

🌳计数命令

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

🚩incr

将 key 对应的 string 表⽰的数字加⼀。

  • 如果 key 不存在,则视为 key 对应的 value 是 0。
  • 如果 key 对应的 string 不是⼀个整型或者范围超过了 64位有符号整型,则报错。

语法:

incr key

时间复杂度:

  • O(1)

返回值

  • integer 类型的加完后的数值。

🚩incrby

将 key 对应的 string 表⽰的数字加上对应的值。

  • 如果 key 不存在,则视为 key 对应的 value 是 0。
  • 如果 key 对应的 string 不是⼀个整型或者范围超过了 64 位有符号整型,则报错

语法:

incrby key decrement

时间复杂度:

  • O(1)

返回值:

  • integer类型的加完后的数值

🚩decr

将 key 对应的 string 表⽰的数字减⼀。

  • 如果 key 不存在,则视为 key 对应的 value 是 0。
  • 如果 key 对应的 string 不是⼀个整型或者范围超过了 64 位有符号整型,则报错。

语法:

decr key

时间复杂度:

  • O(1)

返回值:

  • integer 类型的减完后的数值

🚩decby

将 key 对应的 string 表⽰的数字减去对应的值。

  • 如果 key 不存在,则视为 key 对应的 value 是 0。
  • 如果 key 对应的 string 不是⼀个整型或者范围超过了 64 位有符号整型,则报错

语法:

decby key decrement

时间复杂度:

  • O(1)

返回值:

  • integer 类型的减完后的数值。

🚩incrbyfloat

将 key 对应的 string 表⽰的浮点数加上对应的值。如果对应的值是负数,则视为减去对应的值。

  • 如果key 不存在,则视为 key 对应的 value 是0。
  • 如果key 对应的不是 string,或者不是⼀个浮点数,则报错。

允许采⽤科学计数法表⽰浮点数。

语法:

incrbyfloat key decrement

时间复杂度:

  • O(1)

返回值:

  • 加/减完后的数值

🍀其他命令

🚩append

  • 如果 key 已经存在并且是⼀个 string,命令会将 value 追加到原有 string 的后边。
  • 如果 key 不存在,则效果等同于 SET 命令

语法:

append key value

时间复杂度:

  • O(1).追加的字符串⼀般⻓度较短,可以视为O(1).

返回值:

  • 追加完成之后 string 的⻓度。

🚩getrange

返回 key 对应的 string 的⼦串,由 start 和 end 确定(左闭右闭)。

  • 可以使⽤负数表⽰倒数。-1代表倒数第⼀个字符,-2代表倒数第⼆个,其他的与此类似。
  • 超过范围的偏移量会根据 string 的⻓度调整成正确的值

语法:

getrange key start end

时间复杂度:

  • O(N). N 为[start, end] 区间的⻓度. 由于 string 通常⽐较短, 可以视为是 O(1)

返回值:

  • string 类型的⼦串

🚩setrange

覆盖字符串的⼀部分,从指定的偏移开始。

语法:

setrange key offset value

时间复杂度:

  • O(N), N 为 value 的⻓度. 由于⼀般给的 value ⽐较短, 通常视为 O(1).

返回值:

  • 替换后的 string 的⻓度

🚩strlen

获取 key 对应的 string 的⻓度。当 key 存放的类似不是 string 时,报错。

语法:

strlen key

时间复杂度:

  • O(1)

返回值:

  • string 的⻓度。或者当 key 不存在时,返回0。

🌲命令小结

命令 执行效果 时间复杂度
set key value [key value…] 设置key的值是value O(k),k是键个数
get key 获取 key 的值 O(1)
del key [key …] 删除指定的 key O(k), k 是键个数
mset key value [key value …] 批量设置指定的 key 和 value O(k), k 是键个数
mget key [key …] 批量获取 key 的值 O(k), k 是键个数
incr key 指定的 key 的值 +1 O(1)
decr key 指定的 key 的值 -1 O(1)
incrby key n 指定的 key 的值 +n O(1)
decrby key n 指定的 key 的值 -n O(1)
incrbyfloat key n 指定的 key 的值 +n O(1)
append key value 指定的 key 的值追加 value O(1)
strlen key 获取指定 key 的值的⻓度 O(1)
setrange key offset value 覆盖指定 key 的从 offset 开始的部分值 O(n),n 是字符串⻓度,通常视为O(1)
getrange key start end 获取指定 key 的从 start 到 end 的部分值 O(n),n是字符串⻓度,通常视为O(1)

⭕总结

关于《【Redis】 String 字符串类型常见命令》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
23天前
|
存储 消息中间件 NoSQL
Redis数据结构:List类型全面解析
Redis数据结构——List类型全面解析:存储多个有序的字符串,列表中每个字符串成为元素 Eelement,最多可以存储 2^32-1 个元素。可对列表两端插入(push)和弹出(pop)、获取指定范围的元素列表等,常见命令。 底层数据结构:3.2版本之前,底层采用**压缩链表ZipList**和**双向链表LinkedList**;3.2版本之后,底层数据结构为**快速链表QuickList** 列表是一种比较灵活的数据结构,可以充当栈、队列、阻塞队列,在实际开发中有很多应用场景。
|
1月前
|
NoSQL Redis
Redis 字符串(String)
10月更文挑战第16天
37 4
|
1月前
|
消息中间件 存储 监控
redis 的List类型 实现 排行榜
【10月更文挑战第8天】
37 2
|
1月前
|
存储 NoSQL Redis
redis-set类型
【10月更文挑战第6天】
41 1
|
15天前
|
存储 NoSQL Java
Redis命令:列表模糊删除详解
通过本文的介绍,我们详细探讨了如何在Redis中实现列表的模糊删除。虽然Redis没有直接提供模糊删除命令,但可以通过组合使用 `LRANGE`和 `LREM`命令,并在客户端代码中进行模糊匹配,来实现这一功能。希望本文能帮助你在实际应用中更有效地操作Redis列表。
29 0
|
22天前
|
存储 NoSQL 关系型数据库
Redis的ZSet底层数据结构,ZSet类型全面解析
Redis的ZSet底层数据结构,ZSet类型全面解析;应用场景、底层结构、常用命令;压缩列表ZipList、跳表SkipList;B+树与跳表对比,MySQL为什么使用B+树;ZSet为什么用跳表,而不是B+树、红黑树、二叉树
|
1月前
|
NoSQL Redis 数据安全/隐私保护
Redis 命令
10月更文挑战第15天
27 0
|
存储 缓存 移动开发
Redis 命令执行过程(上)
今天我们来了解一下 Redis 命令执行的过程。在之前的文章中《当 Redis 发生高延迟时,到底发生了什么》我们曾简单的描述了一条命令的执行过程,本篇文章展示深入说明一下,加深读者对 Redis 的了解。
Redis 命令执行过程(上)
|
存储 缓存 NoSQL
Redis 命令执行过程(下)
在上一篇文章中《Redis 命令执行过程(上)》中,我们首先了解 Redis 命令执行的整体流程,然后细致分析了从 Redis 启动到建立 socket 连接,再到读取 socket 数据到输入缓冲区,解析命令,执行命令等过程的原理和实现细节。
|
移动开发 缓存 NoSQL
redis 命令执行过程
概述  这篇文章的目的是为了描述redis server在处理client命令的执行过程,大概包括流程图、源码、以及redis的命令格式说明,redis的通信协议参考自redis的官网。
1306 0

热门文章

最新文章

下一篇
无影云桌面