- 博客(25)
- 收藏
- 关注
原创 缓存击穿、缓存穿透、缓存雪崩
文章目录多级缓存架构缓存击穿缓存穿透缓存雪崩多级缓存架构在项目架构中,前端发送请求,服务器会先从缓存中获取数据,如果找到数据则直接返回,如果在缓存中没有找到则会去从数据库中获取,数据库取到后,更新缓存,并返回结果,如果数据库也没有获取到,则返回空值。这一架构设计在访问缓存时,如果设计不当,会发生严重的问题甚至导致数据库挂掉。缓存击穿由于大批量缓存在同一时间内失效,可能导致大量请求同时穿透缓存直达数据库,会造成数据库瞬间压力过大甚至挂掉。解决方案:1、对于这种情况,我们在批量增加缓存时最好将这一批
2022-04-02 15:34:20
1018
原创 Redis持久化
文章目录RDB快照AOF混合持久化RDB快照在默认情况下,Redis将内存数据库快照保存在名字为dump.rdb的二进制文件中。你可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数据集。save 60 1000;// 60s内数据集改动了1000次,会自动保存还可以手动执行命令生成RDB快照,进入Redis客户端执行命令save或者bgsave可以生成dump.rdb文件,每次命令执行都会将所有Redis内存快照到一个新的rdb文件里
2022-04-02 14:18:55
1131
2
原创 深入浅出Redis五种基本数据类型
文章目录1、StringSDS(Simple Dynamic String)2、RedisDB设计3、List1、String众所周知,Redis是使用C语言实现的一种非关系型数据库,在C语言中的字符串是由char[]组成的,结尾会自动添加’\0’,当读取到’\0’时,会停止继续往下读取,那么这种情况在我们使用Redis时是必不能出现的,为了防止计算机读取到字符串中的’\0’后不再继续往下读这一情况,Redis中的String使用了SDS作为底层数据结构。SDS(Simple Dynamic Stri
2022-04-01 18:39:18
2047
1
原创 Springboot前后端分离上传、下载压缩包、查看文件
Controller层: /** * 保存附件按钮 * @param file 附件 * @return 附件路径 **/ @PostMapping(value = "/upload") Object saveFile(@RequestParam("file") MultipartFile[] file) { return eventService.saveFile(file); } /** * 下载附件
2021-09-29 17:09:28
677
2
原创 了解JWT
登录验证方式1、session存放在服务器端,通过session ID去获取缺点:集群无法共享2、Token + Redis缺点:每次都需要根据token查询到相应内容。对服务器压力大。3、JwtJwt底层组成头部:记录令牌类型、签名算法等 {“alg”:“HS256”,“type”:“JWT”}payload 装载的数据:携带用户信息验证签名:防止Token被篡改、确保安全性Jwt与Token的区别Token依赖于Redis查询数据信息,token存放value数据比较安全。
2021-05-30 14:58:17
92
原创 数据库锁
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对于数据库而言显得尤其重要,也更加复杂。对数据操作的类型:读锁:针对同一份数据,多个读操作可以同时进行而不会互相影响。写锁:当前写操作没有完成前,它会阻断其他写锁和读锁。...
2021-05-21 09:26:34
84
原创 MySQL慢查询日志
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10s以上的语句会被日志记录。默认情况下,MySQL数据库没有开启慢日志查询,需要我们手动来设置这个参数。当然,如果不是调优需要的话,一般不建议开启该参数,开启慢查询日志会或多
2021-05-20 10:43:58
80
原创 explain性能分析
文章目录explain是什么explain如何使用explain作用执行计划包含的信息explain是什么使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析查询语句或是表结构的性能瓶颈。explain如何使用explain + SQL语句explain作用表的读取顺序数据读取操作的操作类型哪些索引可以使用哪些索引被实际使用表之间的引用每张表有多少行被优化器查询执行计划包含的信息1、id :select查询的序列号,包含一
2021-05-17 11:16:30
107
原创 SQL索引
文章目录什么是索引索引的优势和劣势MySQL索引分类MySQL索引结构哪些情况下需要创建索引哪些情况下不需要创建索引什么是索引MySQL官方对索引的定义是:索引(index)是帮助MySQL高效获取数据的数据结构。索引的本质:数据结构。可以简单的理解为:“排好序的快速查找数据结构”索引的目的在于提高查询效率,类比字典。一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上。我们平常所说的索引,如果没有特别指明,都是指B树结构组织的索引。索引的优势和劣势优
2021-05-16 16:36:25
235
原创 SQL性能下降原因及Join查询
原因查询语句写得烂索引失效关联查询过多(设计缺陷)服务器调优及各个参数设置(缓冲、线程数等)Join查询的SQL执行顺序手写SELECT <select_list> FROM <left_table><join_type>JOIN <right_table> ON <join_condition>WHERE <where_condition>GROUP BY <group_by_list>HA
2021-05-16 12:30:30
293
原创 Jedis无法远程连接阿里云服务器的redis问题
Jedis无法远程连接阿里云服务器的redis问题查了很多资料才最终解决了这个问题,现在对上述问题进行总结。CentOS7版本解决办法:1、停止并屏蔽firewalld服务systemctl stop firewalldsystemctl mask firewalld2、安装iptables-services软件包yum install iptables-services3、下载后启用iptables服务systemctl enable iptables4、启动iptables服务
2021-03-21 14:55:30
1291
3
原创 Redis概述和基础
Redis1、NoSQLNoSQL = Not Only SQL(不仅仅是SQL)泛指非关系型数据库的,随着web2.0互联网的诞生!传统的关系型数据库很难对付web2.0时代!尤其是超大规模的高并发的社区!暴露出来很多难以克服的问题,NoSQL在当今大数据环境下发展的十分迅速,Redis是发展最快的,也是当下我们必须掌握的技术。很多的数据类型用户的个人信息,社交网络,地理位置。这些数据类型的存储不需要一个固定的格式!不需要多月的操作就可以横向扩展的!NoSQL特点1、方便扩展(数据之间没有
2021-03-20 21:00:36
144
1
原创 第四天:Vue组件的slot以及webpack
插槽认识slot在生活中,很多地方都有插槽,电脑的USB插槽,插板中的电源插槽等。插槽的目的是让我们原来的设备具备更多的扩展性。比如电脑的USB我们可以插入U盘、鼠标、键盘、硬盘、手机、音响等等。组件的插槽组件的插槽也是为了让我们封装的组件更加具有扩展性。让使用者可以决定组件内部的一些内容到底展示了什么。封装组件如果我们每一个单独去封装一个组件,显然不合适:比如每一个页面都返回,这部分内容我们就要重复去封装。但是,如果我们封装成一个,好像也不合理有些左侧是菜单,有些是返回,有些中间是搜索,有些
2021-03-10 14:53:38
152
1
原创 初学MyBatis-Plus
MyBatis-PlusMyBatisPlus概述MyBatisPlus可以节省我们大量工作时间,所有的CRUD代码它都可以自动化完成!简介MyBatis-Plus(简称 MP)是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。特性无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Serv
2021-03-05 22:13:12
171
1
原创 第三天:Vue的组件化
1、什么是组件化?我们将一个完整的页面分成很多个组件,每个组件都用于实现页面的一个功能块,而每一个组件又可以进行细分。组件化是Vuejs中的重要思想,它提供了一种抽象,让我们可以开发出一个个独立可复用的小组件来构造我们的应用,任何的应用都会被抽象成一颗组件树。组件化思想的应用使我们在开发中尽可能的将页面拆分成一个个小的、可复用的组件,让我们的代码更加方便组织和管理,并且扩展性也更强。2、注册组件的基本步骤组件的使用分成三个步骤:1、创建组件构造器2、注册组件3、使用组件基本使用:<
2021-02-19 17:53:20
93
1
原创 基于Vue开发的购物车案例
需求:具有增加数量、减少数量、移除书信息、计算总价等功能。HTML:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>书籍购物车</title> <link rel="stylesheet" href="style.css"></head><body><div id="app">
2021-02-16 15:16:45
165
1
原创 第二天:Vue基础语法
1、计算属性的setter和getter每个计算属性都有setter和getter一般来说用到setter较少,都不希望数据被改动,所以只用getter时也有缩写<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><div id="app">
2021-02-15 21:28:49
201
1
原创 Vue登录切换中的问题及解决
用户登录切换案例用户在登录时,可以切换使用用户账号登录或者用户邮箱登录:类似场景:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><div id="app"> <span v-if="isUser"> <la
2021-02-15 18:50:38
269
原创 第一天:初学Vue
1、Vuejs的特点Vue是一个渐进式的框架,渐进式意味着你可以将Vue作为你应用的一部分嵌入其中,带来更丰富的交互体验。或者如果你希望将更多的业务逻辑使用Vue实现,那么Vue的核心库以及其生态系统,比如Core+Vue-route+Vuex,也可以满足你各种各样的需求。Vuejs有以下特点:1、解耦视图和数据2、可复用的组件3、前端路由技术4、状态管理5、虚拟DOM2、Vuejs的安装方式一:直接CDN引入你可以选择引入开发环境版本还是生产环境版本<!--开发环境版本,包含了
2021-02-14 01:35:59
24859
2
原创 Spring依赖注入
Spring框架的核心功能有两个,Spring容器作为超级工厂,负责创建、管理所有的Java对象,这些Java对象被称为Bean;Spring容器管理容器中Bean之间的依赖关系,Spring使用一种被称为:“依赖注入”的方式来管理Bean之间的依赖关系。当某个Java实例(调用者)需要另一个Java实例(被调用者)时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。在依赖注入的模式下,创建被调用者的工作不再由调用者完成,因此称为控制反转(Inversion of Control,IoC);创
2020-12-12 15:14:47
141
1
原创 使用Spring容器
1、BeanFactoryBeanFactory可视为Spring的BeanFactory容器,它的主要功能是为依赖注入(Dependency Injection,DI)提供支持。这个容器接口在org.springframework.beans.factory.BeanFactory中被定义。BeanFactory是用于访问Spring Bean容器的跟接口,是一个单纯的Bean工厂,也就是常说的IoC容器的顶层定义,各种IoC容器是在其基础上为了满足不同需求而扩展的,包括经常使用的Applicatio
2020-12-12 14:11:59
79
1
原创 Spring的简介
Spring的简介1、Spring是什么?Spring是分层的java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse of Control:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)为内核。提供了展现层SpringMVC和持久层Spring JDBCTemplate以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的企业级应用技术和类库,逐渐成为使用最多的javaEE企业应用开源框架。2、Spring的优势
2020-12-06 22:04:45
244
原创 基于javaGUI的文档识别工具制作
基于javaGUI的文档识别工具制作对于某些文本,其中富含了一些标志,需要去排除,以及去获得段落字数,以下是我个人写的一个比较简单的文档识别工具,含导入文件、导出文件以及一个简单的识别功能。1、功能实现以下功能实现纯属于个人想法,可能会有bug,仅供参考 /** * 去除字符串中的"。",";","?","!",“,” * 将所有其他多余的符号转换为" " * @param str 获取到的每行文字 */public static String
2020-12-06 21:43:47
139
原创 用0到9十个数字,每个数字使用一次,构成两个五位数a和b,并且a+20295=b.求a,b
方法1:这是一开始想到的方法,代码稍微有点长。首先,确定a数的范围,然后,取出a数其他位数上的数,存入列表中,a数各位上的数进行比较,然后根据a求出b的值,然后对b进行筛选,选出符合要求的b值。具体代码如下:#得到a数中的各位上的数def get_wei(a):w = a // 10000 # 万位q = a % 10000 // 1000 # 千位b = a % 1000 // 100 # 百位s = a % 100 // 10 # 十位g = a % 10 # 个位retu
2020-05-09 16:23:03
1252
原创 selenium截取图片到的位置和实际不同问题
from PIL import Image,ImageGrabfrom selenium import webdriverfrom selenium.webdriver import ActionChainsfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriv...
2020-05-06 13:58:29
1600
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人