Redis数据结构中字符串的探究

1. 总体介绍

  • String属于最常被使用的数据类型,一个键对应着一个值。
  • String具有二进制安全的属性,能够包含诸如图片和序列化对象等各类数据,并且支持序列化操作。
  • 单个值最大可以达到512MB。

image

2. 常见操作

2.1 SET/GET

语法规则:

[ ]代表可选参数

SET key value [NX | XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]

SET命令存在EXPXNXXX以及KEEPTTL这五个可选参数,其中KEEPTTL是在6.0版本新增的可选参数,其他参数是在2.6.12版本添加的。

  • EX seconds:以秒为单位设置过期时间
  • PX milliseconds:以毫秒为单位设置过期时间
  • EXAT timestamp:设置以秒为单位的UNIX时间戳对应的时间作为过期时间
  • PXAT milliseconds-timestamp:设置以毫秒为单位的UNIX时间戳对应的时间作为过期时间
  • NX:键不存在时设置键值
  • XX:键存在时设置键值
  • KEEPTTL:保留设置前指定键的生存时间
  • GET:返回指定键原本的值,若键不存在则返回nil

SET命令使用EXPXNX参数时,其效果等同于SETEXPSETEXSETNX命令。依据官方文档描述,未来版本中SETEXPSETEXSETNX命令有可能被淘汰。

EXNX可应用于分布式锁。

案例:最为常用的set/get操作

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"

案例:NX,键不存在时才能创建,否则无法创建

127.0.0.1:6379> set k1 v1 nx
OK
127.0.0.1:6379> set k1 v1 nx
(nil)

案例:XX,已存在的键才创建,否则无法创建

127.0.0.1:6379> set k1 v1 
OK
127.0.0.1:6379> set k1 v1 xx
OK
127.0.0.1:6379> get k2
(nil)
127.0.0.1:6379> set k2 v2 xx
(nil)

案例:GET,设置新值前先返回旧值

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k1 v2 get
"v1"

案例:EX,设置10秒过期

127.0.0.1:6379> set k1 v1 ex 10
OK
127.0.0.1:6379> ttl k1
(integer) 8
127.0.0.1:6379> ttl k1
(integer) 6
127.0.0.1:6379> ttl k1
(integer) 4

set ex是原子操作,与先set key value然后expire key不同,后者不是原子操作

案例:PX,设置9000毫秒过期

127.0.0.1:6379> set k1 v1 px 9000
OK
127.0.0.1:6379> ttl k1
(integer) 7
127.0.0.1:6379> ttl k1
(integer) 5
127.0.0.1:6379> ttl k1
(integer) 4

案例:KEEPTTL

若同一个key设置新值且未追加过期时间,redis会使其立即过期

127.0.0.1:6379> set k1 v1 ex 40
OK
127.0.0.1:6379> ttl k1
(integer) 37
127.0.0.1:6379> set k1 v2
OK
127.0.0.1:6379> ttl k1
(integer) -1

若要续接过期时间,则需要用到KEEPTTL参数,设置新值后,过期时间会被续接

127.0.0.1:6379> set k1 v1 ex 50  
OK
127.0.0.1:6379> ttl k1
(integer) 46
127.0.0.1:6379> set k1 v1 keepttl
OK
127.0.0.1:6379> ttl k1
(integer) 33

2.2 MSET/MGET/MSETNX

案例:MSET同时设置多个值并获取

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"

案例 MSETNX,同时设置多个key的值,仅当所有key都不存在时才设置成功,否则全部失败

失败情况,因为k1已存在,k1未成功修改,k2也未存入

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> msetnx k1 a1 k2 v2
(integer) 0
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> get k2
(nil)

成功情况,k1、k2都不存在,全部添加成功

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> msetnx k1 v1 k2 v2
(integer) 1
127.0.0.1:6379> mget k1 k2
1) "v1"
2) "v2"

2.3 GETRANGE/SETRANGE

GETRANGE,类似Java中的substring(),用于字符串截取,0到-1表示不截取

案例:

127.0.0.1:6379> set k1 abcdefg
OK
127.0.0.1:6379> getrange k1 0 -1
"abcdefg"
127.0.0.1:6379> getrange k1 1 4
"bcde"

SETRANGE,从指定字符位置开始设置新内容

案例:

127.0.0.1:6379> set k1 abcdefg
OK
127.0.0.1:6379> setrange k1 1 xxyy
(integer) 7
127.0.0.1:6379> get k1
"axxyyfg"

2.4 INCR(BY)/DECR(BY)

用于数值的加减操作,值必须是数字才能进行该操作

案例:INCR,每次执行加1

127.0.0.1:6379> set k1 100
OK
127.0.0.1:6379> get k1
"100"
127.0.0.1:6379> incr k1
(integer) 101
127.0.0.1:6379> incr k1
(integer) 102
127.0.0.1:6379> incr k1
(integer) 103
127.0.0.1:6379> incr k1
(integer) 104

案例:INCRBY,修改步长为5

127.0.0.1:6379> set k1 0
OK
127.0.0.1:6379> incrby k1 5
(integer) 5
127.0.0.1:6379> incrby k1 5
(integer) 10
127.0.0.1:6379> incrby k1 5

案例:DECR,递减1,DECRBY同理

127.0.0.1:6379> set k1 100
OK
127.0.0.1:6379> decr k1
(integer) 99
127.0.0.1:6379> decr k1
(integer) 98
127.0.0.1:6379> decr k1
(integer) 97




127.0.0.1:6379> set k1 100
OK
127.0.0.1:6379> decrby k1 5
(integer) 95
127.0.0.1:6379> decrby k1 5
(integer) 90
127.0.0.1:6379> decrby k1 5
(integer) 85

2.5 STRLEN

用于获取字符串长度

语法

strlen key

案例

127.0.0.1:6379> set k1 aaa
OK
127.0.0.1:6379> strlen k1
(integer) 3

2.6 APPEND

用于字符串追加

语法

APPEND key value

案例

127.0.0.1:6379> set k1 aaa
OK
127.0.0.1:6379> append k1 bbb
(integer) 6
127.0.0.1:6379> get k1
"aaabbb"

2.7 GETSET

getset,即先获取值再设置新值,与set key value get命令效果相同

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> getset k1 v2
"v1"
127.0.0.1:6379> get k1
"v2"

3. 总结

字符串是一种基础的数据结构,可应用于分布式锁、点赞数量统计等场景。

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/12578.html

(0)
LomuLomu
上一篇 4小时前
下一篇 2小时前

相关推荐

  • 50个JAVA常见代码大全:学完这篇从Java小白到架构师

    50个JAVA常见代码大全:学完这篇从Java小白到架构师 Java,作为一门流行多年的编程语言,始终占据着软件开发领域的重要位置。无论是初学者还是经验丰富的程序员,掌握Java中常见的代码和概念都是至关重要的。本文将列出50个Java常用代码示例,并提供相应解释,助力你从Java小白成长为架构师。 基础语法 1. Hello World “`java p…

    未分类 2025 年 1 月 14 日
    31300
  • PyCharm破解教程 – 如何用激活补丁永久激活

    本教程适用于PyCharm 2024、IDEA、DataGrip、Goland等Jetbrains产品,支持全家桶激活!无论您使用的是Windows、Mac还是Linux,均可按照本教程成功激活PyCharm 2024至2096年。 激活截图展示 首先,我们来展示一下最新版本的PyCharm 2024破解成功的截图,如下所示,您可以看到已经成功激活至2096…

    PyCharm破解教程 2025 年 4 月 22 日
    33800
  • 一文搞懂架构设计的衡量标准:功能性、可用性、性能、可扩展性、安全性、协作效率、复杂度、成本效益

    大家好,我是汤师爷~ 架构设计的首要目标是服务于业务需求。因此,我们不应该盲目追求所谓的”最厉害的”架构,而应该致力于寻找最适合当前业务环境和未来发展需求的架构方案。 衡量架构的合理性是一个复杂的过程,需要从多个角度进行全面评估。主要可以从以下视角进行分析: 功能需求视角:评估架构是否有效支撑当前业务需求,并具有充分的灵活性以适应未来业务发展。 非功能需求视…

    未分类 2025 年 1 月 16 日
    24100
  • DataGrip激活码永久激活方法(适用于2024年版)

    DataGrip激活码永久激活方法(适用于2024年版) 这篇教程适用于所有JetBrains系列软件,包括DataGrip。接下来,我将向大家展示如何通过简单的图文步骤,成功激活DataGrip至2099年。通过这个方法,你不仅能轻松激活最新版本,也能适用于旧版本的激活。 首先,先看一下成功激活的截图,我们可以看到DataGrip已经成功激活,且有效期延续…

    DataGrip破解教程 2025 年 4 月 22 日
    12000
  • 小程序xcxCode逆向分析

    数据采集与xcxCode解密分析 一、声明 本文旨在提供学术交流,不应用于其他任何场合。文章中不包含完整代码,所有涉及的数据包内容、敏感网址和数据接口均已进行脱敏处理,严禁用于商业或非法活动,由此引起的后果与作者无关。未经授权,禁止转载或修改后传播本文,作者不承担因使用本文技术导致的任何后果。本文为原创,作者署名为小白,敬请尊重。 二、工具介绍 mitmpr…

    2024 年 12 月 26 日
    33200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信