Redis数据类型——String

news2024/9/30 7:18:36

Redis官网指令文档:Commands | Docs

前言

此处的String类型是针对Redis的Value的,因为Key的形式都是String,而Value则有哈性、列表、集合等形式。

众所周知,由于不同编码,经常会出现乱码的问题,但在Redis中却很少出现,这是因为Redis中的字符串,直接就是按照二进制的方式进行存储的,即存进去的是啥,取出来的就是啥(一些关系型数据库则会使用字符集的形式进行存储,会对原始字符串进行修改)。

正因为其二进制的存储方式,Redis除了存储文本数据,还可以存储图片、视频、音频这类二进制文件,但Redis对String类型进行了约束,限制了最大存储512M。

常用指令

0x00 set & get

set和get是非常常用的命令,对于get来说很简单,而对于set的话还有一些参数可以进行配置。

get:

#get基本语法

get key

功能:获取key的value

时间复杂度:O(1)

返回值:返回key所对应的value,如果key不存在则返回nil。


set:

#基本语法

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

#其中[]表示可选项

功能:设置一个键值对,可以进行参数配置

NX:表示当key不存在进行set

XX:表示当key存在进行set

EX和PX:表示设置的过期时间,EX的单位为妙,PX单位为毫秒

EXAT和PXAT:表示设置的过期时间,不过是时间戳的格式

时间复杂度:O(1)

返回值:设置成功返回ok,失败返回错误信息

0x01 setnx 

此处的命令本质就是上面set命令中增加参数而已,没有什么区别。

setnx:

#基本语法

setnx key value

功能:如果key不存在就进行set,如果存在则不set

返回值: 如果key不存在就进行set,返回set成功的个数(1表示成功,0表示失败)。

时间复杂度:O(1)

0x02 setex & psetex

这两个命令也是对set命令的增强,本质上等价于set中添加参数。

setex:

#基本语法

setex key seconds value

等价于

set key value ex seconds

功能:创建一个键值对,并设置scconds秒的过期时间

返回值:成功设置的个数

时间复杂度:O(1)


psetex:

#基本语法

psetex key millionseconds value

等价于

set key value px millionseconds

功能:创建一个键值对,并设置millionscconds秒的过期时间

返回值:成功设置的个数

时间复杂度:O(1)

0x03 mset & mget

这两个命令可以一下次设置多个key,获取多个value,为的是节省网络开销~

mget:

#基本语法

mget key1 [key2 key3 .....]


redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> MGET key1 key2 nonexisting
1) "Hello"
2) "World"
3) (nil)

功能:返回多个value,如果不存在就返回nil

返回值:返回key对应的value

时间复杂度:O(N),此处的N指的是mget指令中key的个数。


mget:

#基本语法

mset key1 value1 [key2 value2 .....]

redis> MSET key1 "Hello" key2 "World"
"OK"
redis> GET key1
"Hello"
redis> GET key2
"World"

功能:设置多个键值对

返回值:OK

时间复杂度:O(N),此处的N指的是mset指令中key-value的个数。

0x04 incr & incrby

incr类似++操作,incrby是++一个数

incr:

#基本语法

incr key

redis> SET mykey "10"
"OK"
redis> INCR mykey
(integer) 11
redis> GET mykey
"11"

#如果key不存在会创建,将value置为0
#数据范围为java中long的范围

功能:对value进行自增操作,不支持小数

返回值:如果value为整数,返回自增后的值,否则显示类型错误 

时间复杂度:O(1)


incrby:

#基本语法

incrby key num

redis> SET mykey "10"
"OK"
redis> INCRBY mykey 5
(integer) 15

功能:对value进行具体值的自增,支持负数,不支持小数。

返回值:如果value为整数,返回自增后的值,否则显示类型错误 

时间复杂度:O(1)

0x05 decr & decrby

与incr相反,进行减的操作。

#基本语法

decr key

redis> SET mykey "10"
"OK"
redis> DECR mykey
(integer) 9
redis> SET mykey "234293482390480948029348230948"
"OK"
redis> DECR mykey
(error) value is not an integer or out of range



decrby key num

redis> SET mykey "10"
"OK"
redis> DECRBY mykey 3
(integer) 7

#如果key不存在,会创建key,并将value置为0

功能:与incr和incrby相对。

返回值:如果value为整数,返回自减后的值,否则显示类型错误 

时间复杂度:O(1)

0x06 incrbyfloat

#基本语法

incrbyfloat key num

功能:把key加上num,num可以为小数,如果要进行减操作,使用负数,Redis没有提供decrbyfloat

返回值:进行操作后的值

时间复杂度:O(1)

0x07 setrange & getrange

这两个命令都是对value的某个范围进行操作,这里的区间都是闭区间,下标可以为负数!

getrange:

#基本语法

getrange key start end

redis> SET mykey "This is a string"
"OK"
redis> GETRANGE mykey 0 3
"This"
redis> GETRANGE mykey -3 -1
"ing"
redis> GETRANGE mykey 0 -1
"This is a string"
redis> GETRANGE mykey 10 100
"string"

功能:获取key对应value的[start, end] 的字符串。下标支持负数,-1表示字符串最后一个位置,-2表示倒数第二个位置,下标越界了不会报错。

返回值:返回[star, end] 之间的字符串

时间复杂度:O(end - start)

注意:

如果字符是中文汉字的话,会有一些问题。因为在utf8中中文汉字占3个字节,而getrange是按字节来切的,后面取出来的时候会出现问题。


setrange:

#基本语法

setrange key offset value

redis> SET key1 "Hello World"
"OK"
redis> SETRANGE key1 6 "Redis"
(integer) 11
redis> GET key1
"Hello Redis"

 功能:在offset设置字符串value

返回值:设置成功后的长度(字节)

时间复杂度:O(1)

0x08 strlen

#基本语法

strlen key

redis> SET mykey "Hello world"
"OK"
redis> STRLEN mykey
(integer) 11
redis> STRLEN nonexisting
(integer) 0

功能:返回key对应value的长度

返回值:返回key对应value的长度,不存在则返回0

时间复杂度:O(1)

0x09 append 

#基本语法

append key value

redis> EXISTS mykey
(integer) 0
redis> APPEND mykey "Hello"
(integer) 5
redis> APPEND mykey " World"
(integer) 11
redis> GET mykey
"Hello World"

功能:在key对应value的末尾追加字符串.如果key不存在,则类似set的操作。

返回值:追加后的字符串长度

时间复杂度:O(1)

注意:

append返回是字节的个数,返回不是字符的个数!

如果是utf8编码,一个字符占三个字节

0x0a substr(已弃用)

官方文档表示,已经认为弃用了~~

0x0b lcs

Redis7.0版本中新出的。

求两个字符串的最长公共子序列

#基本语法

lcs key1 key2 [len]

> MSET key1 ohmytext key2 mynewtext
OK
> LCS key1 key2
"mytext"
> LCS key1 key2 LEN
(integer) 6

功能:求最长公共子序列

返回值:根据参数配置,返回

时间复杂度:O(n*m)

内部编码

在String类型中有3中编码类型。

1)int:8个字节的整形。适用于存储整数的场景,便于计算。

2)embstr:压缩字符串。适用于比较短的字符串。

3)raw:普通字符串。适用于长的字符串,底层持有的是字节数组

127.0.0.1:6379> set key3 10
OK
127.0.0.1:6379> object encoding key3
"int"
127.0.0.1:6379> set key4 "hello"
OK
127.0.0.1:6379> object encoding key4
"embstr"
127.0.0.1:6379> set key5 "sssssssssssssssssssssssssssssssssssssssssssssssssssssssddddddddddddddddddddddddddddd"
OK
127.0.0.1:6379> object encoding key5
"raw"

最后

最后将讲解哈希类型~

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

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

相关文章

代码签名的定义、重要性及其应用实例

代码签名证书,简单来说,是一种数字证书,用于验证软件开发者身份以及软件代码的完整性和未被篡改。在软件开发和分发过程中,代码签名证书扮演着至关重要的角色,它为用户提供了信任保证,确保所下载和安装的软…

Quarto Dashboards 教程 2:Dashboard Layout

「写在前面」 学习一个软件最好的方法就是啃它的官方文档。本着自己学习、分享他人的态度,分享官方文档的中文教程。软件可能随时更新,建议配合官方文档一起阅读。推荐先按顺序阅读往期内容: 1.quarto 教程 1:Hello, Quarto 2.qu…

vue ant form validate如何对数组下的表单校验

问题 使用Ant Design Vue校验表单时&#xff0c;通过validateFields&#xff0c;但是如何一个数组内部的校验呢&#xff1f; 效果图&#xff1a; 实现方式&#xff1a; 通过 v-for 循环渲染:name"[]"实现&#xff0c;我们直接看代码。 <template><a-for…

vue3组件之间的传参

1、父传子 defineProps 父组件 <script setup>import { reactive } from vue;import Children from ./children.vue;const parentProps reactive({name:zhangsan,age:20})</script><template><div>这是父组件</div><div>子组件:<Chil…

空间数据索引的利器:R-Tree原理与实现深度解析

空间数据索引的利器&#xff1a;R-Tree原理与实现深度解析 R-Tree的原理插入操作分裂操作查询操作 R-Tree的伪代码R-Tree的C语言实现讨论结论 R-Tree是一种平衡树&#xff0c;用于空间数据索引&#xff0c;特别是在二维或更高维度的几何对象存储和检索中。它由Antony Guttman和…

万益蓝Wonderlab益生菌:吃雪糕的自由,我终于找回来了!

虽然现在不是夏天&#xff0c;但是我必须要来说一下&#xff01;我不仅在夏天可以吃雪糕&#xff01;冬天吃也完全没有问题&#xff01; 夏天&#xff0c;对于很多人来说&#xff0c;是雪糕、冷饮和冰镇西瓜的代名词。但对于我&#xff0c;这简直就是个“禁区”。每次看着别人…

ACS510-01-157A-4 3ABD00015756-D通用变频器

商业别名:ACS510-01-157A-4 产品ID:3ABD00015756-D ABB型号名称:ACS510-01-157A-4 目录说明:ACS510-01-157A-4,157A,380V,IP21 详细描述:ACS510-01-157A-4,157A,380V,IP21 原产地:China (CN) 海关关税号:85044099 发票说明:ACS510-01-157A-4,157A,380V,IP21 按订单生产:No 最小…

农业四情监测系统:科技助力农业智慧化

【MQ-4NYSQ】农业四情监测系统&#xff0c;依托农业物联网环境传感器&#xff0c;精准捕捉苗田苗情、土壤墒情、苗田灾情以及苗田病虫草情&#xff0c;为现代农业生产提供了有力支持。 传统的苗情监测往往依赖人工手动记录与上报&#xff0c;这种方式不仅效率低下&#xff0c;…

【深度学习实战(8)】如何绘制loss曲线图

一、步骤 我们先定义一个dict&#xff0c;每一个key对应的value都是一个list。 loss_history dict((k, []) for k in ["epoch", "train_loss", "val_loss"])每一轮或者每一次迭代的损失都通过list记录下来。 loss_history["epoch"…

Task01:初识深度学习

学习视频&#xff1a; 深度学习介绍_哔哩哔哩_bilibili 03 安装【动手学深度学习v2】_哔哩哔哩_bilibili 02 深度学习介绍【动手学深度学习v2】 x轴&#xff1a;不同的模式 y轴&#xff1a;“我”想做的东西 计算机视觉中是像素&#xff0c;很难用符号表示&#xff0c;所以…

Meta通过开源Llama 3 LLM提高了标准

Meta 推出了 Llama 3,这是其最先进的开源大型语言模型(LLM)的下一代产品。这家科技巨头声称,Llama 3 在现实场景中建立了新的性能基准,超越了之前行业领先的模型,如 GPT-3.5。 Meta 在一篇博文中宣布了这一发布,并表示:"通过 Llama 3,我们致力于打造与当今最好的专有模型…

qt实现不定数量的按钮向前向后移动展示

按钮模拟移动 引言示例代码第一种思路开发环境代码结构实现代码第二种思路开发环境实现代码第三种思路开发环境实现代码总结引言 此文主要记录用qt实现按钮的移动,具体效果如下: 模拟按钮移动效果 示例代码 本文记录了三种实现方式。 第一种 思路 用动态数组vector存放创…

系统调优助手,PyTorch Profiler TensorBoard 插件教程

0x1. 前言 使用PyTorch Profiler进行性能分析已经一段时间了&#xff0c;毕竟是PyTorch提供的原生profile工具&#xff0c;个人感觉做系统性能分析时感觉比Nsys更方便一些&#xff0c;并且画的图也比较直观。这里翻译一下PyTorch Profiler TensorBoard Plugin的教程并分享一些…

边缘计算网关的工业设备数据采集方案-天拓四方

随着工业4.0时代的到来&#xff0c;工业设备数据采集成为了实现智能制造、提升生产效率的关键环节。传统的数据采集方案往往依赖于中心化的数据处理方式&#xff0c;但这种方式在面对海量数据、实时性要求高的工业场景时&#xff0c;往往显得力不从心。因此&#xff0c;利用边缘…

代码+视频,R语言对数据进行多重插补后回归分析

我们在临床做回顾性研究分析中经常要面对数据缺失的问题&#xff0c;如果数据缺失量大就会对我们的研究结果产生影响&#xff0c;近年来&#xff0c;对数据进行多重插补广泛应用于SCI论文中。我们在之前的文章中已经演示了使用SPSS对数据进行多重插补并分析。今天&#xff0c;我…

swiper 去掉轮播图上的小点点 小圆圈(完美解决方案)

文章目录 问题描述解决方案问题复现处理方案 问题描述 大家好&#xff01;我是夏小花&#xff0c;今天是2024年4月22日|农历三月十四&#xff0c;今天这篇博文主要解决swiper 去掉轮播图上的小点点 小圆圈&#xff0c;具体解决方案如下所示 解决方案 问题复现 现在现在可以看…

cox版本的Boruta+SHAP分析(心力衰竭数据集)

Cox版本的BorutaSHAP分析&#xff08;心力衰竭数据集&#xff09; Boruta算法是变量筛选的有力工具&#xff0c;而SHAP分析是观察预测变量与结局变量间关系的不错的方法&#xff0c;在传统的分析方法的基础上提供了一个全新的视角。Boruta算法SHAP分析&#xff0c;正在逐渐成为…

【IT运维入门(ITHW)系列】之「快速部署」第二期清单(持续更新)

ITHW是Information Technology Hello World的缩写简拼。意在提供IT领域的入门相关知识&#xff0c;近期给大家带来的是主流技术选型的快速部署系列&#xff0c;意在最大程度地简化部署过程&#xff0c;以便能快速体验或测试相关技术选型。 「快速部署」第一期清单 ITHW快捷部署…

鸿蒙入门10-CheckBoxGroup组件

复选框群组 用于控制多个复选框全选或者不全选状态 参数 参数形式 &#xff1a; CheckboxGroup( options?: { group?: string } ) 创建复选框群组&#xff0c;可以用于控制群组内的 CheckBox 成员 全选 或者 不全选 相同 group 的 CheckBox 和 CheckBoxGroup 为同一群组 参…

java生成数据库数据到excel当做下拉选择,copy就完事~

背景&#xff1a;由于需要下载模板&#xff0c;模板包含下拉选择框&#xff0c;但是下拉选择框不想手写&#xff0c;并且需要从数据库读取&#xff0c;由于直接设置excel会有单元格最大255个字符长度限制&#xff0c;所以用到以下部分代码。 思路&#xff1a;由于数据模板在sh…