【Redis 系列】常用数据结构---String类型

🚀 欢迎来到我的CSDN博客:Optimistic _ chen

一名热爱技术与分享的全栈开发者,在这里记录成长,专注分享编程技术与实战经验,助力你的技术成长之路,与你共同进步!


🚀我的专栏推荐

专栏 内容特色 适合人群
🔥C语言从入门到精通 系统讲解基础语法、指针、内存管理、项目实战 零基础新手、考研党、复习
🔥Java基础语法 系统解释了基础语法、类与对象、继承 Java初学者
🔥Java核心技术 面向对象、集合框架、多线程、网络编程、新特性解析 有一定语法基础的开发者
🔥Java EE 进阶实战 Servlet、JSP、SpringBoot、MyBatis、项目案例拆解 想快速入门Java Web开发的同学
🔥Java数据结构与算法 图解数据结构、LeetCode刷题解析、大厂面试算法题 面试备战、算法爱好者、计算机专业学生

🚀我的承诺:

✅ 文章配套代码:每篇技术文章都提供完整的可运行代码示例

✅ 持续更新:专栏内容定期更新,紧跟技术趋势

✅ 答疑交流:欢迎在文章评论区留言讨论,我会及时回复(支持互粉)


🚀 关注我,解锁更多技术干货!
⏳ 每天进步一点点,未来惊艳所有人!✍️ 持续更新中,记得⭐收藏关注⭐不迷路 ✨

📌 标签:#技术博客#编程学习#Java#C语言#算法#程序员

文章目录

前言

前面博客讲到Redis的全局命令,意味着它们使用在大多数场景中;当然Redis 是一个高性能的键值数据库 ,支持多种数据结构。这篇博客使用常用数据结构String进行简单介绍。

String类型是Redis最基础的数据类型,它的特点:

  1. Redis中所有的键(key)的类型都是String类型,其他几种数据结构都是在字符串类型基础上构建的
  2. Redis内部存储字符串完全是按照⼆进制流的形式保存的,所以不存在编码转换(可以存储文本、数字或二进制数据,最大 512MB)。

常见命令

这里简单解释一下后面提到的特殊符合的意义:

  • \]:表示可选参数,可以根据需要选择使用

  • expiration :过期机制,Redis 为键设置生存时间(TTL),到期后自动删除。
  • EX seconds:使用秒作为单位设置key的过期时间
  • PX seconds:使用毫秒作为单位设置key的过期时间
  • NX:只在key不存在时才进⾏设置
  • XX:只在key存在时才进⾏设置
  • nil:表示为空

SET和GET

SET的作用:将string 类型的value设置到key中。

powershell 复制代码
#语法
SET key value [expiration EX seconds|PX milliseconds] [NX|XX]

返回值:
设置成功,返回OK.
如果SET指定了NX或者XX但条件不满⾜,SET不会执⾏,并返回 nil

GET的作用:获取对应的value

powershell 复制代码
get key

返回值:key对应的value,或者nil当key不存在
时间复杂度都是O(1).

MSET和MGET

MGET的作用:一次性获取多个key的值

MGET的返回值:对应的value列表;如果对应的key不存在或者对应的数据类型不是string,返回nil。

MSET作用:一次性设置多个key的值

返回值:OK
时间复杂度:一次性操作多组键值对,时间复杂度就是O(N),N取决于操作键值对的数量

注意:对于Redis来说,批量命令和单一命令的执行时间大差不差,但是,使⽤mget/mset由于可以有效地减少了⽹络传输时间,提高性能。

SET 系列工作流程


计数命令

INCR和DECR

INCR的作用:将key对应的string表⽰的数字加一(如果key不存在,则认为key对应的value是0;如果key的范围超过了64位有符号整型,则报错)

powershell 复制代码
incr key 

DECR的作用:将key对应的string 表示的数字减一(如果key不存在,则认为key对应的value是0;如果key的范围超过了64位有符号整型,则报错)

powershell 复制代码
decr key

两者返回值都是 integer 类型的加完后的数值。

INCRBY和DECRBY

INCRBY的作用:将key对应的string表示的数字加上对应的值

powershell 复制代码
incrby key decrement


DECRBY的作用:将key对应的string表⽰的数字减去对应的值

powershell 复制代码
DECRBY key decrement

两者返回值都是 integer 类型的加完后的值。

INCRBYFLOAT

作用:将key对应的string表⽰的浮点数加上对应的值。如果对应的值是负数,则视为减去对应的值。

powershell 复制代码
INCRBYFLOAT key increment

返回值:+ / - 完后的数值

注意:

上述计数操作的时间复杂度都是O(1),并且因为redis单机架构模型,多个客户端针对同一个key操作时,不会出现"线程安全问题"。

其他命令

APPEND

作用:如果key已经存在并且是⼀个string,命令会将value追加到原有string的后边。

powershell 复制代码
append key value

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

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

GETRANGE

作用:返回key对应的string的⼦串,由start和end确定(左闭右闭); 可以使⽤负数表⽰倒数。-1代表倒数第⼀个字符

powershell 复制代码
getrange key start end

返回值:string 类型的字串

SETRANGE

作用:覆盖字符串的一部分,从指定的偏移开始

powershell 复制代码
setrange key offset value

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

STRLEN

作用:获取key对应的string的长度(单位是字节)

powershell 复制代码
strlen key

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

内部编码

上篇博客讲到,字符串的内部编码有三种:raw,int,embstr 。redis会根据当前值的类型和长度动态决定使用哪种内部编码实现。

下面详细介绍这三种内部编码:

powershell 复制代码
#查看当前内部编码
object encoding key

raw

大于39个字节的字符串

embstr

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

int

8个字节的长整型

应用场景

cache(缓存)功能

大部分场景下,Redis作为缓冲层,MySQL作为存储层,绝大部分数据都是从redis中获取,因为redis具有支撑高并发的特性,降低MySQL的压力。

但是这样有一个问题,随着数据量的增大,redis的压力会越来越大,大部分数据压力都会由redis承担,后面会不会崩溃?

答案是会崩溃。所以redis在写键值对的时候给key提供了一个过期时间,时间到了这个数据自动被删除;同时还有淘汰策略等等解决方案。

还有计数功能,很多网站都使用redis作为计数工具,它可以实现快速计数、查询缓存的功能,同时数据可以异步处理或者落地到其他数据源

完结撒花!🎉

如果这篇博客对你有帮助,不妨点个赞支持一下吧!👍
你的鼓励是我创作的最大动力~

想获取更多干货? 欢迎关注我的专栏 → optimistic_chen

📌 收藏本文,下次需要时不迷路!

我们下期再见!💫 持续更新中......


悄悄说:点击主页有更多精彩内容哦~ 😊

相关推荐
程序员良辰2 小时前
【面试读心术】一场Redis项目面试的AB面
redis·面试·职场和发展
大猫子的技术日记2 小时前
Redis 快速上手实战教程:从零搭建高性能缓存系统
数据库·redis·缓存
莳花微语2 小时前
记录一次生产中mysql主备延迟问题处理
数据库·mysql
修炼室2 小时前
Freebase + Virtuoso 大规模导入实战:切片 Chunk、调大缓存、脚本化监控进度(可复现)
缓存
wen__xvn2 小时前
代码随想录算法训练营DAY1第一章 数组part01
数据结构·算法·leetcode
Hello.Reader2 小时前
Flink JDBC Driver把 Flink SQL Gateway 变成“数据库”,让 BI / 工具 / 应用直接用 JDBC 跑 Flink SQL
数据库·sql·flink
李宥小哥2 小时前
SQLite02-安装
数据库
一 乐2 小时前
景区管理|基于springboot + vue景区管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习
爱编码的傅同学2 小时前
【程序地址空间】页表的映射方式
c语言·数据结构·c++·算法