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

Redis 中 String 字符串类型详解

目录

Redis 字符串类型详解

字符串类型概述

基本特性

常见命令

SET

GET

MGET

MSET

SETNX

计数命令

其他命令

内部编码


Redis 字符串类型详解

在 Redis 中,字符串是最基础也是最常用的数据类型。这里介绍 Redis 字符串类型的特性、常见命令以及内部编码机制。


字符串类型概述

基本特性

  • 所有键都是字符串:在 Redis 里,所有的键(key)都是字符串类型。
  • 其他数据结构的基础:列表、集合等其他数据结构的元素也都是字符串类型。
  • 值的多样性:字符串类型的值可以是普通的文本、JSON 或 XML 格式的字符串、数字(整数或浮点数),甚至是二进制数据(如图片、音频、视频等)。
  • 最大长度限制:一个字符串的最大长度不能超过 512 MB。
  • 字符集编码:Redis 内部存储字符串时,完全按照二进制流的形式保存,不处理字符集编码问题。客户端传入的命令是什么字符集编码,就存储什么字符集编码。


常见命令

SET

  •  功能:设置一个键的值。如果这个键之前已经存在,那么它的旧值会被新值覆盖,无论原来的数据类型是什么。之前的过期时间也会失效。

  • 语法

    1SET key value [EX seconds|PX milliseconds] [NX|XX]
  • 选项

    • EX seconds:以秒为单位设置键的过期时间。
    • PX milliseconds:以毫秒为单位设置键的过期时间。
    • NX:只有在键不存在时才进行设置。
    • XX:只有在键存在时才进行设置。
  • 示例

     
    1redis> EXISTS mykey
    2(integer) 0
    3redis> SET mykey "Hello"
    4OK
    5redis> GET mykey
    6"Hello"
    7redis> SET mykey "World" NX
    8(nil)
    9redis> DEL mykey
    10(integer) 1
    11redis> EXISTS mykey
    12(integer) 0
    13redis> SET mykey "World" XX
    14(nil)
    15redis> GET mykey
    16(nil)
    17redis> SET mykey "World" NX
    18OK
    19redis> GET mykey
    20"World"
    21redis> SET mykey "Will expire in 10s" EX 10
    22OK
    23redis> GET mykey
    24"Will expire in 10s"
    25redis> GET mykey  # 10秒之后
    26(nil)

GET

功能:获取一个键对应的值。如果键不存在,返回 nil。如果值不是字符串类型,会报错。

语法

1GET key

示例

1redis> GET nonexisting
2(nil)
3redis> SET mykey "Hello"
4OK
5redis> GET mykey
6"Hello"
7redis> DEL mykey
8(integer) 1
9redis> EXISTS mykey
10(integer) 0
11redis> HSET mykey name Bob
12(integer) 1
13redis> GET mykey
14(error) WRONGTYPE Operation against a key holding the wrong kind of value

MGET

功能:一次性获取多个键的值。如果某个键不存在或者其值不是字符串类型,返回 nil

语法

1MGET key [key ...]

示例

1redis> SET key1 "Hello"
2OK
3redis> SET key2 "World"
4OK
5redis> MGET key1 key2 nonexisting
61) "Hello"
72) "World"
83) (nil)

MSET

功能:一次性设置多个键的值。

语法

1MSET key value [key value ...]

示例

1redis> MSET key1 "Hello" key2 "World"
2OK
3redis> GET key1
4"Hello"
5redis> GET key2
6"World"

SETNX

功能:设置一个键的值,但只在键不存在的情况下才设置。

语法

1SETNX key value

示例

1redis> SETNX mykey "Hello"
2(integer) 1
3redis> SETNX mykey "World"
4(integer) 0
5redis> GET mykey
6"Hello"

计数命令

INCR:将键对应的数值加 1。如果键不存在,则视为值为 0。

语法

1INCR key

示例

1redis> EXISTS mykey
2(integer) 0
3redis> INCR mykey
4(integer) 1
5redis> SET mykey "10"
6OK
7redis> INCR mykey
8(integer) 11

DECR:将键对应的数值减 1。如果键不存在,则视为值为 0。

语法

1DECR key

示例

1redis> EXISTS mykey
2(integer) 0
3redis> DECR mykey
4(integer) -1
5redis> SET mykey "10"
6OK
7redis> DECR mykey
8(integer) 9

INCRBYDECRBY:分别将键对应的数值加上或减去指定的值。

语法

1INCRBY key increment
2DECRBY key decrement

示例

1redis> INCRBY mykey 3
2(integer) 3
3redis> DECRBY mykey 3
4(integer) 0

INCRBYFLOAT:将键对应的浮点数值加上指定的值。

语法

1INCRBYFLOAT key increment

示例

1redis> SET mykey 10.50
2OK
3redis> INCRBYFLOAT mykey 0.1
4"10.6"

其他命令

APPEND:将值追加到键对应的字符串后面。如果键不存在,则效果等同于 SET 命令。

语法

1APPEND key value

示例

1redis> APPEND mykey "Hello"
2(integer) 5
3redis> APPEND mykey " World"
4(integer) 11

GETRANGE:获取键对应字符串的一部分,由起始和结束位置确定。

语法

1GETRANGE key start end

示例

1redis> SET mykey "This is a string"
2OK
3redis> GETRANGE mykey 0 3
4"This"

SETRANGE:从指定偏移量开始覆盖字符串的一部分。

语法

1SETRANGE key offset value

示例

1redis> SET key1 "Hello World"
2OK
3redis> SETRANGE key1 6 "Redis"
4(integer) 11

STRLEN:获取键对应字符串的长度。

语法

1STRLEN key

示例

1redis> SET mykey "Hello world"
2OK
3redis> STRLEN mykey
4(integer) 11

内部编码

Redis 会根据当前值的类型和长度动态决定使用哪种内部编码实现。字符串类型的内部编码有三种:

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

示例

整型类型

1127.0.0.1:6379> set key 6379
2OK
3127.0.0.1:6379> object encoding key
4"int"

短字符串

1127.0.0.1:6379> set key "hello"
2OK
3127.0.0.1:6379> object encoding key
4"embstr"

长字符串

1127.0.0.1:6379> set key "one string greater than 39 bytes ........"
2OK
3127.0.0.1:6379> object encoding key
4"raw"

感谢阅览,后续会再更新 Redis 中其他数据类型的知识,感谢阅览!!


http://www.kler.cn/a/315636.html

相关文章:

  • FluentUI使用
  • MySQL高级(二):一条更新语句是如何执行的
  • Springboot配置全局异常通用返回
  • C 语言 【模拟实现内存库函数】
  • C++ 的协程
  • OCR识别铁路电子客票
  • 2024年中国研究生数学建模竞赛B题(华为题目)WLAN组网中网络吞吐量建模一
  • libtorch落地AI项目的一些总结
  • 面试题(八)
  • OpenCV_图像膨胀腐蚀与形态学操作及具体应用详解
  • 分布式安装LNMP
  • [OpenCV] 数字图像处理 C++ 学习——16直方图均衡化、直方图比较 详细讲解+附完整代码
  • 超详细的XML介绍【附带dom4j操作XML】
  • 口腔检测系统源码分享
  • php怎么连接使用kafka
  • 【AI算法岗面试八股面经【超全整理】——NLP】
  • 学生管理系统1.0版本
  • Kotlin 基本介绍(一)
  • 如何确保消息只被消费一次:Java实现详解
  • Python 中的 HTTP 编程入门,如何使用 Requests 请求网络
  • 实现人体模型可点击
  • Kotlin 枚举和 when 表达式(六)
  • 关于Python sklearn CountVectorizer使用详解
  • 多模态论文串讲-学习笔记(上)
  • docker配置镜像加速器
  • 亚马逊IP关联揭秘:发生ip关联如何处理