redis 基本数据类型—string类型

news2024/9/21 14:47:12

一、介绍

Redis 中的字符串,直接就是按照二进制数据的方式存储的,不会做任何的编码转换。

Redis对于 string 类型,限制了大小最大是512M

二、命令

SET

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

语法:
 

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

命令有效版本:1.0.0 之后

时间复杂度:O(1) 选项: SET 命令支持多种选项来影响它的行为:

• EX seconds ⸺ 使用秒作为单位设置 key 的过期时间。

• PX milliseconds ⸺ 使用毫秒作为单位设置 key 的过期时间。

• NX ⸺ 只在 key 不存在时才进行设置,即如果 key 之前已经存在,设置不执行。

• XX ⸺ 只在 key 存在时才进行设置,即如果 key 之前不存在,设置不执行。

注意:由于带选项的 SET 命令可以被 SETNX 、 SETEX 、 PSETEX 等命令代替,所以之后的版本中,Redis 可能进行合并。

返回值:

• 如果设置成功,返回 OK。

• 如果由于 SET 指定了 NX 或者 XX 但条件不满足,SET 不会执行,并返回 (nil)。

GET

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

GET key

命令有效版本:1.0.0 之后

时间复杂度:O(1)

返回值:key 对应的 value,或者 nil 当 key 不存在。

MGET

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

MGET key [key ...]

命令有效版本:1.0.0 之后

时间复杂度:O(N) N 是 key 数量

返回值:对应 value 的列表

MSET 

⼀次性设置多个 key 的值。
语法:

MSET key value [key value ...]

命令有效版本:1.0.1 之后

时间复杂度:O(N) N 是 key 数量

返回值:永远是 OK

多次 get vs 单次 mget 区别

如图,使用 mget / mset 由于可以有效地减少了网络时间,所以性能相较更高。

事实上,使用mget命令后,服务器收到指令会执行多次get命令。只是减少了网络IO的次数。

学会使用批量操作,可以有效提高业务处理效率,但是要注意,每次批量操作所发送的键的数量也不是无节制的,否则可能造成单⼀命令执行时间过长,导致 Redis 阻塞。


SETNX

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

SETNX key value

命令有效版本:1.0.0 之后

时间复杂度:O(1)

返回值:1 表⽰设置成功。0 表⽰没有设置。

set 家族执行流程图

INCR

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

语法:

INCR key

命令有效版本:1.0.0 之后

时间复杂度:O(1)

返回值:integer 类型的加完后的数值。

INCRBY

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

语法:

INCRBY key decrement

命令有效版本:1.0.0 之后

时间复杂度:O(1)

返回值:integer 类型的加完后的数值。

DECR

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

语法:

DECR key

命令有效版本:1.0.0 之后

时间复杂度:O(1)

返回值:integer 类型的减完后的数值

DECYBY

将 key 对应的 string 表示的数字减去对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的 string 不是⼀个整型或者范围超过了 64 位有符号整型,则报错。
语法:

DECRBY key decrement

命令有效版本:1.0.0 之后

时间复杂度:O(1)

返回值:integer 类型的减完后的数值。

INCRBYFLOAT

将 key 对应的 string 表⽰的浮点数加上对应的值。如果对应的值是负数,则视为减去对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的不是 string,或者不是⼀个浮点数,则报错。允许采⽤科学计数法表示浮点数。
 

语法:

INCRBYFLOAT key increment

命令有效版本:2.6.0 之后

时间复杂度:O(1)

返回值:加/减完后的数值。

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

APPENP

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

语法:

APPEND KEY VALUE

命令有效版本:2.0.0 之后

时间复杂度:O(1). 追加的字符串⼀般⻓度较短, 可以视为 O(1).

返回值:追加完成之后 string 的长度。

GETRANGE

返回 key 对应的 string 的子串,由 start 和 end 确定(左闭右闭)。可以使⽤负数表示倒数。-1 代表倒数第⼀个字符,-2 代表倒数第⼆个,其他的与此类似。超过范围的偏移量会根据 string 的长度调整成正确的值
 

语法:

GETRANGE key start end

命令有效版本:2.4.0 之后

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

返回值:string 类型的⼦串

SETRANGE

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

语法:

SETRANGE key offset value

命令有效版本:2.2.0 之后

时间复杂度:O(N), N 为 value 的长度. 由于⼀般给的 value 比较短, 通常视为 O(1).

返回值:替换后的 string 的⻓度。

STRLEN

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

语法:

STRLEN key

命令有效版本:2.2.0 之后

时间复杂度:O(1)

返回值:string 的长度。或者当 key 不存在时,返回 0。

三、内部编码

字符串类型的内部编码有三种:

1、int:8 个字节的长整型。

2、embstr:小于等于 39 个字节的字符串。

3、raw:大于 39 个字节的字符串。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2122923.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

系统架构设计师|关于系统架构-002

📫 作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师 🏆 近期荣誉:华为云云享专家、阿里云专家博主、腾讯云优秀创作者、腾讯云TDP-KOL、ACDU成员、墨天轮技术专家博主 &#x1f52…

DBeaver 24.2 发布下载,新增功能概览

DBeaver Ultimate Edtion 24.2 Multilingual (macOS, Linux, Windows) - 通用数据库工具 One tool for all data sources 请访问原文链接:https://sysin.org/blog/dbeaver/,查看最新版。原创作品,转载请保留出处。 作者主页:sy…

【局域网投屏】sunshine和moonlight投屏/屏幕共享/扩展屏

主机是sunshine,客机是moonlight,一个太阳一个月光,两者真是太配啦! 下载sunshine sunshine是服务器端,去以下GitHub链接下载windows端的解压缩即用版 https://github.com/LizardByte/Sunshine/releases下载完毕解压…

Linux高级查找、过滤

find 在指定目录下查找文件和目录 基本语法:find [路径] [ 参数] [查找条件] 常用参数 -name 根据文件或目录的名称查找 find /path -name test.txt-iname 与name类似,但忽略大小写-size 根据文件大小查找 find /path -size 10M-user 根据文…

HS光流法原理与实现

1. 前言 人眼观察到物体运动时,物体会在视网膜平面上形成一系列连续变化的图像“流过”视网膜,好像一种光的“流”,所以被称为光流。 光流基于像素点定义,所有光流的集合称为光流场。通过对光流场分析,可以得到物体相对于观察者的运动信息。计算光流场的方法有很多,常见的…

Java中的类型转换 Day4

类型转换 类型转换总结来说就是:自动提升 手动下降 3.1 自动类型转换 自动类型转换需要满足的要求 两种类型相互兼容 例:int类型的取值范围包含了short类型的取值范围 目标类型大于源类型 目标类型的取值范围(等号左边)大于源…

debug对于开发工程师很重要

在日常开发中,总会遇到一些出人意料的bug,程序跑飞,上电就挂,程序没有按预期执行诸如此类的问题,没有好的调试方法,真的很难定位问题,更别说解决了。在这里分享我用过的一些调试方法&#xff0c…

欧几里得算法求最大公约数

两个不全为0的非负整数m,n的最大公约数记为gcd(m,n),代表能够整除(即余数为0)m和n的最大正整数。 计算gcd(m,n)的欧几里得算法: 第一步&#xf…

初识爬虫2

requests学习(未更新完): 小技巧,如果你用的也是pycharm,对于控制台输出页面因为数据很长一行,不方便进行查看, 可以让它自动换行: 1.requests文档阅读学习链接:快速上…

linux 脱机

先安装 screen apt-get install screen

【网络】网络通信的传输方式

目录 1.网络通信中的两种基本通信模式 1.1.怎么理解连接 1.2.面向有连接类型 1.3.面向无连接类型 2.实现这两种通信模式的具体交换技术 2.1.电路交换 2.2.分组交换 3.根据接收端数量分类 单播(Unicast) 广播(Broadcast) …

8、值、指针、引用作为参数或返回值

一、作为参数 1、值传递 #include <iostream> using namespace std;void swap(int a, int b) {cout << __FUNCTION__ << "交换前a:" << a << " b:" << b << endl;int tmp a;a b;b tmp;cout << __FUN…

98.游戏的启动与多开-分析与实现多开器

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;易道云信息技术研究院 上一个内容&#xff1a;97.游戏的启动与多开-共享内存多开检测 以 97.游戏的启动与多开-共享内存多开检测 它的…

若依框架开发

若依环境 介绍 ‌若依是一款快速开发平台(低代码)&#xff0c;用于快速构建企业级后台管理系统&#xff0c;它提供了许多常用的功能模块和组件&#xff0c;包括权限管理、代码生成、工作流、消息中心等 官方地址: https://www.ruoyi.vip/ ‌基于Spring Boot和Spring Cloud‌…

vscode配置C/C++环境(保姆级详细教程)

一. 引言 VSCode&#xff0c;全称为Visual Studio Code&#xff0c;是一款由微软开发的免费、开源的轻量级代码编辑器&#xff0c;它支持多种编程语言和平台&#xff0c;并提供丰富的扩展功能&#xff0c;让开发者能够更高效地编写代码。 大家能来搜用如何在VSCode配置C/C环境…

Linxu系统:kill命令

1、命令详解&#xff1a; kill命令是用于向进程发送信号&#xff0c;通常用来终止某个指定PID服务进程&#xff0c;kill命令可以发送不同的信号给目标进程&#xff0c;来实现不同的操作&#xff0c;如果不指定信号&#xff0c;默认会发送 TERM 信号&#xff08;15&#xff09;&…

1. 初识LLM API:环境配置与多轮对话演示

其实AI应用并不是一个什么很高大上的东西&#xff0c;你可以将它当作一个文字的“调库”行为&#xff0c;“调库”只需要知道库名就行了&#xff0c;这里实际也是如此。甚至你只需要知道你想问什么&#xff0c;将你的消息作为输入&#xff0c;就能从大模型得到输出。而这个“库…

CSS学习17--CSS3 过渡、2D变形、3D变形、动画

CSS3 过渡、2D变形、3D变形、动画 一、过渡二、2D变形 transform1.移动 translate2.缩放 scale3. 旋转 rotate4. 倾斜 skew 三、3D变形1. rotateX&#xff08;&#xff09;rotateY&#xff08;&#xff09; rotateZ&#xff08;&#xff09;2. 体会透视 perspective3. translat…

直播电商系统卷轴模式源码开发的发展前景

随着互联网技术的飞速发展和直播电商的日益兴起&#xff0c;直播电商系统已成为数字经济的重要组成部分。其中&#xff0c;卷轴模式作为一种结合了积分奖励和任务兑换机制的商业模式&#xff0c;正逐渐在直播电商领域崭露头角&#xff0c;并展现出广阔的发展前景。本文将从卷轴…

【腾讯云】AI驱动的数据库TDSQL-C如何是从0到1体验电商可视化分析小助手得统计功能,一句话就能输出目标统计图

欢迎来到《小5讲堂》 这是《腾讯云》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景效果图流程图创建数据库基本信息数据库配置设置密码控制台开启…