自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(273)
  • 收藏
  • 关注

原创 redis(16)缓存击穿

缓存击穿key 对应的数据存在,但在 redis 中过期(某个热门key过期),此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端数据库加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端数据库压垮。缓存击穿的现象数据库访问压力瞬时增加,数据库崩溃redis 里面没有出现大量 key 过期redis 正常运行缓存击穿发生的原因redis 某个 key 过期了,大...

2023-03-02 16:54:00 242

原创 redis(17)缓存穿透

缓存穿透key 对应的数据在数据源并不存在,每次针对此 key 的请求从缓存获取不到,请求都会压到数据源(数据库),从而可能压垮数据源。比如用一个不存在的用户 id 获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。缓存穿透发生的条件应用服务器压力变大redis 命中率降低一直查询数据库,使得数据库压力太大而压垮其实 redis 在这个...

2023-03-02 16:54:00 259

原创 redis(15)缓存雪崩

缓存雪崩现象:在极少时间段内,我们查询大量key的集中过期的情况,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端数据库加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端数据库压垮。缓存雪崩与缓存击穿的区别在于这里针对很多 key 缓存,前者则是某一个 key 正常访问。缓存失效瞬间解决方案构建多级缓存架构:nginx 缓存 + redis 缓存 +...

2023-03-02 16:53:00 260

原创 redis(14)主从复制

Redis主从复制主机数据更新后根据配置和策略, 自动同步到备机的 master/slaver 机制,Master 以写为主,Slave 以读为主,主从复制节点间数据是全量的。作用:读写分离,性能扩展容灾快速恢复上图将主服务器复制了3份从服务器,主服务器进行写操作,从服务器进行读操作,读写分离,减少压力复制原理Slave 启动成功连接到 master 后会发送一个...

2023-03-02 16:51:00 139

原创 redis(13)持久化操作-AOF

AOF(Append Only File)以日志的形式来记录每个写操作(增量保存),将 Redis 执行过的所有写指令记录下来 (读操作不记录), 只许追加文件但不可以改写文件,redis 启动之初会读取该文件重新构建数据,换言之,redis 重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。AOF 持久化流程客户端的请求写命令会被 append 追加到 AOF...

2023-03-02 08:00:00 87

原创 redis(12)持久化操作-RDB

前言Redis 提供了 2 个不同形式的持久化方式:RDB(Redis DataBase)AOF(Append Of File)RDB在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的 Snapshot 快照,它恢复时是将快照文件直接读到内存里。备份是如何执行的Redis 会单独创建(fork)一个子进程来进行持久化,首先会将数据写入到一个临时文件中,待持...

2023-02-28 16:25:00 126

原创 redis(11)事务秒杀案例

秒杀案例描述现在有1个秒杀的功能,1个原来价值5000元的手机现在搞活动,降价到1块钱,做秒杀活动。库存就10个,假设有10000人抢购。目前逻辑是:抢到了商品库存就减1,然后把用户id加入到秒杀成功者清单中Redis 事务(模拟秒杀并发)模拟我们使用工具 ab 模拟测试:CentOS6 默认安装CentOS7 需要手动安装: yum install httpd-tools执行...

2023-02-26 15:06:00 132

原创 redis(10)事务和锁机制

Redis事务定义Redis 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。Redis 事务的主要作用就是串联多个命令防止别的命令插队。Multi、Exec、discardRedis 事务中有 Multi、Exec 和 discard 三个指令,在 Redis 中,从输入 Multi 命令开始,输入的命令都...

2023-02-26 13:21:00 108

原创 redis(9)发布和订阅

什么是发布和订阅Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。Redis 的发布和订阅客户端可以订阅频道如下图:当给这个频道发布消息后,消息就会发送给订阅的客户端:发布订阅命令行实现打开一个客户端订阅 channel1:打开另一个客户端...

2023-02-25 14:43:00 80

原创 redis(8)有序集合Zset

有序集合ZsetRedis 有序集合 zset 与普通集合 set 非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。因为元素是有序的,所以你也可以很快的根据评分(score)或者次序(position)来获取一...

2023-02-25 13:50:00 187

原创 redis(7)哈希Hash

哈希HashRedis hash 是一个键值对集合。Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。类似 Java 里面的 Map<String,Object>。用户 ID 为查找的 key,存储的 value 用户对象包含姓名,年龄,生日等信息,如果用普通的 key/value 结构来...

2023-02-25 13:06:00 154

原创 redis(5)列表List

Redis列表Redis单键多值:Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。常用命令lpush/rpush <key><value1><value2><value3> 从左边/右边插入...

2023-02-25 13:05:00 175

原创 reids(6)set集合

Redis集合(Set)Redis set 对外提供的功能与 list 类似,是一个列表的功能,特殊之处在于 set 是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set 是一个很好的选择,并且 set 提供了判断某个成员是否在一个 set 集合内的重要接口,这个也是 list 所不能提供的。Redis 的Set是string类型的无序集合。它底层其实是一个va...

2023-02-25 13:05:00 179

原创 redis(4)String字符串

前言Redis中有5大数据类型,分别是字符串String、列表List、集合Set、哈希Hash、有序集合Zset,本篇介绍Redis的字符串StringRedis字符串String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个valueString类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化...

2023-02-24 20:18:00 303

原创 redis(3)关于key键的常用命令

Redis键的常用命令keys*:查看当前库所有keyexists key: 判断某个key是否存在type key:查看key的类型del key:删除指定的keyunlink key:异步删除指定的key(仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作)expire key 10:为给定的key设置过期时间为10sttl key:查看key还有多少秒过...

2023-02-24 12:36:00 100

原创 reids(2)概述与安装

前言redis安装在Linux服务器上,系统为centos7,安装的版本为redis6.2.10下载与安装下载地址:https://redis.io/download/#redis-downloads点击上面的链接就能进入redis下载页面,最新的目前是7.0这里使用的是6.2.10的版本,所以点击上图的More installation options,跳转到如下页面可以看到这里有...

2023-02-24 12:09:00 53

原创 redis(1)NoSQL数据库简介

1.1 技术发展redis是用来解决性能问题的数据库技术的分类:解决功能性问题:Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN解决扩展性问题:Struts、Spring、SpringMVC、Hibernate、Mybatis解决性能问题:NoSQL、Java线程、Hadoop、Nginx、MQ、ElasticSearch1.1.1 Web1....

2023-02-23 14:02:00 59

原创 python进阶(29)单例模式

初识单例模式单例模式含义单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置...

2022-11-24 13:17:00 169

原创 python进阶(28)import导入机制原理

前言在Python中,一个.py文件代表一个Module。在Module中可以是任何的符合Python文件格式的Python脚本。了解Module导入机制大有用处。1. Module组成一个.py文件就是一个module。Module中包括attribute, function等。 这里说的attribute其实是module的global variable。我们创建1个test1.py...

2022-11-23 11:32:00 1194

原创 python(27)反射机制

1. 什么是反射?它的核心本质其实就是基于字符串的事件驱动,通过字符串的形式去操作对象的属性或者方法2. 反射的优点一个概念被提出来,就是要明白它的优点有哪些,这样我们才能知道为什么要使用反射。2.1 场景构造开发1个网站,由两个文件组成,一个是具体执行操作的文件commons.py,一个是入口文件visit.py需求:需要在入口文件中设置让用户输入url, 根据用户输入的url去执行...

2022-11-09 09:57:00 263

原创 python进阶(26)collections标准库

前言这个模块实现了特定目标的容器,以提供Python标准内建容器dict ,list ,set , 和tuple 的替代选择。这个模块提供了以下几个函数函数作用namedtuple()创建命名元组子类的工厂函数deque类似列表(list)的容器,实现了在两端快速添加(append)和弹出(pop)ChainMap类似字典(dict)的容器类,将多个映射...

2022-11-08 09:04:00 230

原创 Java(15)Object类

前言Object类是Java中所有类的始祖,在Java中每个类都扩展了Object。如果没有明确地指出超类,Object就被认为是这个类的超类。由于在Java中每个类都是由Object类扩展而来的,所以熟悉这个类提供的所有服务十分重要。equals方法equals方法用于检测一个对象是否等于另外一个对象。在Object类中,equals方法比较的是两个对象的地址值,地址值相同返回true,...

2022-10-01 16:31:00 289

原创 零基础学Java(14)对象构造

对象构造之前学习了编写简单的构造器,可以定义对象的初始状态。但是,由于对象构造非常重要,所以Java提供了多种编写构造器的机制。重载有些类有多个构造器。例如,可以如下构造一个空的StringBuilder对象:var messages = new StringBuilder();或者,可以指定一个初始字符串:var todoList = new StringBuilder("To d...

2022-08-20 15:15:00 103

原创 零基础学Java(13)方法参数

前言首先回顾一下在程序设计语言中关于如何将参数传递给方法的一些专业术语。按值调用表示方法接收的是调用者提供的值。而按引调用表示方法接收的是调用者提供的变量地址。方法可以修改按引用传递的变量的值,而不能修改按值传递的变量的值。Java传参Java程序设计语言总是采用按值调用。也就是说,方法得到的是所有参数值的一个副本。具体来讲,方法不能修改传递给它的任何参数变量的内容。接下来,假定一个方法...

2022-07-28 13:28:00 109

原创 零基础学Java(12)静态字段与静态方法

静态字段与静态方法  之前我们都定义的main方法都被标记了static修饰符,那到底是什么意思?下面我们来看看静态字段  如果将一个字段定义为static,每个类只有一个这样的字段。而对于非静态的实例字段,每个对象都有自己的一个副本。例如,假设需要给每一个员工赋予唯一的标识码。这里给Employee类添加一个实例字段id和一个静态字段nextId:class Employee { ...

2022-07-27 09:14:00 134

原创 零基础学Java(11)自定义类

前言  之前的例子中,我们已经编写了一些简单的类。但是,那些类都只包含一个简单的main方法。现在来学习如何编写复杂应用程序所需要的那种主力类。通常这些类没有main方法,却有自己的实例字段和实例方法。要想构建一个完整的程序,会结合使用多个类,其中只有一个类有main方法。自定义简单的类  在Java中,最简单的类定义形式为:class ClassName { // 字段 ...

2022-07-26 10:24:00 639

原创 零基础学Java(10)面向对象-使用LocalDate类完成日历设计

前言在我们完成这个日历设计前,需要了解Java中的预定义类LocalDate的一些用法语法LocalDate.now() // 2022-07-01会构造一个新对象,表示构造这个对象时的日期。LocalDate.of(1999, 1, 1)可以提供年、月和日来构造对应一个特定日期的对象:当然,通常我们都希望将构造的对象保存在一个对象变量中:LocalDate newYearsEv...

2022-07-25 09:14:00 259

原创 零基础学Java(9)在mac上运行命令行提示"找不到或无法加载主类"

天坑遇到的问题:使用命令行执行命令:java EightSample,会报以下错误错误: 找不到或无法加载主类 EightSample运行环境mac系统IntelliJ IDEA编译器Java 1.8首先保证了Java环境变量和版本都是没问题的然后保证已经执行了以下命令,生成了.class后缀的文件javac EightSample.java那么为什么还是报错呢?问题原因...

2022-07-19 12:53:00 1154 2

原创 零基础学Java(8)数组

数组数组存储相同类型值的序列。声明数组数组是一种数据结构,用来存储同一类型值的集合。通过一个整型下标(index,或称索引)可以访问数组中的每一个值。例如,如果a是一个整型数组,a[i]就是数组中下标为i的整数。在声明数组变量时,需要指出数组类型(数据元素类型紧跟[])和数组变量的名字。下面声明了整型数组a:int[] a;不过,这条语句只声明了变量a,并没有将a初始化为一个真正的数...

2022-07-16 17:01:00 323

原创 零基础学Java(7)大数

大数如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中两个很有用的类:BigInteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现任意精度的整数运算,BigDecimal实现任意精度的浮点数运算。使用静态的valueof方法可以将普通的数值转换为大数:BigInteger a = BigInteger.valu...

2022-07-16 13:29:00 1401

原创 零基础学Java(6)控制流程

控制流程与任何程序设计语言一样,Java使用条件语句和循环结构确定控制流程。块作用域我们首先要了解块(block)的概念。块是指由若干条Java语句组成的语句,并用一对大括号括起来。块确定了变量的作用域。一个块可以嵌套在另一个快中。下面就是嵌套在main方法块中的一个块。public static void main(String[] args) { int n = 1...

2022-07-15 15:10:00 74

原创 零基础学Java(5)输入与输出

输入与输出读取输入要想通过控制台进行输入,首先需要构造一个与"标准输入流"System.in关联的Scanner对象。// 创建输入流对象Scanner in = new Scanner(System.in);现在,就可以使用Scanner类的各种方法读取输入了。例如,nextLine方法读取一行数据System.out.print("What is your name? ");S...

2022-07-08 14:34:00 86

原创 零基础学Java(4)字符串

字符串从概念上讲,Java字符串就是Unicode字符序列。例如,字符串"Java\u2122"由5个Unicode字符J、a、v、a和™组成。Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,很自然地叫做String。每个双引号括起来的字符串都是String类中的一个实例String e = ""; // an empty stringString greeti...

2022-07-06 10:47:00 131

原创 零基础学Java(3)运算符

运算符运算符用于连接值。Java提供了一组丰富的算术和逻辑运算符以及数学函数。算术运算符在Java中,使用算术运算符+、-、*、/表示加、减、乘、除运算。当参与/运算的两个操作数都是整数时,表示整数除法;否则,表示浮点除法。整数的求余操作用%表示。例如,15/2=7,15%2=1,15.0/2=7.5需要注意,整数被0除将虎产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。数学函...

2022-07-05 15:24:00 103

原创 零基础学Java(2)数据类型与变量

前言Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。在Java中,一共8种基本类型,其中有4种整型、2种浮点型、1种字符串类型char(用于表示Unicode编码的代码单元)和1种用于表示真值的boolean类型。注释Java有一个能够表示任意精度的算术包,通常称为"大数"(big number),它不是一种基本Java类型,而是一个Java对象。数据类型整型Jav...

2022-07-05 09:33:00 73

原创 零基础学Java(1)初识Java程序

前言就国内来说,Java毫无疑问是后端语言中的No.1没有之一,所以今天我们也来0基础学习Java!!!Java的好处(针对测试工程师)面试加分->涨薪大多数公司服务端用的都是Java,学习之后能看懂后台逻辑,方便快速定位问题在如此卷的环境下,不得不去跟着一起卷(躺平不香吗?学什么Java)Java生态两个字"完美",前辈们坑都采完了,库也帮你写好了操作环境配置环境这里就...

2022-07-04 17:21:00 78

原创 TypeScript(7)泛型

泛型指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定具体类型的一种特性。引入下面创建一个函数, 实现功能: 根据指定的数量 count 和数据 value , 创建一个包含 count 个 value 的数组 不用泛型的话,这个函数可能是下面这样:function createArray(value: any, count: number): any[] { ...

2022-06-22 16:06:00 138

原创 TypeScript(6)函数

函数函数是 JavaScript 应用程序的基础,它帮助你实现抽象层,模拟类,信息隐藏和模块。在 TypeScript 里,虽然已经支持类,命名空间和模块,但函数仍然是主要的定义行为的地方。TypeScript 为 JavaScript 函数添加了额外的功能,让我们可以更容易地使用。基本示例和 JavaScript 一样,TypeScript 函数可以创建有名字的函数和匿名函数。你可以随意...

2022-06-21 14:30:00 85

原创 TypeScript(5)类、继承、多态

前言对于传统的 JavaScript 程序我们会使用函数和基于原型的继承来创建可重用的组件,但对于熟悉使用面向对象方式的程序员使用这些语法就有些棘手,因为他们用的是基于类的继承并且对象是由类构建出来的。 从 ECMAScript 2015,也就是 ES6 开始, JavaScript 程序员将能够使用基于类的面向对象的方式。 使用 TypeScript,我们允许开发者现在就使用这些特性,并且编...

2022-06-20 17:07:00 127

原创 TypeScript(4)接口

介绍TypeScript 的核心原则之一是对值所具有的结构进行类型检查。我们使用接口(Interfaces)来定义对象的类型。接口是对象的状态(属性)和行为(方法)的抽象(描述)接口初探声明接口需要使用关键字interface,接下来我们定义一个接口,需求如下需求: 创建人的对象, 需要对人的属性进行一定的约束id是number类型, 必须有, 只读的name是string类型, 必...

2022-06-20 09:31:00 82

空空如也

空空如也

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

TA关注的人

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