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.hqwc.cn/news/638062.html

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

相关文章

Umi.js:登录之后需要手动刷新权限菜单才能渲染

在使用Umi.js开发后台管理页面时,用户登录之后,总是需要手动刷新一次页面,才能够拿到全局状态/权限信息。 问题描述 结合使用umi/plugin-layout和umi/plugin-access,登录进入页面,配置的权限菜单未渲染,需…

Redis中的慢查询日志(一)

慢查询日志 概述 Redis的慢查询日志功能用于记录执行时间超过给定时长的命令请求,用户可以通过这个功能产生的日志来 监视和优化查询速度。服务器配置有两个和慢查询日志相关的选项: 1.slowlog-log-slower-than选项指定执行时间超过多少微妙(1秒1000 000微妙)的命…

一二三应用开发平台使用手册——系统管理-用户组-使用说明

概述 在RBAC模型中,资源、角色、用户三个关键元素,构成权限体系。在平台设计和实现的时候,以下几个核心问题思考如下: 角色,单层平铺还是树形结构? 在小型应用中,角色数量有限的情况下&#x…

VisionPro 脚本教程专栏:深入理解与实践

文章目录 VisionPro 脚本教程专栏:深入理解与实践。目录1. 脚本简介1.1 VisionPro 项目组成1.2 脚本的作用 2. 脚本类与方法2.1 ToolGroup 脚本类2.2 ToolBlock 脚本类2.3 Job 脚本类 3. 脚本使用案例3.1 Job脚本:自动调节曝光时间3.2 ToolBlock脚本&…

【Django】django.core.exceptions.AppRegistryNotReady: Apps aren‘t loaded yet.

其中django后台manage.py入口程序报错,检索很多问题解决方案,这里记录下个人问题原因 1.django启动异常问题详情 django.core.exceptions.AppRegistryNotReady: Apps aren’t loaded yet. 2.问题原因 Python第三方包安装版本不一致或缺少依赖包&…

江西智博环境| 邀您参加2024全国水科技大会暨技术装备成果展览会

展位号:A28 企业介绍 江西智博环境技术有限公司始创于2008年初,总部位于江西省域副中心城市-赣州。公司主要从事一体化净水设备、单村供站、泵船、无负压供水设备自动化控制系统、低配电系统、工艺设备及智慧水务的设计研发、生产、销售、安装、调试等业…

[练习]用Js获取html页面中表单提交的数据并且返回到控制台

代码地址​​​​​​​​​​​​​​​​​​​​​&#xff1a; ​​​​​​​将前端页面提交的数据返回到前端控制台 Dduo/前端学习仓库 - 码云 - 开源中国 (gitee.com) 效果图 项目结构 html <!DOCTYPE html> <html lang"en"> <head><…

spring版本介绍

Spring Framework 是一个广泛使用的 Java 平台&#xff0c;用于构建企业级应用程序。它提供了一个全面的编程和配置模型&#xff0c;支持现代 Java 应用程序的最佳实践&#xff0c;如依赖注入、面向切面编程以及基于注解的编程模型。自从 Spring 1.0 发布以来&#xff0c;已经经…

Android14 - WindowManagerService之客户端Activity布局

Android14 - WindowManagerService之客户端Activity布局 一、主要角色 WMS作为一个服务端&#xff0c;有多种客户端与其交互的场景。我们以常见的Activity为例&#xff1a; Activity&#xff1a;在ActivityThread构建一个Activity后&#xff0c;会调用其attach方法&#xff0c;…

redis底层数据结构之ziplist

目录 一、概述二、ziplist结构三、Entry结构四、为什么ZipList特别省内存五、ziplist的缺点 上一篇 redis底层数据结构之SDS 下一篇 明天更新 一、概述 一种连续内存空间存储的顺序数据结构&#xff0c;每个元素可以是字符串或整数。优点:节省内存空间。适用于存储小规模的列表…

# 从浅入深 学习 SpringCloud 微服务架构(三)注册中心 Eureka(3)

从浅入深 学习 SpringCloud 微服务架构&#xff08;三&#xff09;注册中心 Eureka&#xff08;3&#xff09; 段子手168 1、eureka&#xff1a;高可用的引入 Eureka Server 可以通过运行多个实例并相互注册的方式实现高可用部署&#xff0c; Eureka Server 实例会彼此增量地…

next.js app目录 i18n国际化简单实现

最近在用next写一个多语言的项目&#xff0c;找了好久没找到简单实现的教程&#xff0c;实践起来感觉都比较复杂&#xff0c;最后终于是在官方文档找到了&#xff0c;结合网上找到的代码demo&#xff0c;终于实现了&#xff0c;在这里简单总结一下。 此教程适用于比较简单的项…