news 2026/7/17 7:08:14

Redis---string类型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis---string类型

redis中的字符串,直接按照二进制方式存储的,不会做任何编码转换,存的是什么,取出来还是什么

所以可以存储:
文本数据,整数,普通字符串,JSON,xml,图片,数据,音频

但是音频,视频体积可能过大,redis对于string类型,限制了大小最大是512Mb,redis单线程模型,希望进行操作都是比较快的


SET

操作格式:

set key value [ex(expiration) seconds | px seconds] [NX|XX]

NX:如果key不存在,才设置,如果key存在,则不设置,返回nil

EX:如果key存在,才设置,相当于更新操作,可以不存在,则不设置,返回nil

set命令的变种:


SETNX:不存在才能设置,存在则设置失败

SETEX:设置键值对的同时,设置时间

举个例子:

set key1 10 value1

PSETEX:设置key过期时间,与SETEX无非是单位不同,上面是秒,下面是毫秒

新的键值对,如果key存在,则让新的value覆盖旧的value,如果进行覆盖的话创建的时间也会被重新设置。

举个例子:

//设置定时删除 set key1 123 ex 10 //不存在才设置 set key2 123 ex 10 NX

清空全部键值对的操作:


FLUSHALL

GET

对于get来说,只支持string类型的value,如果value是其他类型,使用get则会失效。

MSET/MGET

与上面STE/GET最明显的区别就是,一次可以操作多组键值对

操作格式:
mset key value [key value...]

举个例子:

mset key1 value1 key2 value2 key3 value3 mget key1 key2 key3
时间复杂度

O(N)

N为key的数量

INCR/INCRBY/DECR/DECRBY/INCRBYFLOT

incr:对value进行+1

incrby:duivalue进行+n

decr:对value进行-1

decrby:对value进行-n

incrbyfloat:对value+/-小数n

举个例子:

set key 10 incr key

注意:

该整数大小对应C++中的long long

incr操作的key如果不存在,就会把这个key的value当作0来使用

incr/incrby/incrbyfloat加上负数就可以当减来使用

value支持负数的存在

时间复杂度:

O(1)

APPEND

如果key已经存在,并且是一个string,命令会将value追加到原有string后边。如果key不存在,那么该命令相当于set命令

操作格式:

append key value

举个例子:

append key1 value1
返回值:

追加后string的长度

时间复杂度:

O(1)

注意:

在Xshell终端,默认字符编码为utf8,所以在该终端输入汉字后,也是utf8编码的,所以一个汉字在itf8字符集中,通常是3个字节

在启动redis客户端的时候,加上--raw这样的选项,就可以使redis客户端能自动把二进制数据尝试翻译

CTRL + s在XShell中的作用是冻结当前画面

CTRL + q在XShell中的作用是解除冻结当前画面

getrange

获取字符串中的子串,相当于C++中的substr

操作格式:


getrange key start end

注意:
该指定的区间是前闭后闭,而不是大多数的前闭后开

redis下标还支持负数,-1表示倒数第一个

举个例子:

//设置一组键值对 set key helloworld //获取该键值对中的子串,从头拿到最后一个字符 getrange key 0 -1

注意:
如果字符串中的是汉字,此时切分字串,很可能不是完整的汉字,结果就非常随机

SETRANGE

对字串进行修改

操作格式:

setrange key offset(偏移量,可以理解为从第几个字节开始替换的)value

返回值:

替换后新的字符串的长度

注意:

替换后的长度不一定等于原长度,因为替换字串可能过长,导致长度高于原串长度

举个例子:

//设置键值对 set key1 helloword //替换字串,这样长度就高于燕来的子串 setrange key1 offset aaaaaaaaaaaaaaaaaaaa

注意:

该方式也可能导致汉字成乱码

setrange针对不存在的key也是可以操作的,不过会把offset之前不存在的内容填充成0x00

STRLEN

获取字符串的长度,单位是字节,当key存放的不是类型string时,会进行报错

操作格式:

strlen key

时间复杂度:

O(1)

返回值:


string的长度,当key不存在时返回0

举个例子:

set key1 value1 strlen key1

string的编码方式

字符串类型内部的编码方式有3种:
int:8字节编码

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

raw:大于39个字节字符串

注意:

不用刻意记住这些数字,这些数字可以根据需求场景进行配置

redis存储小数,本质上还是当作字符串来存,也就意味之在进行小数运算时需要先将字符串转换成小数,计算完毕后,再将小数转换成字符串进行存储,所以相对于整数计算,小数的开销更大。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 7:07:16

WS51单片机ISP下载速度优化:从9.6kbps提升至25.6kbps实战

如果你正在使用WS51系列单片机进行开发,可能会遇到一个共同的痛点:ISP下载速度太慢。传统的ISP下载程序往往只有几kbps的速度,每次烧录程序都需要等待几十秒甚至几分钟,这在快速迭代的开发过程中简直是噩梦。 但今天我要分享的经…

作者头像 李华
网站建设 2026/7/17 7:05:10

苹果M7芯片AI战略解析:从架构升级到开发者适配

1. 苹果芯片战略转向:从M6到AI驱动的M7彭博社最新爆料显示,苹果正在对其Mac芯片路线图进行重大调整。根据知名科技记者马克古尔曼的消息,苹果将跳过原计划的M6 Pro和M6 Max芯片,直接转向开发以AI为核心设计的M7系列。这个决定反映…

作者头像 李华
网站建设 2026/7/17 7:03:40

Dell服务器安装Win10无法识别NVMe SSD的解决方案

1. 问题背景与现象分析最近在给一台Dell PowerEdge R740服务器安装Windows 10系统时遇到了一个棘手问题:系统安装程序无法识别到已安装的NVMe固态硬盘。这个现象在服务器和工作站环境中并不罕见,特别是在使用较新型号的NVMe SSD时。具体表现为&#xff1…

作者头像 李华
网站建设 2026/7/17 7:03:37

Windows 11读书笔记1.2.1:版本、版本号与OS Build

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》 《超简单:用Python让Excel飞起来》…

作者头像 李华
网站建设 2026/7/17 7:03:31

基于RT-Thread和N32G457的电子围栏系统设计与实现

1. 项目背景与核心功能这个项目源于我在工业安全监控领域的一次实际需求。当时需要为某大型仓储园区设计一套低成本、高可靠性的电子围栏系统,要求能够实时监控人员或设备是否越界,并在违规时触发警报。经过多方对比,最终选择了基于RT-Thread…

作者头像 李华
网站建设 2026/7/17 7:03:00

高速PCB设计:从原理图到可靠电路板的5大关键陷阱

1. 为什么原理图正确不等于PCB设计正确在电子设计领域,有一个让很多工程师困惑的现象:明明原理图设计完全正确,PCB打样回来却出现各种信号完整性问题。这种情况在高速数字电路和射频设计中尤为常见。上周我就遇到一个典型案例:客户…

作者头像 李华