自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 对Netty的详细理解

Netty是一个基于 Java NIO的高性能、异步事件驱动的网络应用框架。它的设计目标是提供简单易用、高性能、可扩展的网络编程框架。它提供了丰富的功能和灵活的配置选项,使得开发者可以轻松地构建复杂的网络应用程序。

2025-04-16 16:28:14 1023

原创 对SpringSecurity + JWT实现身份认证的理解

JWT(JSON Web Token)一种开放的标准规范(RFC 7519),用于在网络上安全传输和验证信息,通常被用于登录验证。简单来说,你可以把 JWT 想象成一张小巧的、自包含的电子通行证。这张通行证里面包含了用户的身份信息,就像你在某个俱乐部的会员卡,上面有你的名字、会员等级等信息,拿着这张卡,你就能证明你是谁,享受相应的服务。

2025-02-21 13:40:17 899

原创 使用Sentinel实现请求限流与熔断

​ Spring Cloud Alibaba Sentinel(以下简称 Sentinel)是一个开源的流量控制和熔断框架,它是 Alibaba 开源的微服务框架 Spring Cloud Alibaba 中的一个组件。Sentinel 旨在解决分布式系统中的流量控制和熔断问题,帮助开发人员保护微服务应用免受系统负载过高和故障的影响。流量控制:可以通过配置规则对接口的访问量进行限制,避免因流量过高而导致系统崩溃。服务熔断。

2025-02-19 14:01:19 339

原创 使用Redisson实现分布式锁

在单机系统中,可以使用本地锁(如互斥锁)来保证资源的安全访问,但在分布式系统中,由于多个节点可能同时访问同一资源,本地锁无法跨节点生效,因此需要引入分布式锁。​ 与方案1不同,Redis 执行 Lua 时不会被其他命令打断,是完全原子性的,不过本质上和方案1一样都是通过使用唯一标识(UUID)来区分线程,使用 Hash 结构存储锁信息,维护。​ **什么是锁重入:**同一个线程(或同一个进程)多次获取相同的锁时,如果锁机制允许它继续使用资源,而不会被阻塞,就叫做“可重入锁”。时会被阻塞,导致死锁。

2025-02-19 13:59:27 589

原创 通过Canal监控MySql的Binlog解决数据库和Redis的数据一致性问题

canal.mq.topic=ai-cloud-canal-to-kafka # 发送到 Kafka "ai-cloud-canal-to-kafka"主题下。由于延迟双删方案延迟时间难以确定,所以使用MQ消息队列来监听MySQL的事务提交情况,当数据库事务真正提交后,再删除缓存。canal.instance.master.address=127.0.0.1:3306 #连接的 MySQL 地址。删除缓存中产生变化的行数据,下次查询该数据时就会缓存未命中,从而查询数据库以更更新缓存。

2025-02-19 13:48:26 1032

原创 Kafka的使用及常见问题解决方案

操作系统的设计就是每个应用程序都有自己的用户内存,想要实现数据传输,就需要不断从各个缓冲区中拷贝,而Kafka使用了零拷贝技术,减少了不必要的内存拷贝操作。在数据发送过程中,Kafka可以直接将数据从Page Cache中发送到网卡缓冲区,无需先将数据拷贝到应用程序缓冲区,再从应用程序缓冲区拷贝到socket缓冲区,从而减少了CPU和内存的开销。这样可以减少对磁盘的访问次数,提高写入性能。:Kafka接收到消息后,其并不直接写入磁盘,而是先写入内存中,如果Broker断电或宕机,那么消息也就丢失了。

2025-02-19 13:46:10 346

原创 如何理解I/O多路复用

通过一个线程同时管理多个 Socket(文件描述符),在一个线程内同时检测多个连接的状态(如是否可读/可写),从而实现高效的并发处理。在 Linux 中,常见的 I/O 多路复用技术包括 selectpoll和epoll。

2024-12-27 17:33:22 568

原创 Linux常用的基本命令

Linux文件的基本权限有9个,分别是owner/group/others,三种身份各有自己的 read/write/execute权限。more : 一页一页的显示文件内容(空格代表翻页,enter代表向下看一行, :f 行号)-l参数 : 列出所有的文件,包括文件的属性和权限,没有隐藏文件。rmdir -p test1 : 可以强制删除不为空的文件夹。-a参数 : all,查看全部的文件,包括隐藏文件。-f : 忽略不存在的文件,不会出现警告,强制删除。-u : 只替换已经更新过的文件。

2024-12-18 14:54:48 300

原创 SpringBoot整合Redis

*由注解@ConditionalOnMissingBean(name = “redisTemplate”)可知:**如果Spring容器中已经有了RedisTemplate对象了,这个自动配置的RedisTemplate不会实例化。**但是,这个RedisTemplate的泛型是<Object,Object>,写代码不方便,需要写好多类型转换的代码;​ 直接用RedisTemplate操作Redis,需要很多行代码,因此直接封装好一个RedisUtils,这样写代码更方便点。

2024-12-12 13:52:20 426

原创 Redis事务以及通过监控实现乐观锁

Redis事务本质: 一组命令的集合。一个事务中的所有命令都会被序列化,在事务执行过程中会按照顺序执行。特性:一次性、顺序性、排他性。Redis事务没有隔离级别的概念,所有的命令在事务中,并没有被直接执行,只有发起执行命令时才会执行。Redis单条命令保证原子性,但是事务不保证原子性!正常事务的流程:开启事务(multi)命令入队(…)执行事务(exec)放弃事务: discard,事务队列中的命令都不会被执行。编译型异常(代码有问题,命令有错),事务中所有的命令都不会被执行!

2024-12-12 13:43:08 263

原创 Redis五大数据类型

keys * : 查看所有keyflushdb :清空当前库flushall : 清空全部数据库set keyVame keyValue: 设置keyexists keyname: 判断key是否存在move keyName dbIndex: 移动keyName到dbIndex数据库中expire keyName 10: 设置keyName 10秒钟的有效时间ttl keyName: 查看keyName的剩余时间type keyName: 查看keyName的类型。

2024-12-12 13:39:48 555

原创 MySql日志篇

redo是物理日志,记录了某个数据页做了什么修改,比如对XXX表空间中的YYY数据页ZZZ偏移量的地方做了AAA更新,每当执行了一个事务就会产生一条物理日志。在事务提交时,只要先将redo log持久化到磁盘即可,可以不需要等到将缓存在Buffer Pool里的脏页数据持久化到磁盘。当系统崩溃时,虽然脏页数据没有持久化,但是redo log已经持久化,那么当MySQL重启后,可以根据redo log的内容,将所有数据恢复到最新的状态,这个能力成为crash-safe(崩溃恢复),即。

2024-11-05 21:03:50 463

原创 redo Log什么时候刷盘?

参数0:会把缓存在redo log buffer中的redo log,通过调用write()写入到操作系统的Page Cache,然后再调用fsync()持久化到磁盘。表示每次事务提交时,都将缓存在redo log buffer里的redo log直接持久化到磁盘,这样可以保证MySQL异常重启之后数据不会丢失。表示每次事务提交时,都只是将缓存在redo log buffer里的redo log写到redo log文件,这里的。InnoDB的后台线程每隔1秒,将redo log buffer持久化到磁盘。

2024-10-30 14:52:58 530

原创 使用注解控制加载Bean

因为@Conditional注解默认需要你自己实现 org.springframework. annotation.Condition接口,在这个接口中实现matches()方法来覆盖接口的方法,即需要自己定义满足什么条件才加载或者实例化某个Bean,但我们比较懒不想写,所以我们可以使用@Conditional注解的派生注解设置各种组合条件控制bean的加载。@ConditionalOnClass: 用于当类路径中存在某个类时,才加载对应的 Bean。// havingValue:期望的属性值。

2024-10-27 15:35:05 833

原创 @Configuration注解详解

用于标记一个类作为Spring的配置类,配置类可以包含@Bean注解的方法,用于定义和配置bean,作为全局配置。实例代码@Bean:用于标记一个方法作为Spring的bean工厂方法。当一个方法被@Bean注解标记时,Spring会将该方法的返回值作为一个bean,并将其添加到Spring容器中。在启动时,Spring 会扫描带有注解的类,并在 Spring 容器中注册通过@Bean注解定义的 Bean,这些 Bean 将被作为依赖注入到其他需要的类中。

2024-10-27 15:34:19 273

原创 基于SpringBoot+MyBatis实现的图书管理系统(二)

类,用于标准化 API 的响应格式,使得前端可以轻松解析和处理响应数据。对于增加,删除,及修改操作,通常不需要使用返回数据,仅仅知道操作成功与否即可(通常在前端获取状态码属性code,用来进行逻辑判断,方便接下来的操作),所以一般情况下调用ApiResult<T>类的无参静态方法success。

2024-10-27 10:10:21 807 1

原创 基于SpringBoot+MyBatis实现的图书管理系统(一)

这篇文章主要复盘一下最近我做的第一个SpringBoot项目,帮助自己梳理一下SpringBoot项目的整体流程。技术栈:前端:后端: SpringBoot + SpringMVC + Mybatis数据库:MySQL需求分析分为管理员和用户两部分。数据总览、用户及管理员信息管理、书籍类别管理、图书管理、借阅记录管理、订阅记录管理、订阅通知管理、书架管理、读者建议管理、公告管理以及用户行为日志管理。1. 对密码使用二次MD5加密处理,确保一定程度上的安全性;

2024-10-26 18:22:52 674

空空如也

空空如也

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

TA关注的人

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