Redis数据类型——String

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 keyredis> 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 numredis> SET mykey "10"
"OK"
redis> INCRBY mykey 5
(integer) 15

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

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

时间复杂度:O(1)

0x05 decr & decrby

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

#基本语法decr keyredis> 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 rangedecrby key numredis> 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 endredis> 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 valueredis> SET key1 "Hello World"
"OK"
redis> SETRANGE key1 6 "Redis"
(integer) 11
redis> GET key1
"Hello Redis"

 功能:在offset设置字符串value

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

时间复杂度:O(1)

0x08 strlen

#基本语法strlen keyredis> 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 valueredis> 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.mzph.cn/news/826924.shtml

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

相关文章

打造稳定安全的亚马逊测评环境:关键步骤与要点一览

亚马逊测评环境的搭建是一项既复杂又需要深入细致考虑的工作,它涉及多方面的技术配置和资源准备。以下是一些关键步骤和要点,帮助您更高效地构建测评环境。 一、资源筹备 1. 养号系统:选择稳定、高效的养号系统,确保能够模拟真实…

Linux系统-进程和计划任务管理

一.程序和进程 1.程序 保持在硬盘、光盘等介质中的可执行代码和数据文件中静态保存的代码 2.进程 在CPU及内存中运行的程序代码动态执行的代码父、子进程每个程序可以创建一个或多个进程 3.进程特征 动态性:进程是程序的一次执行过程,是临时的&…

决策树分类任务实战(python 代码详解)

目录 一、导入库、数据集、并划分训练集和测试集 二、参数调优 (一)第一种调参方法:for循环 (1)单参数优化 ①单参数优化(无K折交叉验证) ②单参数K折交叉验证 优化 (2)多参数优化 ①多参数优化(无K折交叉验证) 参数介绍: ②多参数K折交叉验证…

vulfocus靶场名称: apache-cve_2021_41773/apache-cve_2021_42013

Apache HTTP Server 2.4.49、2.4.50版本对路径规范化所做的更改中存在一个路径穿越漏洞,攻击者可利用该漏洞读取到Web目录外的其他文件,如系统配置文件、网站源码等,甚至在特定情况下,攻击者可构造恶意请求执行命令,控…

记录一下hive启动metestore服务时报错

【背景说明】 之前hadoop有问题,把hadoop和MySQL删了重装,hive没有动,然后启hive的metastore服务的时候,显示找不到metastore数据库 【报错】 Caused by: java.lang.reflect.InvocationTargetExceptionat sun.reflect.Generated…

【Java框架】SpringMVC(一)——基本的环境搭建及基本结构体系

目录 MVC模式视图(View)控制器(Controller)模型(Model)JSP Model1JSP Model2MVC的优点MVC的缺点 Spring MVC架构介绍特点 SpringMVC环境搭建(在前面Spring整合Mybatis的基础上)1.创建控制器Controller2.创建springmvc配置文件,并添加Controller的Bean3.web.xml中配置…

# 从浅入深 学习 SpringCloud 微服务架构(二)模拟微服务环境(1)

从浅入深 学习 SpringCloud 微服务架构(二)模拟微服务环境(1) 段子手168 1、打开 idea 创建父工程 创建 artifactId 名为 spring_cloud_demo 的 maven 工程。 --> idea --> File --> New --> Project --> Ma…

2024 CKA 最新 | 基础操作教程(十七)

题目内容 设置配置环境: [candidatenode-1] $ kubectl config use-context ek8s Task 将名为 node02 的 node 设置为不可用,并重新调度该 node 上所有运行的 pods。 考点相关内容分析 node 在 Kubernetes(K8s)中&#xff0c…

VASA-1:一键生成高质量视频,颠覆你的想象!

VASA-1:语音生成AI视频 前言 最近,微软公司公布了一项图生视频的 VASA-1 框架,该 AI 框架只需使用一张真人肖像照片和一段个人语音音频,就能够生成精确逼真的相对应文本的视频,而且可以使表情和面部动作表现的十分自然…

【数据结构】栈和队列(链表模拟队列)

学习本章节必须具备 单链表的前置知识, 建议提前学习:点击链接学习:单链表各种功能函数 细节 详解 本章节是学习用 单链表模拟队列 1. 单链表实现队列 思路如下 队列:只允许在一端进行插入数据操作,在另一端进行删除数…

线程互斥及基于线程锁的抢票程序

我们实现一个简单的多线程抢票程序。 #include<iostream> #include<thread> #include<unistd.h> #include<functional> #include<vector> using namespace std; template<class T> using func_tfunction<void(T)>;//返回值为void,…

XUbuntu18.04 源码编译Qt4.5.3的过程

由于新公司很多旧的软件都是基于这个版本做的嵌入式开发。 所以想要自己搭一套基于Linux的非嵌入式开发环境&#xff0c;方便用来调试和编译代码。 这样就可以完成在linux下开发&#xff0c;然后直接嵌入式打包&#xff0c;涉及到界面的部分就不需要上机调试看问题了。 所以…

Axure引用ECharts图表 解决火狐浏览器出错

Axure原型添加Echarts图表&#xff0c;没耐心看文章的可以直接下载示例 Axure中使用ECharts图表示例 1. 打开Axure新建页面 2. 页面添加元件 元件类型随意&#xff0c;矩形、动态面板、热区、图片 甚至段落都可以3. 命名元件 随意命名&#xff0c;单个页面用到多个图表时名…

机器学习-11-基于多模态特征融合的图像文本检索

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中图像文本检索技术。此技术把自然语言处理和图像处理进行了融合。 参考 2024年&#xff08;第12届&#xff09;“泰迪杯”数据挖掘挑战赛 图像特征提取&#xff08;VGG和Resnet特征提取卷积过程详解&…

Facebook账号运营要用什么IP?

众所周知&#xff0c;Facebook封号大多数情况都是因为IP的原因。Facebook对于用户账号有严格的IP要求和限制&#xff0c;以维护平台的稳定性和安全性。在这种背景下&#xff0c;海外IP代理成为了一种有效的解决方案&#xff0c;帮助用户避免检测&#xff0c;更加快捷安全地进行…

学习笔记:Vue2中级篇

Vue2 学习笔记&#xff1a;Vue2基础篇_ljtxy.love的博客-CSDN博客学习笔记&#xff1a;Vue2中级篇_ljtxy.love的博客-CSDN博客学习笔记&#xff1a;Vue2高级篇_ljtxy.love的博客-CSDN博客 Vue3 学习笔记&#xff1a;Vue3_ljtxy.love的博客&#xff09;-CSDN博客 文章目录 5.…

SpringCloud系列(5)--SpringCloud微服务工程公共部分提取

前言&#xff1a;在上一章节中我们创建了两个个SpringCloud工程&#xff0c;但在两个工程中分别存在着一些重复的部分&#xff0c;例如重复的实体类&#xff08;如图所示&#xff09;&#xff0c;这样会造成系统的冗余&#xff0c;所以我们需要把公共的类提取到一个工程里&…

JavaScript变量及数据类型

目录 概述&#xff1a; 变量&#xff1a; 前言&#xff1a; 变量的命名&#xff1a; 定义变量&#xff1a; 为变量赋值&#xff1a; 变量提升&#xff1a; let和const关键字&#xff1a; JS数据类型&#xff1a; 前言&#xff1a; typeof操作符&#xff1a; JS基本…

RK3588 Android13 鼠标风格自定义动态切换

前言 电视产品,客户提供了三套鼠标图标过来,要求替换系统中原有丑陋风格且要支持动态切换, 并且在 TvSetting 中要有菜单,客户说啥就是啥呗,开整。 效果图 test framework 部分修改文件清单 png 为鼠标风格资源图片,这里就不提供了,可自由找一个替换一下就行 framew…

渐进时间复杂度O(n)

基本操作数 算法的运行速度受计算机性能的影响&#xff0c;所以通常考虑算法效率的不是算法运行的实际用时&#xff0c;而是算法运行所需要进行的基本操作的数量。 像加减乘除、访问变量、给变量赋值等都可以看作基本操作。对基本操作的计数或是估测可以作为评判算法用时的指标…