Redis入门:从MySQL到高效缓存的飞跃

前面我们已经完成了入门项目的开发,有提到有关于redis的内容,但是并没有深入的对redis进行讲解/说明,那么今天这篇文章就来重点来讲一下redis

redis入门介绍:

既然要讲到redis,那么难免要提到MySQL。因为redis的引入就是为了解决MySQL访问量过大的问题,为了缓解MySQL的访问/查询压力,从而引入了redis的缓存技术,来实现数据的快速访问和读写操作

对比

MySQL用到的操作语言主要是SQL语言,而redis主要是nosql语言,接下来进行两者的对比:

首先是结构上

  1. SQL语言是结构化的语言,按照一定的语法来组织对应的SQL语句,需要结合业务开发的需求来插入对应的数据,在整个的数据库表中进行相对应的操作,每个字段需要什么样的数据,怎么插入,插入的关键字是什么,这些都是规定好的,不能发生更改!
  2. nosql语句则没有固定的语法结构,只需要根据实际的业务需求来引入对应的键值对/文件/图,能够清晰的表达其代表的含义即可!

接着是关联性

  1. 在SQL当中,如果给出一张用户表,和一张订单表,一般是需要一张中间表来关联两张表的信息 ;【补充:在实际的业务开发当中,不建议使用外键,因为外键的使用,会导致数据库访问性能下降,可以结合自己的实际开发需求来决策!】
  1. 在nosql语句当中,一般可以用一个文件,文件内部的数据格式类似于JSON文件的格式,来进行数据的存储,里面会记录关联的信息有哪些,但是很明显,这样子会造成内存的浪费问题,而且可视化也比较差,结合自身需要来选择对应的存储方式

查询数据

  1. SQL语句的查询,一般都会采用select固定格式来进行数据的查询操作,需要结合业务开发的实际需求来编写对应SQL语句,格式一般都是固定的
  2. nosql语句的查询,就没有固定的格式了,可以采用直接访问关键字的方式,也可以访问类似于函数的格式,也可以访问对应的url来实现对数据的访问,格式并不是单一的!

事务:注意,这里的事务指的是实现业务需求的一组SQL语句哦,不是日常生活中需要处理的事务

  1. MySQL事务 ,一般是在增删改上会加上事务,来实现对应的业务功能,同时也保证了操作的安全性,保证了数据的同步性!
  2. nosql语句就没有这么严格的要求,根据对应的业务需求来实现对应的业务功能即可,对安全性的要求不高

总的对比

认识Redis

主要是有以下的一些特征:

需要补充的是,对于现在最新版的redis,有的友友会觉得,redis已经不是变成多线程了吗?这里怎么写的还只是单线程。最新版的redis的多线程指的是网络请求访问部分,实现了多线程 。但是对于具体的业务处理,采用的仍然是单线程方式

为什么redis访问的速度快?因为redis是基于内存来进行工作的,MySQL的存储方式是磁盘,磁盘的访问速度肯定是要比内存的访问速度要慢的!!!

但是基于内存的话,会面临一个问题,如果用户电脑关机了,那么对应的数据不就丢失了吗 ,所以我们会进行数据持久化操作来将对应的数据保存到磁盘当中

redis执行

执行命令行客户端,可以结合业务需求来设置对应的值,提到设置对应的值,一般是在spring boot的yml文件当中进行对应功能的配置!

  1. 配置好对应的ip地址,但是对于初学者,一般会采用默认的ip地址,直接联机到本地的ip地址即可
  2. 端口。结合业务开发的需要以及避免端口的占用问题,开发者需要结合业务的实际需求来进行端口的设置工作
  3. 密码。如果设置了密码的话,则需要输入对应的密码来进行登录操作!

案例:

下面展示的是一些具体的小案例

redis数据结构介绍:

redis是一个key-value的数据库,key一般情况下是string类型,不过value的类型却是多种多样的

在实际开发当中,我们用的最多的是前面五种的基本类型,每一种数据结构都有不同的操作命令,但是这些命令之间都是相通的,可以深入学习其中的一种数据结构,然后其他的四种用类比的方式进行深入的学习

可以参考官方提供的数据访问方式:

redis命令

redis通用命令:
  1. 可以通过命令KEYS来查看所有符合模板的key,但是不建议在生产环境上使用,因为你想想嘛,如果一个redis里面有很多很多的key,然后通过这种方式去查找所有符合模板的key,系统需要访问所有的key,然后还需要到key里面进行比对的操作,会导致访问/查找的效率下降!
  2. DEL,对数据进行删除操作。
  3. EXISTIS,是为了判断key是否存在!
  4. EXPIRE,是为了设置对应的缓存的有效期,到时间后对应的KEY会自动删除,毕竟这些数据都是存在内容当中的,因此需要考虑对应的有效期的问题,保证系统的高效运行!
  5. TTL,查看一个key的有效期
  6. help,这个关键字会给出一个命令的具体用法!
string类型

需要注意,如果进行批量查询的话,查出来的value是和key一一对应的!

key的结构

需要根据实际的业务需求来设置对应的key结构:

保证了数据间不会因为id相同,而导致对应的查询数据出现异常,只需要到指定的包里面去查找对应的key即可!

但是我们接着想想,如果用上面JSON的格式来存储每一个key的value,在后续需要进行修改的时候放不方便?对字符串进行相对应的修改,肯定是不方便的,因此我们需要思考有没有其他的方式来优化

Hash类型
List类型
set类型
SortedSet类型

Redis的Java客户端

根据实际的业务需求,来选择对应的Java客户端来实现对应的功能

Jedis的使用
  1. 需要引入对应的依赖/对应的工具包
  2. 然后是需要建立连接,参照上面提到的redis配置信息,建立对应的连接和对应的端口号,redis默认选择的数据库是0,可以手动进行修改
  3. 接着是redis的测试工作
  4. 最后记得进行资源的释放操作
Jedis连接池

Jedis本身是线程不安全的,并且频繁的创建和销毁连接会造成性能的损耗,因此会采用Jedis连接池的方式

接着是需要对Jedis连接池进行相对应的配置操作,结合系统的硬件性能和具体的开发业务来进行综合考虑,来对Jedis进行系统的配置工作

SpringDataRedis
springdataredis的介绍+操作

需要注意的是,不要忘记对应的依赖注入!!!

改进
改进后存在的问题
进一步改进
相关推荐
Moment5 小时前
Vibe Coding 时代,到底该选什么样的工具来提升效率❓❓❓
前端·后端·github
Victor3565 小时前
MongoDB(27)什么是文本索引?
后端
可夫小子6 小时前
OpenClaw基础-3-telegram机器人配置与加入群聊
后端
IT_陈寒6 小时前
SpringBoot性能飙升200%?这5个隐藏配置你必须知道!
前端·人工智能·后端
aiopencode7 小时前
使用 Ipa Guard 命令行版本将 IPA 混淆接入自动化流程
后端·ios
掘金者阿豪7 小时前
Kavita+cpolar 打造随身数字书房,让资源不再混乱,通勤 、出差都能随心读。
后端
心之语歌8 小时前
Spring Security api接口 认证放行
后端
用户8356290780518 小时前
Python 实现 PPT 转 HTML
后端·python
0xDevNull8 小时前
MySQL索引进阶用法
后端·mysql
舒一笑8 小时前
程序员效率神器:一文掌握 tmux(服务器开发必备工具)
运维·后端·程序员