前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis Strings

Redis Strings

作者头像
孟斯特
发布2024-01-23 16:40:10
980
发布2024-01-23 16:40:10
举报
文章被收录于专栏:code人生code人生

原文在这里[1]。

Redis字符串存储字节序列,包括文本、序列化对象和二进制数组。因此,字符串是用于Redis键的最简单类型。尽管它们通常用于缓存,但它们还支持额外的功能,让你可以实现计数器并执行位操作。

由于Redis键是字符串,当我们将字符串类型用作值时,实际上是在将一个字符串映射到另一个字符串。字符串数据类型对许多用例都很有用,比如缓存HTML片段或页面。

代码语言:javascript
复制
> SET bike:1 Deimos
OK
> GET bike:1
"Deimos"

正如你所见,SETGET命令是设置和检索字符串值的方法。需要注意的是,如果键已经存在,无论其中存储的是什么值,SET将对其进行替换,即使该键与非字符串值关联。即SET执行一种赋值操作。

对于Redis来说,值可以是各种类型的字符串,包括二进制数据,例如,你可以将JPEG图像存储在一个值中。但一个值的大小不能超过512MB。

SET命令有一些有趣的选项,它们作为额外的参数提供。例如,我可以要求在SET键时,只有在键已经存在时才成功:

代码语言:javascript
复制
> set bike:1 bike nx
(nil)
> set bike:1 bike xx
OK

有许多其他用于操作字符串的命令。例如,GETSET命令将一个键设置为新值,并将旧值作为结果返回。如果你有一个系统,每当你的网站接收到新访问者时都会使用INCR递增一个Redis键,那你就可以使用这个命令。你可能想要每小时收集这些信息,而不丢失任何一个递增。你可以使用GETSET命令,将键设为新值"0"并读取旧值。

能够在单个命令中设置或检索多个键的值对于减少延迟也是很有用的。因此,有了MSETMGET命令:

代码语言:javascript
复制
> mset bike:1 "Deimos" bike:2 "Ares" bike:3 "Vanth"
OK
> mget bike:1 bike:2 bike:3
1) "Deimos"
2) "Ares"
3) "Vanth"

在使用MGET时,Redis会返回一组变量。

将字符串作为计数器

即使字符串是Redis的基本值,你仍然可以通过它们执行一些有趣的操作。例如,其中之一是原子递增:

代码语言:javascript
复制
> set total_crashes 0
OK
> incr total_crashes
(integer) 1
> incrby total_crashes 10
(integer) 11

INCR命令可以将字符串值解析为整数,并将其递增一,最后将获得的值设置为新值。还有其他类似的命令,如INCRBYDECRDECRBY。在内部,它始终是相同的命令,只是以稍微不同的方式执行。

INCR是原子的意思是什么呢?即使多个客户端针对同一键发出INCR命令,它们也永远不会发生竞态条件。例如,永远不会发生这样的情况:客户端1读取 "10",客户端2同时读取 "10",两者都递增为11,并将新值设置为11。最终的值将始终是12,而读取-递增-设置操作是在所有其他客户端不同时执行命令的情况下进行的。

限制

默认情况下,一个Redis String的最大值是512MB。

基础命令

获取、设置Strings

SET 存储一个字符串变量。•SETNX 只有键值不存在时才会存储字符串变量。可用于实现锁。•GET 查询字符串变量。•MGET 在一次操作过程中查询多个字符串变量。

计数器管理

INCRBY 原子地递增(当传递负数时递减)存储在给定键上的计数器。•INCRBYFLOATINCRBY命令类型,用于浮点型数字。

位操作

要在字符串上执行位操作,请参阅位图数据类型[2]文档。

完整的字符串命令在这里[3]。

性能

大多数字符串操作的时间复杂度为O(1),这意味着它们非常高效。然而,要小心SUBSTRGETRANGESETRANGE命令,它们的时间复杂度可能为O(n)。这些随机访问字符串命令在处理大字符串时可能导致性能问题。

替换方案

如果你要将结构化数据存储为序列化的字符串,可以考虑使用Redis哈希[4]或JSON[5]。

更多

•Redis Strings Explained[6]是一段简短而全面的关于Redis字符串的视频解释。•Redis University's RU101[7]详细介绍了Redis字符串。

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)[8]进行许可,使用时请注明出处。 Author: mengbin[9] blog: mengbin[10] Github: mengbin92[11] cnblogs: 恋水无意[12] 腾讯云开发者社区:孟斯特[13]

References

[1] 这里: https://redis.io/docs/data-types/strings/ [2] 位图数据类型: https://redis.io/docs/data-types/bitmaps [3] 这里: https://redis.io/commands/?group=string [4] 哈希: https://redis.io/docs/data-types/hashes [5] JSON: https://redis.io/docs/stack/json [6] Redis Strings Explained: https://www.youtube.com/watch?v=7CUt4yWeRQE [7] Redis University's RU101: https://university.redis.com/courses/ru101/?_gl=1*10jw5fp*_ga*ODg5NjU0ODAzLjE3MDU0ODEyMTg.*_ga_8BKGRQKRPV*MTcwNTY0NzAzOC40LjEuMTcwNTY1MDM0OS41MS4wLjA.*_gcl_au*MTQzNTAwOTk2LjE3MDU0ODEyMTc.&_ga=2.42344805.130259205.1705572418-889654803.1705481218 [8] 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0): https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh [9] mengbin: mengbin1992@outlook.com [10] mengbin: https://mengbin.top [11] mengbin92: https://mengbin92.github.io/ [12] 恋水无意: https://www.cnblogs.com/lianshuiwuyi/ [13] 孟斯特: https://cloud.tencent.com/developer/user/6649301

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 孟斯特 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 将字符串作为计数器
  • 限制
  • 基础命令
    • 获取、设置Strings
      • 计数器管理
      • 位操作
      • 性能
      • 替换方案
      • 更多
        • References
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档