自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Nginx之rewrite、防盗链、高可用配置(2025)

是 Nginx 中一个非常强大的指令,用于对请求的 URI 进行重写(即修改请求的路径)。表示完成当前的重写操作后,Nginx 会重新检查新的 URI 是否匹配其他。:完成当前的重写操作后,重新检查新的 URI 是否匹配其他。:完成当前的重写操作后,停止进一步的重写操作,直接进入当前。:返回 302 临时重定向响应,告诉客户端请求的新位置。:返回 301 永久重定向响应,告诉客户端请求的新位置。:可选的标志,用于控制重写的行为。:替换后的 URI 或重定向的目标地址。:正则表达式,用于匹配请求的 URI。

2025-04-06 04:00:00 330

原创 Nginx 基础使用(2025)

轮询:适用于服务器性能相近的场景。权重:适用于服务器性能不均的场景。最少连接:适用于请求量波动较大的场景。IP 哈希:适用于需要会话保持的场景。URL 哈希:适用于静态资源的负载均衡。响应时间:适用于对响应时间敏感的场景。备用服务器:用于提高系统的可用性。禁用服务器:用于维护或故障处理。根据实际需求选择合适的策略和配置,可以有效提升系统的性能和可用性。

2025-04-05 14:04:08 436

原创 Java线程池

我们要想自定义线程池,必须先了解线程池的工作原理,才能自己定义线程池;这里我们通过观察java中ThreadPoolExecutor的源码来学习线程池的原理;(源码演示在idea中查看)ExecutorService接口是java内置的线程池接口,通过学习接口中的方法,可以快速的掌握java内置线程池的基本使用常用方法:void shutdown() 启动一次顺序关闭,执行以前提交的任务,但不接受新任务。

2025-03-31 01:00:00 539

原创 Java多线程编程

守护线程是为用户线程服务的后台线程。当程序中所有用户线程都执行完毕后,守护线程会自动结束。

2025-03-24 01:00:00 1468

原创 Redis分片集群

Redis如何判断某个key应该在哪个实例?将16384个插槽分配到不同的实例根据key的有效部分计算哈希值,对16384取余余数作为插槽,寻找插槽所在实例即可如何将同一类数据固定的保存在同一个Redis实例?这一类数据使用相同的有效部分,例如key都以{typeId}为前缀。

2025-03-08 02:00:00 619

原创 Redis哨兵

Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。

2025-03-07 02:00:00 872

原创 Redis主从

如果slave的offset小于master的offset,说明slave数据落后于master,需要更新。因为slave原本也是一个master,有自己的replid和offset,当第一次变成slave,与master建立连接时,发送的replid和offset是自己的replid和offset。不过,旧的数据只要是绿色的,说明是已经被同步到slave的数据,即便被覆盖了也没什么影响。master判断发现slave发送来的replid与自己的不一致,说明这是一个全新的slave,就知道要做全量同步了。

2025-03-05 02:00:00 971

原创 Redis持久化

Redis有两种持久化方案:RDB持久化AOF持久化。

2025-03-03 06:00:00 897

原创 基于Redis实现UV统计

UV统计在服务端做会比较麻烦,因为要判断该用户是否已经统计过了,需要将统计过的用户信息保存。PV:全称Page View,也叫页面访问量或点击量,用户每访问网站的一个页面,记录1次PV,用户多次打开页面,则记录多次PV。Hyperloglog(HLL)是从Loglog算法派生的概率算法,用于确定非常大的集合的基数,而不需要存储其所有值。通常来说UV会比PV大很多,所以衡量同一个网站的访问量,我们需要综合考虑很多因素,所以我们只是单纯的把这两个值作为一个参考值。作为代价,其测量结果是概率性的,

2025-03-03 05:00:00 893

原创 基于Redis实现用户签到

id % bitmap.size = 算出当前这个id对应应该落在bitmap的哪个索引上,然后将这个值从0变成1,然后当用户来查询数据时,此时已经没有了list,让用户用他查询的id去用相同的哈希算法, 算出来当前这个id应当落在bitmap的哪一位,然后判断这一位是0,还是1,如果是0则表明这一位上的数据一定不存在, 采用这种方式来处理,需要重点考虑一个事情,就是误差率,所谓的误差率就是指当发生哈希冲突的时候,产生的误差。这个很容易,可以通过后台代码直接获取即可,然后到对应的地址上去修改bitMap。

2025-03-03 04:00:00 679

原创 基于Redis实现附近商户

当我们点击美食之后,会出现一系列的商家,商家中可以按照多种排序方式,我们此时关注的是距离,这个地方就需要使用到我们的GEO,向后台传入当前app收集的地址(我们此处是写死的) ,以当前坐标作为圆心,同时绑定相同的店家类型type,以及分页信息,把这几个条件传入后台,后台查询出对应的数据再返回。但是这个时候还有一个问题,就是在redis中并没有存储type,所以我们无法根据type来对数据进行筛选,所以我们可以按照商户类型做分组,类型相同的商户作为同一组,以typeId为key存入同一个GEO集合中即可。

2025-03-03 03:00:00 796

原创 基于Redis实现好友关注

推拉模式是一个折中的方案,站在发件人这一段,如果是个普通的人,那么我们采用写扩散的方式,直接把数据写入到他的粉丝中去,因为普通的人他的粉丝关注量比较小,所以这样做没有压力,如果是大V,那么他是直接将数据先写入到一份到发件箱里边去,然后再直接写一份到活跃粉丝收件箱里边去,现在站在收件人这端来看,如果是活跃粉丝,那么大V和普通的人发的都会直接写入到自己收件箱里边来,而如果是普通的粉丝,由于他们上线不是很频繁,所以等他们上线时,再从发件箱里边去拉信息。需求:利用Redis中恰当的数据结构,实现共同关注功能。

2025-03-03 02:00:00 1065

原创 基于Redis实现达人探店

对应的表有两个: tb_blog:探店笔记表,包含笔记中的标题、文字、图片等 tb_blog_comments:其他用户对探店笔记的评价。因为我们的数据是不能重复的,当用户操作过之后,无论他怎么操作,都是。

2025-03-02 02:00:00 372

原创 Redis消息队列

所谓解耦,举一个生活中的例子就是:快递员(生产者)把快递放到快递柜里边(Message Queue)去,我们(消费者)从快递柜里边去拿东西,这就是一个异步,如果耦合,那么这个快递员相当于直接把快递交给你,这事固然好,但是万一你不在家,那么快递员就会一直等你,这就浪费了快递员的时间,所以这种思想在我们日常开发中,是非常有必要的。注意:当我们指定起始ID为$时,代表读取最新的消息,如果我们处理一条消息的过程中,又有超过1条以上的消息到达队列,则下次获取时也只能获取到最新的一条,会出现漏读消息的问题。

2025-02-28 02:00:00 1385

原创 基于Redis的秒杀优化

秒杀业务的优化思路是什么?先利用Redis完成库存余量、一人一单判断,完成抢单业务再将下单业务放入阻塞队列,利用独立线程异步下单基于阻塞队列的异步秒杀存在哪些问题?内存限制问题数据安全问题。

2025-02-27 20:01:07 788

原创 分布式锁-Redisson原理与机制

在Lock锁中,他是借助于底层的一个voaltile的一个state变量来记录重入的状态的,比如当前没有人持有这把锁,那么state=0,假如有人持有这把锁,那么state=1,如果持有这把锁的人再次持有这把锁,那么state就会+1 ,如果是对于synchronized而言,他在c语言代码中会有一个count,原理和state类似,也是重入一次就加一,释放一次就-1 ,直到减少成0 时,表示当前这把锁没有被人持有。此时需要通过大key+小key判断当前这把锁是否是属于自己的,如果是自己的,则进行。

2025-02-25 20:03:59 835

原创 MySQL管理

MySQL中的系统数据库是指存储MySQL服务器的元数据和系统信息的特殊数据库。这些数据库包含了关于用户、权限、表、索引、视图、存储过程、触发器等对象的定义和配置信息。mysql这是最重要的系统数据库,包含了用户账户、权限、数据库服务器的配置信息等。它包含了如userdbhost等表,用于存储用户权限和数据库级别的权限。proc表存储了存储过程和函数的信息。这是一个虚拟数据库,提供了关于其他所有数据库和它们的表的元数据。它不存储实际的数据,而是提供了一个查询接口来访问数据库的元数据。

2024-12-29 16:15:32 255

原创 MVCC多版本并发控制

undo log回滚日志,在insert、update、delete的时候产生的便于数据回滚的日志。当insert的时候,产生的undo log日志只在回滚时需要,在事务提交后,可被立即删除。而update、delete的时候,产生的undo log日志不仅在回滚时需要,在快照读时也需要,不会立即被删除。简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读。undo log日志会记录原来的版本的数据,因为是通过undo log 日志进行回滚的。

2024-12-29 15:22:17 407

原创 Linux中部署PostgreSQL保姆级教程

①进入数据库(在bin目录下,即/usr/local/postgresql/bin)切换到postgres用户进入数据库(默认连接postgres数据库)②查询所有的数据库\l③查看当前所在的数据库④创建数据库CREATE DATABASE "数据库名";⑤切换数据库\c "数据库名"⑥查询当前数据库所有的表\dt⑦启动、重启、关闭数据库切换postgres用户。

2024-11-01 16:40:35 1896 1

原创 Linux部署Nginx保姆级教程

Nginx的官方网站为:Nginx的官方下载网站为,当然你也可以之间在首页选中右边的download进入版本下载网页。

2024-10-25 15:29:47 1498

原创 Linux中部署Mysql保姆级教程

以前的Linux系统中数据库大部分是mysql,不过自从被sun收购之后,就没有集成在centos这些开源Linux系统中了,centos7 已经不支持mysql,内部集成了mariadb,而安装mysql的话会和mariadb的文件冲突,所以需要先卸载掉mariadb。)是MySQL的主配置文件,它包含了数据库服务器运行所需的设置。以上路径是通过YUM安装的MySQL的一些默认路径,但具体的路径可能会因不同的Linux发行版和安装方式而有所差异。是MySQL中的一个系统变量,用于设置密码的最小长度。

2024-10-20 15:16:44 3074 1

原创 Linux部署redis保姆级教程

(Least Recently Used,最近最少使用)策略会从Redis中的所有键中选择那些最近最少使用的键进行淘汰,以释放内存空间。:如果系统启用了SELinux,还会安装相应的SELinux模块,以确保Redis服务能够正确访问其所需的资源。指令定义了在指定的时间间隔内,如果发生了指定数量的写操作,Redis 就会自动将数据保存到磁盘上。8G内存服务器推荐配置2G。Redis版本号(本文的版本号是6.2.12)的第二位如果是偶数,代表。安装Redis时,系统会自动处理依赖关系并安装必要的组件。

2024-10-19 14:39:46 717

原创 Nginx反向代理

关于正向代理和反向代理,我们在前面的章节已经通过一张图给大家详细的介绍过了,简而言之就是正向代理代理的对象是客户端,反向代理代理的是服务端,这是两者之间最大的区别。Nginx即可以实现正向代理,也可以实现反向代理。我们先来通过一个小案例演示下Nginx正向代理的简单应用。先提需求:http {server{listen 80;(2)使用客户端访问服务端,打开日志查看结果server {listen 82;

2024-09-22 15:08:00 4717

原创 Nginx之Rewrite功能配置

Rewrite是Nginx服务器提供的一个重要基本功能,是Web服务器产品中几乎必备的功能。主要的作用是用来实现URL的重写。注意:Nginx服务器的Rewrite功能的实现依赖于PCRE的支持,因此在编译安装Nginx服务器之前,需要安装PCRE库。Nginx使用的是ngx_http_rewrite_module模块来解析和处理Rewrite功能的相关配置。

2024-09-22 13:52:01 1916 1

原创 Nginx之静态资源防盗链

资源盗链指的是此内容不在自己服务器上,而是通过技术手段,绕过别人的限制将别人的内容放到自己页面上最终展示给用户。以此来盗取大网站的空间和流量。简而言之就是用别人的东西成就自己的网站。效果演示我们自己准备一个html页面,在页面上通过src引入这两个图片查看效果从上面的效果,可以看出来,下面的图片地址添加了防止盗链的功能,京东这边我们可以直接使用其图片。

2024-09-21 15:10:02 449

原创 Nginx的跨域问题解决

这块内容,我们主要从以下方面进行解决:什么情况下会出现跨域问题?实例演示跨域问题具体的解决方案是什么?

2024-09-21 14:53:53 982

原创 Nginx静态资源优化、压缩、缓存处理

缓存(cache),原始意义是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。缓存的设置是所有现代计算机系统发挥高性能的重要因素之一。Web缓存是指一个Web资源(如html页面,图片,js,数据等)存在于Web服务器和客户端(浏览器)之间的副本。缓存会根据进来的请求保存输出内容的副本;当下一个请求来到的时候,如果是相同的URL,缓存会根据缓存机制决定是直接使用副本响应访问请求,还是向源服务器再次发送请求。

2024-09-21 14:20:02 1818

原创 Nginx中的server块和location块详解

default_server属性是标识符,用来将此虚拟主机设置成默认主机。所谓的默认主机指的是如果没有匹配到对应的address:port,则会默认执行的。由于server_name指令支持通配符和正则表达式,因此在包含多个虚拟主机的配置文件中,可能会出现一个名称被多个虚拟主机的server_name匹配成功,当遇到这种情况,当前的请求交给谁来处理呢?No5:被默认的default_server处理,如果没有指定默认找第一个server。server_name:用来设置虚拟主机服务名称。

2024-09-08 15:50:01 1001

原创 Nginx核心配置文件结构

使用命令:nginx -t,可以检查测试nginx的配置文件(nginx.conf)语法是否正确。yum安装的Nginx的核心配置文件默认是放在/etc/nginx/nginx.conf。源码安装的Nginx的核心配置文件默认是放在。

2024-09-07 16:00:36 406

原创 Nginx安装方式

Nginx的官方网站为:打开源码可以看到如下的页面内容Nginx的官方下载网站为,当然你也可以之间在首页选中右边的download进入版本下载网页。

2024-09-07 15:58:22 2531

原创 Nginx简介

Nginx(“engine x”)一个具有高性能的【HTTP】和【反向代理】的【WEB服务器】,同时也是一个【POP3/SMTP/IMAP代理服务器】,是由伊戈尔·赛索耶夫(俄罗斯人)使用C语言编写的,Nginx的第一个版本是2004年10月4号发布的0.1.0版本。另外值得一提的是伊戈尔·赛索耶夫将Nginx的源码进行了开源,这也为Nginx的发展提供了良好的保障。

2024-09-06 17:32:36 1205

原创 Docker基础

首先我们来学习Docker中的常见命令,可以参考官方文档:(文档地址需要翻墙才能访问)https://docs.docker.com/reference/cli/docker/其中,比较常见的命令有:(文档地址需要翻墙才能访问)命令说明文档地址docker pull拉取镜像docker pulldocker push推送镜像到DockerRegistrydocker pushdocker images查看本地镜像docker imagesdocker rmi删除本地镜像docker rmidocker ru

2024-09-03 11:27:17 1785

原创 如何使用Docker部署MySQL

大家可以发现,当我们执行命令后,Docker做的第一件事情,是去自动搜索并下载了MySQL,然后会自动运行MySQL,我们完全不用插手,是不是非常方便。而且,这种安装方式你完全不用考虑运行的操作系统环境,它不仅仅在CentOS系统是这样,在Ubuntu系统、macOS系统、甚至是装了WSL的Windows下,都可以使用这条命令来安装MySQL。要知道,不同操作系统下其安装包、运行环境是都不相同的!如果是手动安装,必须手动解决安装包不同、环境不同的、配置不同的问题!而使用Docker,这些完全不用考虑。

2024-09-01 15:46:30 3421

原创 如何安装Docker

本安装教程参考Docker官方文档(以CentOS为例。

2024-09-01 13:39:39 786

原创 SpringBoot自定义starter开发

本功能最终要实现的效果是在现有的项目中导入一个starter,对应的功能就添加上了,删除掉对应的starter,功能就消失了,要求功能要与原始项目完全解耦。因此需要开发一个独立的模块,制作对应功能。步骤一:创建全新的模块,定义业务功能类功能类的制作并不复杂,定义一个业务类,声明一个Map对象,用于记录ip访问次数,key是ip地址,value是访问次数有些小伙伴可能会有疑问,不设置成静态的,如何在每次请求时进行数据共享呢?

2024-08-31 15:19:15 785

原创 在Linux中如何安装JDK

查看是否还在即可#或者查看java版本。

2024-08-26 12:14:54 2637

原创 SpringBoot原理篇-bean的加载方式

由于方式一种需要将spring管控的bean全部写在xml文件中,对于程序员来说非常不友好,所以就有了第二种方式。哪一个类要受到spring管控加载成bean,就在这个类的上面加一个注解,还可以顺带起一个bean的名字(id)。这里可以使用的注解有@Component以及三个衍生注解@Service、@Controller、@Repository。@Service当然,由于我们无法在第三方提供的技术源代码中去添加上述4个注解,因此当你需要加载第三方开发的bean的时候可以使用下列方式定义注解式的bean。

2024-08-25 16:23:15 886

原创 SpringBoot整合Spring Boot Admin实现可视化监控平台

端点描述了被监控的信息,除了系统默认的指标,还可以自行添加显示的指标,下面就通过3种不同的端点的指标自定义方式来学习端点信息的二次开发。INFO端点info端点描述了当前应用的基本信息,可以通过两种形式快速配置info端点的信息配置形式在yml文件中通过设置info节点的信息就可以快速配置端点信息info:company: 传智教育配置完毕后,对应信息显示在监控平台上也可以通过请求端点信息路径获取对应json信息编程形式。

2024-08-25 14:44:03 1113

原创 SpringBoot整合MQ

springboot整合ActiveMQ提供了JmsMessagingTemplate对象作为客户端操作消息队列操作ActiveMQ需要配置ActiveMQ服务器地址,默认端口61616企业开发时通常使用监听器来处理消息队列中的消息,设置监听器使用注解@JmsListener配置jms的pub-sub-domain属性可以在点对点模型和发布订阅模型间切换消息模型。

2024-08-24 14:38:34 1584 3

原创 SpringBoot如何整合javamail发送邮件

springboot整合javamail其实就是简化了发送邮件的客户端对象JavaMailSender的初始化过程,通过配置的形式加载信息简化开发过程。

2024-08-23 13:29:54 784

安装elasticsearch、kibana、IK分词器

安装elasticsearch、kibana、IK分词器

2024-01-29

安装elasticsearch、kibana、IK分词器

安装elasticsearch、kibana、IK分词器

2024-01-29

Redis基础资料大全

Redis基础资料大全

2024-01-11

第一章. HTML 与 CSS

第一章. HTML 与 CSS

2024-01-10

周氏工具类之批量导入(自用无敌)

批量导入数据到数据库

2023-12-16

周氏工具类之Excel(自用无敌)

周氏工具类之Excel(自用无敌)

2023-12-16

周氏工具类(新版自用无敌)

excel工具类,新版

2023-12-15

实战章节:在Linux上部署各类软件

实战章节:在Linux上部署各类软件

2023-12-13

Excel工具类(超实用)

Excel工具类(超实用)

2023-12-07

Spring Boot常用注解xmind思维导图

Spring Boot常用注解xmind思维导图

2023-11-23

Maven超级详细文档(依赖管理项目构建工具)

Maven超级详细文档(依赖管理项目构建工具)

2023-11-18

Maven依赖管理项目构建工具(保姆级教学)

Maven依赖管理项目构建工具(保姆级教学)

2023-11-17

空空如也

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

TA关注的人

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