Redis part3—Redis在Spring框架下的开发使用
Redis进阶
Redis 事务
相关内容
Redis的事务和 MySQL
的本质上是差不多的,都是保证一组命令要么都执行要么都不执行
Redis
是将多个命令打包,主要用于解决需要批量操作且保证操作完整性的场景。
Redis 事务的设计基于 “命令队列” 和 “单线程执行”
特性,核心原理可以概括为:将一组命令一次性放入队列,在执行时按顺序原子化执行,中间不会被其他命令插入。
Redis 事务的执行分为 3 个阶段:开始事务→命令入队→执行 /
放弃事务,流程如下:
开始事务:执行MULTI命令,Redis
进入事务状态。
命令入队:后续输入的命令(如SET、INCR等)不会立即执行,而是被放入事务队列,并返回
“QUEUED” 表示入队成功。
若命令存在语法错误(如参数个数不对),入队时会直接报错,此时事务队列无效,后续EXEC会被忽略。
执行 /...
了解和会使用XSLT
什么是XSLT
XSLT(Extensible Stylesheet Language
Transformations,可扩展样式表语言转换)是一种用于将 XML
文档转换为其他格式(如 HTML、XML、文本等)的语言。它是 XML
技术体系中的重要组成部分,常被视为 XML 的 “转换引擎”。
XSLT 的主要功能是将一种 XML
结构转换为另一种结构或格式,实现数据与表现形式的分离:
将 XML 数据转换为 HTML 用于网页展示
将 XML 数据转换为其他 XML 格式(如不同行业标准的 XML)
将 XML 数据转换为纯文本、CSV 等格式
而其中
XSLT 本身是 XML 的一种应用,遵循 XML 语法规则
XSLT 使用 XPath(XML 路径语言)来定位和选择 XML 节点
可以将多个 XSLT 转换串联使用,实现复杂的数据处理流程
XSLT 的工作原理
XSLT 处理器解析源 XML 文档,构建 DOM 树
解析 XSLT...
n8n本地部署和搭建第一个工作流
n8n 简介
简介
n8n
是一个开源的工作流自动化工具,专注于通过可视化界面连接各种应用程序、服务和
API,实现数据流转和任务自动化。其核心特点包括:
开源免费:核心功能完全开源,可本地部署,数据隐私可控,适合对数据安全有较高要求的场景。
可视化编辑器:通过拖拽节点(Nodes)和连接流程线,无需代码即可构建复杂工作流,支持自定义节点扩展。
丰富的集成能力:内置数百个节点,覆盖常见服务(如
Gmail、Slack、GitHub、数据库、云服务等),支持 HTTP/API
调用连接任意服务。
灵活的触发方式:支持定时触发、Webhook
触发、手动触发等,满足不同自动化场景(如数据同步、通知提醒、批量处理等)。
本地部署与云服务兼顾:既可以通过 npm、Docker
等方式在本地服务器部署,也提供官方云服务(n8n
Cloud),适合个人开发者和企业用户。
n8n 与同类型平台(如
Dify、Make、Zapier 等)的对比
与 Dify 对比
Dify
更侧重于大语言模型(LLM)应用开发,核心是帮助用户快速搭建基于
AI...
Spring Security part5—密码加密算法
密码加密
何为密码加密
在 Spring Security 中,密码加密是保障系统安全的核心环节之一。Spring
Security
通过PasswordEncoder接口统一规范了密码加密与验证的行为,其核心思想是:存储加密后的密码而非明文,并通过标准化方法验证用户输入的密码与存储的加密密码是否匹配。
明文密码指的是用户输入的原始密码(如abc123、password),未经过任何加密或哈希处理,直接以字符串形式存储在数据库中。
但不是你加密了就不能破解,早期系统会使用哈希算法对密码进行处理:将明文密码通过哈希函数转换为一串不可逆的哈希值(如MD5("123456") = e10adc3949ba59abbe56e057f20f883e),然后存储哈希值而非明文。
彩虹表
但是这样,是双向加密,是可以被解密的,彩虹表(Rainbow
Table)...
ErgouTree菜谱之糖醋排骨
ErgouTree...
Spring Security part6—Spring Security的默认配置与过滤器链的自动装配
Spring Security
默认配置源码分析
在 Spring Security
的官方文档中,说明了,它的配置为以下的默认实现。
12345678910111213141516@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http // 开启授权保护 .authorizeRequests(authorize -> authorize // 所有请求开启授权保护 .anyRequest() // 已经认证的请求会被自动授权 .authenticated() ) // 自动使用表单的授权方式,也就是自动生成的登入表单和登出表单 .formLogin(withDefaults()) // 使用基本授权方式 .httpBasic(withDefaults()); return...
Redis part2—Redis的基本命令和数据结构
Redis的常用命令
Redis 的两种命令
Redis 有两种命令
在 Windows 的 cmd 命令提示符中,可以在不进入 Redis
内部终端的情况下执行 Redis
命令,一般格式是:redis-cli.exe [options] command [arguments]
,options 是连接相关的参数,command 是具体的
Redis 命令,arguments 是命令的参数。
关于这个部分的命令,常用的比较少,下面说的常用命令都是基于第二种
一般情况下,我们在 Redis 内部终端输入命令,要进入 Redis
内部终端,你需要先连接到 Redis
服务器,打开命令提示符,redis-server.exe redis.conf即可启动
。如果 Redis 已经启动,和MySQL 一样,Redis 也需要新建连接,在 Windows
环境下,可以进入 Redis 安装目录,之后使用如下格式的命令新建链接,执行
redis-cli.exe -h 127.0.0.1 -p 6379 (默认端口是...
Maven常见报错分析和在开发中使用的小技巧
纯属想到想到想到哪里写哪里了,我单纯就是顺着我的思路写个杂谈,大伙看一乐就行
Maven笑传之藏藏bean
可能这个问题,大家不嗷嗷鼓捣
Maven,可能一辈子碰不上好几次,但是我还是要说说,要不然白摸索了))
一些通用的解决情况
孩子们,我是Maven,我又要找不到依赖了
实际上,有关于实际项目开发的过程中,因为 Maven
没法正常编译项目的原因,十个有八个会给你爆“找不到依赖”,这个问题藏的很深,而且那原因非常抽象,要么不知所云,要么你就不知道他为什么找不到。
如果你能通过先清除 IDEA
的缓存,然后经典三大步(clean,complie,package)就好了
那其实都不是问题,只是 Maven
在它能访问的仓库里,没找到你声明的依赖信息(或完整文件)
再说另一种情况
在线或离线网络环境中拷贝maven仓库到离线机器,使用maven加载项目,maven编译jar包找不到或者提示jar包信息不可用
然后我们进行了如下操作
常规 idea的 maven设置,确保
maven的版本, 配置文件保持一致,
maven仓库可用
刷新...
Redis part1—介绍NoSQL和缓存技术
介绍 Redis
REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的
key-value 存储系统,是跨平台的非关系型数据库。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD
协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的
API。
Redis
通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted
sets)等类型。
Redis 简介
Redis(Remote Dictionary Server)是一个开源的内存数据库,遵守...
深度解析JWT并在Spring框架中进行实践
什么是 JWT
在现代 Web
开发中,身份认证与授权是保障系统安全的核心环节。随着前后端分离架构和微服务的普及,传统基于Session的认证方式面临着跨域、服务器存储压力大等问题。而
JWT(JSON Web
Token)作为一种轻量级、无状态的认证方案,凭借其自包含、可跨域、易扩展的特性,逐渐成为主流选择。
JWT全称为JSON Web Token,是基于RFC
7519标准定义的一种紧凑、自包含的令牌格式,用于在不同系统间安全地传递结构化的JSON数据,是目前最流行的跨域认证解决方案
JWT 是一种基于 Token 的认证授权机制,从名字就能知道了,JWT 本身也是
Token,一种规范化之后的 JSON 结构的...
Maven Lifecycle详解
Maven 构建生命周期
Maven
构建生命周期定义了一个项目构建跟发布的过程,包含三种标准生命周期:
clean:清理项目
default(或 build):核心构建流程
site:生成项目文档
img
每个生命周期由多个阶段(phase)组成,执行时按顺序运行,大概流程如下所示
img
Maven 生命周期的本质是
“预定义的阶段序列”,每个阶段对应特定的
“动作”,且阶段之间存在顺序依赖关系(执行后续阶段时,会自动执行所有前置阶段)。
clean 生命周期
clean
生命周期负责清理项目构建时候产生的临时文件和目录(主要是target/),这是它的唯一职责,避免旧文件干扰新构建,确保构建环境
“干净”
clean 生命周期的核心目标:删除项目根目录下的
target/ 文件夹,该文件夹是Maven
默认的构建输出目录,包含编译后的 class 文件、jar/war
包、测试报告等),以及其他临时文件(如 IDE 生成的缓存文件)
clean 生命周期是 Maven...
Spring Security part4—基于数据库的用户认证
基于数据库的用户认证
在前面我们讲了 Spring Security
基于内存的用户认证,但是实际开发中肯定不能做到基于内存隔这就验证,所以说生产开发中,更多使用的还是基于数据库的动态用户认证
Spring Security
基于数据库的用户验证是实际项目中最常用的认证方式,相比基于内存的验证,它能实现用户数据的持久化存储和动态管理。
实际配置理解基于数据库的用户认证
基于数据库的验证与基于内存的验证核心流程一致,都是通过 Spring
Security
的UserDetailsService接口加载用户信息,但数据来源从硬编码的内存数据改为数据库。
我们设计数据库表,通常需要两张核心表(用户表和角色表),采用多对多关系:
12345678910111213141516171819202122232425-- 用户表CREATE TABLE `sys_user` ( `id` bigint NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(100)...
Spring Security part3—基于内存的用户认证及其源码分析
自定义内存用户验证的配置
用户验证方式
基于内存的用户认证虽然用的比较少,但是这东西简单而且便捷
而 Spring Security 进行用户验证的方式有如下几种,特点也如下
基于内存的验证(In-Memory Authentication)
特点:用户信息直接配置在内存中,无需数据库或其他存储介质
适用场景:快速原型开发、测试环境或简单应用
优势:配置简单,无需额外依赖
局限:用户信息无法动态修改,重启应用后变更会丢失
基于数据库的验证(JDBC Authentication)
特点:通过 JDBC
连接数据库,从数据库表中读取用户信息
适用场景:需要持久化存储用户信息的应用
优势:用户信息可动态管理,支持大量用户
配置:需定义用户表和权限表结构,通过
JdbcUserDetailsManager 实现
基于自定义 UserDetailsService 的验证
特点:通过实现...
















