自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(170)
  • 问答 (1)
  • 收藏
  • 关注

原创 ④数据查询时,解决Redis缓存穿透的问题...

**缓存命中和穿透:** 正常情况下,当一个请求到达时,系统首先检查缓存中是否存在相应的数据。如果缓存中有数据(缓存命中),系统会直接返回该数据,避免了对数据库的访问,提高了响应速度。然而,如果缓存中不存在需要的数据,而且请求频繁,就可能导致缓存穿透问题。

2024-02-04 16:07:58 608 1

原创 WebSocket 双向通信

WebSocket是一种**全双工通信协议,适用于实时双向通信。**

2024-01-20 10:26:47 1298 15

原创 ③使用Redis缓存,并增强数据一致性。

缓存数据存储于代码中,而代码运行在内存中,内存的读写性能远高于磁盘,缓存可以大大降低用户访问并发量带来的服务器读写压力。

2024-01-08 10:39:37 1613 16

原创 【Java】接口和抽象类有什么共同点和区别?

常见面试题:比较一下接口和抽象类的异同?

2024-01-03 20:12:47 1683 16

原创 ⑩①【缓存】Redis持久化 RDB + AOF

RDB全称 Redis Database Backup file,即Redis数据备份文件,也被叫做**Redis数据快照。** AOF全称 Append Only File,即**追加文件。** Redis处理的**每一个写命令都会记录在AOF文件中** ,也可以将其看作日志文件。

2023-12-31 17:35:18 2093 63

原创 ②手机验证码登录功能:Redis实现session共享

- 当注册完成后,用户输入手机号与验证码点击登录,后端会校验用户提交的手机号和验证码,是否一致;- 如果一致,则根据手机号查询用户信息,不存在则新建,最后将用户数据保存到redis,并且生成token作为redis的key;- 当我们校验用户是否登录时,会去携带着token进行访问,从redis中取出token对应的value,判断是否存在这个数据,如果没有则拦截,如果存在则将其保存到threadLocal中,并且放行。

2023-12-28 12:35:02 1096 60

原创 【期末考试】计算机网络、网络及其计算 考试重点

计算机网络、网络及其计算【期末考试重点】

2023-12-24 22:14:23 4262 66

原创 ①归并排序、快速排序 、堆排序、计数排序[算法、代码模板、面试题]

归并排序是一种分治法(Divide and Conquer)的经典排序算法,它的基本思想是将原始数组划分成较小的数组,然后递归地对这些小数组进行排序,最后再将排好序的小数组合并成一个整体有序的数组。下面是**归并排序的详细过程: ...

2023-12-05 16:04:43 1031 22

原创 ①实现基于session的登录流程:发送验证码、登录注册、校验登陆状态

- `发送验证码`:- - 用户输入手机号,点击发送按钮进行手机号提交,程序会校验手机号是否合法,不合法时要求用户重新输入手机号,合法则在后台生成对应的验证码并保存至`session`,之后通过短信方式将验证码发送给用户。- `注册、登录`:- - 用户将手机号、验证码输入,后台从session中获取验证码与用户输入的验证码进行比对校验,如果不一致则无法通过校验,提示用户验证码错误,验证码一直则后台根据手机号查询用户,若用户不存在,则为用户创建账号信息并保存至数据库中,最后无论用户是否存在,都将用户的

2023-11-28 14:17:05 1571 34

原创 Spring Cache框架,实现了基于注解的缓存功能。

Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。Spring Cache提供了一层抽象,底层可以切换不同的cache实现。具体就是通过`CacheManager`接口来统一不同的缓存技术。CacheManager是Spring提供的各种缓存技术抽象接口。

2023-11-25 23:55:47 651 3

原创 ②⑩② 【读写分离】Sharding - JDBC 实现 MySQL读写分离[SpringBoot框架]

Sharding-JDBC是一个开源的Java中间件,它为关系型数据库提供了分片(sharding)功能。分片是一种数据库架构模式,通过将数据分散存储在多个数据库中,提高了系统的扩展性和性能。Sharding-JDBC致力于简化分片数据库的使用和管理,它提供了一种透明的方式让应用程序能够无感知地使用分片数据库。`适用性`:- 适用于任何基于JDBC的ORM框架,如: JPA,Hibernate, Mybatis,SpringJDBC,Template或直接使用JDBC。- 支持任何第三方的数

2023-11-25 23:48:44 233

原创 ②⑩① 【MySQL】什么是分库分表?拆分策略有什么?什么是MyCat?

- 🚀垂直拆分- - 垂直分库 - 垂直分表- 🚀水平拆分- - 水平分库 - 水平分表

2023-11-25 23:42:24 528

原创 ⑩【Redis Java客户端】:Jedis、SpringDataRedis、StringRedisTemplate

Redis的Java客户端使用:Jedis、SpringDataRedis、

2023-11-25 23:27:44 1498 43

原创 ⑨【Stream】Redis流是什么?怎么用?: Stream [使用手册]

- Redis Steam 是redis 5.0 新增的一种数据结构- Redis Stram**可以用来实现消息队列**,它支持消息的持久化、支持自动生成全局唯一ID、支持ack确认消息的模式、支持消费组模式等,让消息队列更加稳定和可靠

2023-11-25 23:15:04 619

原创 ⑧【HyperLoglog】Redis数据类型:HyperLoglog [使用手册]

- HyperLoglog 是用来做**基数统计**的算法,优点在于当输入元素的数量或者体积非常大时,计算基数所需的空间总是固定且很小的。- 基数统计:用于统计一个集合中不重复的元素个数,就是对集合**去重复**后剩余元素的计算- Redis中每个HyperLoglog键只需要花费12KB内存,就可以计算接近2^64个不同元素的基数。- 但,HyperLoglog只会根据输入的元素来计算基数,**无法存储输入元素本身**,所以无法像集合那样返回输入的各个元素。

2023-11-25 23:04:51 397

原创 ⑦【Redis GEO 】Redis常用数据类型:GEO [使用手册]

- Redis GEO主要用于存储地理位置信息,并对存储的选项进行操作:- 1.添加地理位置的坐标- 2.获取地理位置的坐标- 3.计算两个地理位置间的距离- 4.根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。

2023-11-25 23:00:24 727

原创 ⑥【bitmap 】Redis数据类型: bitmap [使用手册]

- 用String类型作为底层数据结构实现的一种统计二值状态(0,1)的数据类型- 位图本质是数组,它是基于String数据类型的按位的操作。该数组由多个二进制位组成,每个二进制位都对应一个偏移量(我们称之为一个索引)。- Bitmap支持的最大位数是2^32位,它可以极大的节约存储空间,使用512M内存就可以存储多达42.9亿的字节信息(2^32 = 4294967296)

2023-11-25 22:55:41 423

原创 ⑤【Sorted Set】Redis常用数据类型: ZSet [使用手册]

- Zset和set一样都是String类型的不可重复集合,但是有序的。- ZSet集合是通过哈希表实现的,添加、删除、查找的复杂度都是O(1)- 每个元素都会关联一个double类型的分数,以此为**集合成员进行由小到大的排序** 。

2023-11-23 17:00:00 646 3

原创 ④【Set】Redis常用数据类型: Set [使用手册]

- Redis的Set是String类型的无序不可重复集合,集合对象的编码可以是**intset**或者**hashtable**- Redis中Set集合是通过哈希表实现的,添加、删除、查找的复杂度都是O(1)- 集合中最多存放2^32-1个元素

2023-11-23 06:00:00 511 3

原创 ③【List】Redis常用数据类型: List [使用手册]

- redis列表是简单的字符串列表,可添加元素至**表头**或**表尾**。- 底层实际是个**双端链表**,最多可包含2^32-1个元素(4294967295)

2023-11-22 18:00:00 286

原创 ②【Hash】Redis常用数据类型:Hash [使用手册]

- redis hash 是一个String类型的field(字段)和value(值)的映射表。- redis中每个hash可以存储2^32-1个键值对(40多亿)

2023-11-22 06:00:00 949 28

原创 ②⑩ 【MySQL Log】详解MySQL日志:错误日志、二进制日志、查询日志、慢查询日志

错误日志是MySQL中最重要的日志之一,它记录了当`mysqld`启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。

2023-11-21 20:06:37 480

原创 ⑩⑨【Tool】MySQL常用客户端管理工具:mysql、mysqladmin、mysqlbinlog、mysqlshow、mysqldump、mysqlimport、source

MySQL常用客户端管理工具

2023-11-21 08:47:25 273 25

原创 ⑩⑧【MySQL】InnoDB架构、事务原理、MVCC多版本并发控制

MySQL5.5版本开始,默认使用InnoDB存储引擎,它擅长事务处理,具有崩溃恢复特性,在日常开发中使用非常广泛。下面是InnoDB架构图,左侧为内存结构,右侧为磁盘结构。**事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。**全称`Multi--Version Concurrency Control`,**多版本并发控制** 。指维护一个数据的多个版本,**使得读写操作没有冲突**

2023-11-20 09:26:50 1455 34

原创 ⑩⑦【MySQL】锁:全局锁、表级锁、行级锁

锁是计算机**协调多个进程或线程并发访问某一资源的机制** 。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何**保证数据并发访问的一致性、有效性** 是所有数据库必须解决的一个问题,**锁冲突** 也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。

2023-11-20 08:52:35 196 3

原创 ⑩⑥ 【MySQL】详解 触发器TRIGGER,协助 确保数据的完整性,日志记录,数据校验等操作。

触发器触发器是与表有关的数据库对象,指在之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性日志记录数据校验等操作。使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发不支持语句级触发。行级触发:执行insert / update / delete语句,影响5行数据,触发器会被触发5次。语句级触发:执行insert / update / delete语句,影响n行数据,触发器只触发1次。

2023-11-19 14:49:37 319 9

原创 ⑩⑤【DB】详解MySQL存储过程:变量、游标、存储函数、循环,判断语句、参数传递..

- **什么是存储过程?**- - `存储过程`是事先**经过编译并存储在数据库中的一段SQL语句的集合**,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,**对于提高数据处理的效率是有好处的**。 - 存储过程思想上很简单,**就是数据库SQL语言层面的代码封装与重用。**

2023-11-19 14:44:06 533 4

原创 ⑩④【MySQL】什么是视图?怎么用?视图的检查选项? 视图的作用?[VIEW]

视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。- **视图的所用?**- ⚪`简单`:视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。- ⚪`安全`:数据库可以授权,但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据。- ⚪`数据独立`:视图可帮助用户屏蔽真实表结构变化带来的影响。

2023-11-18 10:20:49 410 7

原创 ⑩③【MySQL】详解SQL优化

详解SQL优化,提升效率

2023-11-18 10:14:14 241

原创 ⑩② 【MySQL索引】详解MySQL`索引`:结构、分类、性能分析、设计及使用规则。

索引(index)是帮助MySQL**高效获取数据的数据结构**(有序):在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据就是索引。

2023-11-17 12:45:09 1545 65

原创 ⑩① 详解Linux安装 MySQL 8.0【保姆级教程】

MySQL安装教程,手把手指导,一步到位!

2023-11-17 12:28:51 542 9

原创 ①Redis String 字符串类型【命令汇总】

`set key value [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]``SET`命令有`EX`、`PX`、`NX`、`XX`、`KEEPTLL`五个可选参数,其中`KEEPTLL`为6.0版本添加的可选参数,其他为2.6.12版本添加的可选参数。- `EX seconds`:以秒为单位,设置过期时间- `PX millise

2023-11-16 12:20:49 294 2

原创 ⑩【MySQL】存储引擎详解, InnoDB、MyISAM、Memory。

存储引擎 - 介绍、操作==存储引擎就是存储数据、建立索引、更新 / 查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可称为表类型。(MySQL5.5 之后默认的存储引擎 ——InnoDB) ==🚀查询当前数据库的存储引擎🚀#语法-- 建表语句末尾使用ENGINE关键字,指定存储引擎。CREATE TABLE 表名(字段1 字段1类型 [COMMENT 字段1注释],字段2 字段2类型 [COMMENT 字段2注释],

2023-11-16 10:05:12 195 1

原创 ⑨【MySQL事务】事务开启、提交、回滚,事务特性ACID,脏读、幻读、不可重复读。

事务:事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,这些操作要么同时成功,要么同时失败。== MySQL的事务是默认自动提交的,当执行一条DML语句(对表字段进行增删改),MySQL会立即隐式地提交事务。==

2023-11-15 09:03:46 354 1

原创 ⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询

`多表关系`:- **一对一** :在`任意一方`加入外键,关联另一方的主键,并设置外键为唯一(UNIQUE)。- **一对多(多对一)** :在`多`的一方建立外键,指向`一`的一方的主键。- **多对多** :建立第三张表作为中间表,中间表**至少包含两个外键,分别关联双方主键**。**笛卡尔积**:两个集合,集合A 与 集合B中元素的所有组合情况,在多表查询时需要使用`WHERE关键字`或 `JOIN ON关键字`消除笛卡尔积。

2023-11-15 08:51:37 4386 57

原创 ⑦【MySQL】什么是约束?如何使用约束条件?主键、自增、外键、非空....

`约束`:- **什么是约束?**- - 约束是作用于表中字段上的规则,用于限制存储在表中的数据。- - **约束的作用:**- - **保证数据库中数据的正确性、有效性和完整性。**

2023-11-14 08:53:44 315 1

原创 ⑥ 【MySQL函数】字符串函数、数值函数、日期函数、流程函数

字符串函数、数值函数、日期函数、流程函数- ①字符串拼接,将S1,S2,S3...凭借成一个字符串- - ```sql CONCAT(S1,S2,...Sn) ``` - - ②将字符串str全部传换成小写- - ```sql LOWER(str) ``` - - ③将字符串str全部转换成大写- - ```sql UPPER(str) ``` - - ④左填充,用字符串pad对str的左边进行填充,达到n个字符串长

2023-11-14 08:45:35 75

原创 ⑤ 【MySQL】DCL语句 —— 用户管理、权限控制

- **MySQL用户管理**- - **①查询用户** - ```sql USE mysql; SELECT * FROM USER; ``` - - **②创建用户** - ```sql CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码'; ``` - - ```sql -- 实例: -- 创建用户 private_user,只能在当前主机访问,密码1234

2023-11-13 08:49:26 160 2

原创 ④【数据查询】MySQL查询语句,拿来即用。

SELECT 字段列表FROM 表名列表WHERE 条件列表GROUP BY 分组字段列表HAVING 分组后条件列表ORDER BY 排序字段列表 排序规则LIMIT 分页参数

2023-11-13 08:43:09 307

原创 ③【操作表数据】MySQL添加数据、修改数据、删除数据

`DML - 添加数据`:- **①给指定字段添加数据**- - ```sql INSERT INTO 表名(字段名1,字段名2...) VALUES(值1,值2...); ``` - - **②给全部字段添加数据**- - ```sql INSERT INTO 表名 VALUES(值1,值2...); ``` - - **③批量添加数据**- - ```sql INSERT INTO 表名(字段名1,字段名2...) VALUES

2023-11-07 14:07:38 652 39

springboot框架整合SSM案例-图书管理系统 源码分享

SpringBoot整合Spring+SpringMVC+MyBatisPlus案例:图书管理系统 内容包含 : - 实体类开发 —— 使用Lombok快速制作实体类(`Lombok`:一个Java类库,提供了一组注解,简化了POJO实体类开发) - Dao开发 —— 整合MyBatisPlus,制作数据层测试类 - Service开发 —— 整合MyBatisPlus进行增量开发,制作业务层测试类(Service接口名称定义为业务名称,与数据层接口名称进行区分) - Controller开发 —— 基于Restful开发,使用PostMan测试接口功能 - Controller开发 —— 前后端开发协议制作 - 页面开发 —— 基于VUE+ElementUI制作,前后端联调,页面数据处理,页面消息处理 - - 列表、新增、修改、删除、分页、查询 - 项目异常处理 - 按条件查询 —— 页面功能调整、Controller修正功能、Service修正功能 完整源码分享,喜欢的可以酌情下载,感谢下载者的支持!

2023-03-29

ViewBaseServlet代码模板,使用了thymeleaf视图模板技术,是处理视图模板文件的Servlet基类

处理视图模板文件的servlet基类; 继承:HttpServlet类 重写了init()方法: 1.获取ServletContext对象 2.创建Thymeleaf解析器对象 3.给解析器对象设置参数(前缀、后缀、缓存过期时间、是否缓存、编码方式) 4.创建模板引擎对象 5.给模板引擎对象设置模板解析器 包含processTemplate(templateName, request,response)方法: 1.设置响应体内容类型和字符集 2.创建WebContext对象 3.处理模板数据 部分代码: private TemplateEngine templateEngine; @Override public void init() throws ServletException { // 1.获取ServletContext对象 ServletContext servletContext = this.getServletContext(); // 2.创建Thymeleaf解析器 }

2022-12-29

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除