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

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.mrgr.cn/news/33579.html

相关文章:

  • Sam Altman:年底将有重磅更新,但不是GPT-5!
  • 网站运营:如何从零开始做好网站内容建设?
  • 视频孪生技术在金融银行网点场景中的应用价值
  • OSPF总结
  • 丹摩征文活动 | 0基础带你上手经典目标检测模型 Faster-Rcnn
  • GitLab 中文发行版最新版重点功能解读
  • 【线程】线程的同步
  • 蓝桥杯1.小蓝的漆房
  • C++高精度计时方法总结(测试函数运行时间)
  • 240922-chromadb的基本使用
  • 以小人之心度君子之腹
  • C++之模板初阶
  • 简单题101. 对称二叉树 (python)20240922
  • 教你用 python 在国内实现 openAi 的调用
  • pod介绍与配置
  • 使用Properties
  • Spring Service中的@Service注解的使用
  • 英伟达开源 NVLM 1.0 引领多模态 AI 变革
  • Matlab R2018a怎么下载安装?Matlab R2018a保姆级详细安装教程
  • 普通程序员如何快速入门AIGC
  • Fyne ( go跨平台GUI )中文文档- 架构 (八)完结
  • golang学习笔记7-指针、值类型与引用类型
  • 滚雪球学SpringCloud[7.3讲]:分布式事务管理详解
  • 序列化方式二——JSON之Gson
  • CCC SPAKE2+流程解析
  • 【数据结构-栈】力扣1441. 用栈操作构建数组