自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

morris

The earliest moment is when you think it's too late.

  • 博客(728)
  • 资源 (30)
  • 收藏
  • 关注

原创 【Hibernate Validator】@Valid与@Validated的联系与区别

Spring参数校验对比:@Valid与@Validated的深度解析 本文深入剖析Spring开发中@Valid(JSR-380标准)与@Validated(Spring扩展)的核心差异和实现机制。主要区别体现在: 规范来源:前者是Java标准,后者是Spring扩展 功能特性:@Validated支持分组校验但需配合@Valid实现嵌套校验 应用场景:@Valid适合Controller层请求体验证,@Validated适用于Service层方法校验 实现机制上: @Valid通过参数解析器触发,依赖H

2025-07-18 11:31:44 663

原创 【Hibernate Validator】简单使用

Spring Boot参数校验最佳实践:告别if-else,拥抱声明式注解 摘要:传统Web开发中参数校验往往导致大量重复代码,而Spring Boot通过Hibernate Validator提供了一套优雅的解决方案。本文介绍了: 通过@NotBlank、@Pattern等注解实现声明式校验 GET请求需在Controller类上加@Validated POST请求在方法参数前加@Valid/@Validated 常见校验注解如@Email、@Size的使用场景 依赖配置和版本要求(需Spring Boo

2025-07-17 20:00:00 743

原创 【Hibernate Validator】高级特性

本文介绍了Hibernate Validator在Java企业开发中的高级应用。首先讲解了两种验证模式(普通模式和快速失败模式)及其配置方式,快速失败模式能提升性能但只返回首个错误。其次阐述了嵌套级联校验的实现方法,通过@Valid注解实现对象属性的递归验证。最后重点说明了分组校验机制,通过定义接口分组和@Validated注解实现在不同业务场景(如新增/更新)下应用不同的校验规则。这些特性共同构建了灵活高效的声明式校验体系,显著提升了代码质量和可维护性。

2025-07-17 15:49:01 356

原创 【swagger】Swagger高级使用

Swagger高效API文档管理实践指南 本文深度解析Swagger在API文档管理中的进阶应用技巧。内容包括:通过Docket配置实现多业务模块分组展示;利用@ApiModelProperty隐藏敏感参数;使用@ApiImplicitParam和@ApiResponse精准定义接口参数与响应;推荐Knife4j替代原生UI以获得更美观界面和离线导出功能;重点演示了两种token参数配置方案——既支持单个接口手动添加,也提供全局自动注入header字段的解决方案。这些实践技巧有效解决了文档与代码不同步、参数

2025-06-26 20:00:00 551

原创 【springdoc】Springdoc的使用

SpringDoc:Spring Boot API文档生成工具 SpringDoc是基于Spring Boot的开源库,用于自动生成符合OpenAPI 3规范的API文档。它通过扫描项目中的注解和配置,动态生成JSON/YAML/HTML格式的接口文档,并提供Swagger UI界面支持测试与可视化。 核心特性: 支持Spring WebMvc、WebFlux及Spring Security集成 兼容Spring Boot 3.x和JDK 17+,是SpringFox的替代方案 注解驱动,精细化描述接口(如

2025-06-26 13:56:29 1007

原创 【swagger】Swagger的简单使用

Swagger是基于OpenAPI规范的RESTful API开发工具集,通过注解自动生成交互式文档和测试界面。核心功能包括:自动生成API文档(Swagger UI)、在线接口调试、支持多语言(Java/Python)和多组件(Editor/Codegen)。典型应用场景是Spring Boot项目,通过配置Docket实例和简单注解(如@Api、@ApiOperation)即可实现文档自动化,显著提升开发效率,减少前后端协作成本。主要优势在于实时同步代码与文档、可视化测试工具以及标准化的API描述规范。

2025-06-26 11:23:54 848

原创 【redis】session会话共享

摘要:本文探讨了分布式系统中Session共享的三种解决方案:粘性会话(存在单点故障风险)、Session复制(网络开销大)以及基于Redis的集中存储(最优方案)。重点介绍了Spring Session与Redis的集成实现,包括依赖配置、Redis连接设置和使用示例,验证了跨服务节点的Session共享效果。文章还分析了Spring Session的自动配置原理,说明无需@EnableRedisHttpSession注解即可实现功能。Redis方案具备无状态扩展、高可用性和数据一致性优势,是分布式系统S

2025-06-24 22:30:00 872

原创 【redis】redisson的使用

Redisson是一个强大的Java Redis客户端,提供丰富的分布式功能。主要特性包括:支持分布式数据结构(Map、List、Set等)、多种分布式锁(可重入锁、红锁等)及同步工具,兼容Redis多种部署模式。与Spring Boot集成简便,通过starter依赖即可快速配置,支持单机、哨兵和集群模式,可灵活调整连接池参数。使用示例展示了RedisTemplate操作和分布式锁的应用,如RLock实现线程安全。此外,还提供RMap等分布式集合,支持原子操作和事件监听,适用于构建高并发分布式系统。

2025-06-24 14:00:00 872

原创 【redis】lettuce客户端的使用

Lettuce是一款高性能的Java Redis客户端,专为高并发和分布式场景设计,已成为Spring Boot默认的Redis驱动框架。通过非阻塞I/O模型和线程安全性,Lettuce在企业级应用中广泛使用。Spring Boot集成Lettuce时,只需在pom.xml中添加相关依赖,并在application.yml中配置Redis参数,支持单机、哨兵和集群模式。Lettuce自动处理集群拓扑变化,并通过本地缓存优化性能。哨兵模式下,可通过自定义配置实现读写分离,提升系统负载能力。Lettuce的智能

2025-05-14 10:10:39 2225

原创 【redis】jedis客户端的使用

Jedis是Redis官方推荐的Java客户端库,支持单机、哨兵及集群模式,API设计与Redis命令高度一致,降低了学习成本。通过Maven引入依赖后,开发者可以轻松进行字符串、哈希、列表等数据类型的操作。Jedis连接池优化了性能,通过复用连接减少网络延迟,并解决多线程安全问题。与Spring Boot结合使用时,需配置Redis服务器地址及连接池参数,并自定义RedisTemplate以避免默认的JDK序列化问题。Jedis的高效性和易用性使其成为Java开发中操作Redis的首选工具。

2025-05-14 10:07:44 2186

原创 【redis】CacheAside的数据不一致性问题

缓存的使用虽然提升了系统性能,但也带来了缓存与数据库一致性的挑战。文章分析了四种更新策略:先更新数据库后更新缓存、先更新缓存后更新数据库、先删除缓存后更新数据库、先更新数据库后删除缓存,并指出每种策略可能引发的数据不一致问题。特别是并发写冲突和缓存更新失败是常见问题。文章还探讨了延迟双删策略和通过订阅MySQL binlog来处理缓存的方法,以减少不一致的时间窗口。最终,文章强调了在无法实现强一致性的情况下,通过技术手段尽可能缩短不一致时间窗口的重要性。

2025-05-13 11:03:14 2879

原创 【redis】缓存策略

随着应用程序复杂性的增加,缓存管理成为提升性能和用户体验的关键。不同的缓存策略各有优劣,适用于不同的场景。Cache-Aside策略通过应用程序直接管理缓存,适用于读多写少的场景,但存在短暂数据不一致和缓存击穿的风险。Read/Write Through策略通过缓存层管理数据读写,简化应用逻辑并保证强一致性,但写入性能较低且依赖缓存服务稳定性。Write-Back策略通过异步更新数据库,提升写入性能,但存在数据一致性风险。Write-Through-Back策略结合了Write-Through和Write-

2025-05-13 10:59:40 1324

原创 【redis】集群模式

Redis Cluster是Redis官方推出的分布式解决方案,旨在通过数据分片、高可用和动态扩展能力满足大规模数据存储与高并发访问的需求。其核心机制基于,将16384个哈希槽均匀分配给集群中的主节点,每个键通过CRC16哈希算法映射到特定槽位,实现数据的分布式存储与负载均衡。

2025-05-08 15:28:55 62925

原创 【redis】分片方案

Redis分片(Sharding)是解决单机性能瓶颈的核心技术,其本质是将数据分散存储到多个Redis节点(实例)中,每个实例将只是所有键的一个子集,通过水平扩展提升系统容量和性能。

2025-05-08 15:27:17 59126

原创 【redis】哨兵模式

Redis主从模式虽然支持数据备份与读写分离,但存在三大核心缺陷:**1. 故障切换依赖人工**(主节点宕机需手动提升从节点);**2. 监控能力缺失**(无法自动检测节点异常);**3. 脑裂风险**(网络分区可能导致双主数据冲突)。这些缺陷使得系统可用性难以保障,尤其在分布式场景下隐患显著。

2025-04-23 13:54:13 14434

原创 【redis】主从复制

Redis的单机模式仅部署单个实例,一旦节点宕机或网络故障,所有依赖Redis的服务将不可用,这就是所谓的单点故障问题。单节点需承担全部读写请求,并发量高时可能成为性能瓶颈。单节点受限于物理内存容量,无法突破内存物理上限存储海量数据。所有请求都怼到一个实例,磁盘IO、网络IO、带宽、CPU等资源都会成为瓶颈。注意:读写分离并不是Redis自带,需要客户端手动实现。

2025-04-23 13:52:27 16410

原创 【redis】redis实现红锁

红锁通过多节点投票机制,显著提升了分布式锁的可靠性,但需权衡其实现复杂度与运维成本。建议在以下场景选择红锁:• 需要跨机房/地域部署• 业务对数据一致性要求极高• 已具备独立Redis节点运维能力对于大多数场景,可优先使用Redisson等成熟框架,避免重复造轮子。若对一致性有极致要求,可考虑ZooKeeper/etcd等基于共识算法的方案。

2025-04-02 16:25:26 49912

原创 【redis】redis实现分布式锁

在分布式系统中,协调多个节点对共享资源的访问是一个经典难题。分布式锁作为解决这类问题的关键组件,需要满足**互斥性**、**容错性**、**超时释放**等核心特性。本文基于Redis的原子操作特性,详细讲解如何用Java实现企业级分布式锁。

2025-04-02 16:20:48 52247

原创 【redis】持久化之RDB与AOF

在数字世界的脉搏中,数据是流淌的血液,而持久化则是保障系统生命力的核心机制。作为内存数据库的标杆,Redis凭借其高性能特性成为互联网架构的基石,但其「易失性」的天然属性也催生了关键命题:如何在服务重启或故障时保障数据安全?从RDB快照的瞬时记忆到AOF日志的精准回放,再到混合持久化的智慧融合,Redis用三种递进式的方案回答了这一问题。RDB以二进制快照实现高效备份,AOF以日志追加构筑数据保险,而混合模式则通过「全量快照+增量日志」的架构,在恢复效率与数据安全之间找到黄金平衡点。

2025-03-27 09:48:13 46469

原创 【redis】数据类型之Stream

Redis Stream是Redis 5.0版本引入的一种新的数据类型,它提供了一种持久化的、可查询的、可扩展的消息队列服务。与传统的PUB/SUB模式相比,Stream提供了消息持久化和可靠性投递机制;与专业消息中间件(如Kafka)相比,它更加轻量且完全兼容Redis生态系统。

2025-03-27 09:46:26 30360

原创 【redis】发布订阅

Redis的发布订阅(Pub/Sub)是一种基于的通信机制,它允许消息的**发布者(Publisher)订阅者(Subscriber)**通过订阅频道或模式来接收消息。:无需额外组件,直接通过Redis服务实现:消息即时推送,无轮询延迟:一个消息可被多个订阅者同时接收:不存储历史消息,订阅者只能接收订阅后的消息。

2025-03-13 17:38:08 17094

原创 【redis】lua脚本

在分布式系统与高并发架构的战场中,开发者们始终在与两个永恒的命题博弈:**数据一致性**与**系统性能**。当我们试图用Redis构建高速缓存、实现分布式锁或设计秒杀系统时,往往会陷入这样的困境——如何在保证原子性的同时,避免网络往返带来的性能损耗?如何让复杂的多命令操作像单一指令般高效执行?这正是**Redis Lua脚本**闪耀的舞台。作为Redis的"核武器级"特性,Lua脚本不仅实现了**原子性、隔离性**的操作保障,更能将复杂的业务逻辑压缩成服务端的高性能执行单元。

2025-03-13 17:37:12 12225

原创 【redis】pipeline管道

Redis Pipeline(管道)是一种将多个命令批量发送到服务器的技术。与逐个发送命令的传统方式不同,Pipeline允许客户端一次性打包多条命令,通过完成批量操作。

2025-03-10 15:53:16 41694

原创 【redis】事务

简单地说,事务表示一组动作,要么全部执行,要么全部不执行。Redis事务是一组命令的集合,通过MULTIEXEC等命令实现批量操作的原子性执行。

2025-03-10 15:51:50 45183

原创 【redis】慢查询分析与优化

指在Redis中执行时间超过预设阈值的命令,其日志记录是排查性能瓶颈的核心工具。Redis采用单线程模型,任何耗时操作都可能阻塞后续请求,导致整体性能下降。

2025-03-09 12:29:54 40638

原创 【redis】数据类型之geo

Redis的GEO数据类型用于存储地理位置信息(如经纬度),并提供高效的地理位置查询功能(如计算两地距离、搜索附近地点等)。其底层基于Sorted Set(有序集合)实现,通过Geohash编码将经纬度转换为分数(score)进行存储。有关hyperloglog类型的命令可以通过help @geo命令来查看。有关命令的使用可以通过help 命令来查看,例如。

2025-03-09 12:28:53 18626

原创 【redis】布隆过滤器的Java实现

在Java中,要实现布隆过滤器(Bloom Filter)的方式有很多种,除了上一节中通过jedis包调用安装了布隆过滤器的redis外,还有以下几种常见的实现方式:手写布隆过滤器基于guava包实现通过redis的bitmaps实现基于redisson包实现。

2025-03-08 18:50:31 10927

原创 【redis】数据类型之布隆过滤器

布隆过滤器(Bloom Filter)的算法是由Burton Howard Bloom(伯顿·霍华德·布隆)在1970年提出的。它是一种空间效率很高的概率型数据结构,通常用于判断一个元素是否在集合中。这种数据结构的核心思想是通过一个很长的二进制向量(位数组)和一系列哈希函数来实现快速且近似的存在性查询。

2025-03-08 18:48:16 14071

原创 【python】PyMuPDF操作pdf

PyMuPDF,也被称为fitz(这是其导入时的常用别名),是一个功能强大的Python库,用于处理PDF和其他文档格式。与 PyPDF2相比,PyMuPDF提供了更多的功能和更好的性能,特别是在处理复杂的PDF文件时。

2025-02-28 09:36:14 14397

原创 【python】PyPDF2操作pdf

PyPDF2是一个用于处理PDF文件的Python库,可以读取、合并、拆分、裁剪和修改PDF文件。以下是一些使用PyPDF2的基本示例,包括如何安装该库以及执行一些常见的PDF操作。

2025-02-28 09:30:18 11606

原创 【redis】数据类型之hyperloglog

Redis的HyperLogLog(HLL)是一种高效的概率数据结构,也是一种基于字符串的数据结构,用于估计大数据集的唯一元素数量(基数统计)。它通过极低的内存占用(约 12KB)实现接近线性的时间复杂度,适用于海量数据去重计数场景(如统计独立访客数),但需容忍约0.81%的标准误差。有关hyperloglog类型的命令可以通过命令来查看。有关命令的使用可以通过help 命令来查看,例如help pfadd。

2025-02-25 16:10:46 9456

原创 【redis】数据类型之Bitfields

Redis的Bitfields(位域)与Bitmaps一样,在Redis中并不是一种独立的数据类型,而是一种基于字符串的数据结构,用于处理位级别的操作。允许用户将一个Redis字符串视作由一系列二进制位组成的数组,并对这些位进行高效的访问和操作。通过Bitfield,开发者可以将多个小的整数存储到一个较大的位图中,或者将一个庞大的键分割为多个较小的键进行存储,从而极大地提高了内存的使用效率。

2025-02-25 15:59:44 9591

原创 【redis】数据类型之bitmaps

Redis的Bitmaps是一种基于字符串的数据结构,用于处理位级别的操作。虽然Bitmaps在Redis中并不是一种独立的数据类型,而是基于字符串实现的,但它们提供了高效的位操作功能,适用于需要处理大量布尔值或二进制数据的场景。

2025-02-13 10:17:04 12899

原创 【redis】数据类型之sorted_set

sorted_set:有序集合,在set的基础上增加score属性用来排序,在redis中,数据类型对应的命令一般以数据类型的首字母开头,但是单词s已经被string类型使用了,所以sorted_set类型的相关命令只能使用26个英文字母中的最后一个字母z来开头,所以有些人也把sorted_set称为zset。有关sorted_set类型的命令可以通过命令来查看。有关命令的使用可以通过help 命令来查看,例如help zadd。

2025-02-13 10:15:24 8562

原创 【redis】数据类型之set

Redis中的SET数据类型是一种无序的集合,它允许你存储不重复的元素。SET类型提供了许多有用的操作,比如添加元素、删除元素、检查元素是否存在、计算集合的交集、并集和差集等。set(集合):其实就是数学中的集合,集合中元素要具备三个特性:确定性、无序性、互异性。确定性:一个元素要么属于集合,要么不属于集合。无序性:集合中每个元素的地位相当,没有顺序。互异性:集合中的元素都是不同,也就是一个元素在一个集合中只能出现一次。有关set类型的命令可以通过help @set命令来查看。

2025-02-08 15:08:32 10295

原创 【redis】数据类型之hash

Redis中的Hash数据类型是一种用于存储键值对集合的数据结构。与Redis的String类型不同,Hash类型允许你将多个字段(field)和值(value)存储在一个单独的key下,从而避免了将多个相关数据存储为多个独立的key。这样做的好处是减少了key的数量,使得数据的管理和操作更加高效。hash这个数据类型类似java中的HashMap,都由key-value键值对组成。有关hash类型的命令可以通过help @hash命令来查看。有关命令的使用可以通过help 命令来查看,例如。

2025-02-08 15:06:56 8736

原创 【redis】数据类型之list

Redis的List数据类型是一个双向链表,支持在链表的头部(left)和尾部(right)进行元素的插入(push)和弹出(pop)操作。这使得List既可以用作栈(stack),也可以用作队列(queue)。有关list类型的命令可以通过help @list命令来查看。有关命令的使用可以通过help 命令来查看,例如help lpush。

2025-02-06 16:08:52 19154

原创 【redis】数据类型之string

字符串类型是Redis最基础的数据结构。首先key都是字符串类型,而且其他几种数据结构都是在字符串类型基础上构建的,所以字符串类型能为其他四种数据结构的学习打下基础。字符串类型的值实际可以是字符串(简单的字符串、复杂的字符串(例如JSON、XML))、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过512MB。有关string类型的命令可以通过命令来查看。有关命令的使用可以通过help 命令来查看,例如help set。

2025-02-06 16:06:37 10123

原创 【redis】键的全局命令

Redis提供了一系列用于管理和操作键的全局命令。这些命令允许你查看、删除、迁移键,以及执行其他与键相关的操作。

2025-01-15 10:33:54 10067

原创 【redis】redis-cli命令行工具的使用

redis-cli命令行工具是一个功能强大的Redis客户端,它允许用户与Redis数据库进行交互和管理。

2025-01-15 10:32:19 15332

hibernate简介

hibernate简介,hibernate能干什么,为什么要用hibernate,怎么使用

2014-11-03

spring简介

spring简介,aop,ioc,spring入门

2014-11-03

spring与hibernate的整合

spring与hibernate的整合 spring事务的配置

2014-11-07

jpa对表的crud操作

jpa对表的crud操作

2015-01-16

java对properties配置文件的读和写

java对properties配置文件的读和写

2015-01-27

java利用json-lib操作json

java利用json-lib操作json

2015-01-27

Apache_Shiro中文帮助文档

Apache_Shiro中文帮助文档

2015-03-06

老K说中台_技术领导力_老K(全网200w+阅读量文章合集).pdf

老K说中台_技术领导力_老K(全网200w+阅读量文章合集)

2021-02-26

HashMap,HashTable,LinkedHashMap,TreeMap的区别

HashMap,HashTable,LinkedHashMap,TreeMap的区别

2015-01-31

bootstrap日期插件datetimepicker的使用

bootstrap日期插件datetimepicker的使用

2015-01-26

Apache_Shiro_使用手册(一)Shiro架构介绍

Apache_Shiro_使用手册(一)Shiro架构介绍

2015-03-06

使用jackson完成json与java对象的互相转换实例

使用jackson完成json与java对象的互相转换实例

2015-02-01

对Map的key和value进行排序

对Map的key和value进行排序

2015-01-31

jpa查询详解

jpa查询 jpql 本地查询 命名查询

2015-01-16

调用QQ webservice查看QQ在线状态源代码

调用QQ webservice查看QQ在线状态 java源代码

2014-11-03

java操作json实例

java操作json实例,java对象与json对象的互相转换

2015-01-27

安全认证框架-Apache_Shiro研究心得

安全认证框架-Apache_Shiro研究心得

2015-03-06

Hibernate的配置

hibernate.cfg.xml的配置

2014-11-05

调用QQ webservice查看QQ在线状态

调用QQ webservice查看QQ在线状态

2014-11-03

java map实例,排序

java map排序,hashmap,linkedmap,treemap,hashtable

2015-01-31

spring入门案例

spring开发入门案例,非常适合初学者,注释很详细

2014-11-03

mybatis-3.2.7

mybatis-3.2.7

2014-12-23

json-lib.jar

json-lib.jar java 操作json的jar包

2015-01-27

Spring集成Hessian案例

Spring集成Hessian案例

2014-12-29

Hessian入门案例源代码

Hessian入门案例源代码

2014-12-29

hibernate入门案例

hibernate入门案例,使用orm实现代码生成数据库中的表

2014-11-03

Apache_Shiro_使用手册(四)Realm_实现

Apache_Shiro_使用手册(四)Realm_实现

2015-03-06

js操作json

js操作json

2015-01-27

mybatis入门案例

mybatis入门案例 内附详细教程 jar包

2014-12-23

空空如也

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

TA关注的人

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