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的介绍+操作

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

改进
改进后存在的问题
进一步改进
相关推荐
长谷深风1111 小时前
Redis 缓存架构与高并发问题终极解法
redis·后端·高并发·缓存穿透·缓存击穿·缓存雪崩·系统性能优化
PD我是你的真爱粉1 小时前
Redis基础与数据结构
数据结构·数据库·redis
茶杯梦轩2 小时前
从零起步学习Redis || 第十一章:主从切换时的哨兵机制如何实现及项目实战
服务器·redis
火山引擎开发者社区2 小时前
飞书聊天直接生视频!OpenClaw × Seedance Skill王炸组合
后端
Mr -老鬼2 小时前
基于 Go 的脚本平台 APP 云控系统
开发语言·后端·golang
rannn_1112 小时前
【苍穹外卖|Day7】缓存菜品、缓存套餐、添加购物车、查看购物车、清空购物车
java·spring boot·redis·后端·缓存·项目
BingoGo2 小时前
“Fatal error: require(): Failed opening required...” 以及如何彻底避免它再次出现
后端·php
zhougl9962 小时前
Springboot - druid 连接池
java·spring boot·后端
全栈前端老曹2 小时前
【Redis】发布订阅模型 —— Pub/Sub 原理、消息队列、聊天系统实战
前端·数据库·redis·设计模式·node.js·全栈·发布订阅模型