自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis一站式指南三:用 Docker+Redis 哨兵,教你搞懂自动故障转移

本文分析了Redis主从复制存在的问题及哨兵机制解决方案。传统主从复制在主节点故障时需要人工干预恢复,过程繁琐且影响可用性。Redis哨兵通过独立进程监控集群状态,实现自动故障转移:当主节点故障时,多个哨兵节点共同选举新主节点并通知客户端。文章详细介绍了单机部署哨兵集群的痛点及Docker解决方案,包括容器隔离、端口分配等配置细节,并演示了哨兵故障转移流程。最后指出哨兵选举过程中可能出现的"脑裂"现象及数据不一致风险。通过Docker Compose编排,实现了三哨兵+一主二从的集群部署

2025-08-10 22:49:07 937

原创 Redis一站式指南二:主从模式高效解决分布式系统“单点问题”

本文系统介绍了Redis主从复制的核心原理与实现方法。首先分析了单点Redis的性能瓶颈和可用性问题,提出分布式架构的必要性。重点阐述了主从模式、哨兵模式和集群模式三种分布式方案的特点与适用场景。详细讲解了主从复制的配置步骤、数据同步流程(全量与增量复制)、关键参数(replicationid、offset)及故障处理机制。同时探讨了主从结构的拓扑优化、Nagle算法对同步性能的影响等进阶内容。文章通过生动的比喻和实例,帮助读者深入理解Redis主从复制如何实现高可用、高性能的数据存储服务,为分布式系统设计

2025-08-10 22:48:46 1010

原创 Redis一站式指南一:从MySQL事务到Redis持久化及事务实现

关于Redis 事务怎么用、有啥特点)简单流程:watch(可选,做乐观锁 )→ multi 开启事务 → 发多个命令进队列 → exec 执行 / discard 放弃。核心价值:把多个命令 “打包”,让它们连续执行,中间不被其他客户端的操作插队,解决类似 “超卖”“库存冲突” 问题(配合 watch 更稳 )。和 MySQL 事务的区别:Redis 事务更轻量化、简单化,不追求严格的原子性、一致性,适合高并发下简单的 “操作打包” 场景;MySQL 事务功能强、保障严,适合数据完整性要求高的业务

2025-08-10 22:47:34 840

原创 第十章:如何真正使用Java操作redis

Redis客户端开发与应用指南 摘要:本文详细介绍了Redis客户端开发的核心技术要点。首先解析了Redis自定义的RESP协议原理,强调通过SSH端口转发确保远程访问安全性。随后以Java Jedis为例,分数据类型(String、List、Set、Hash、ZSet)演示了常用命令操作,包括set/get、lpush/rpop、sadd/smembers等。最后结合Spring项目,展示如何通过StringRedisTemplate集成Redis操作。特别指出6379端口直接开放的安全风险

2025-08-03 22:56:58 1440 2

原创 第九章:了解特殊场景下的redis

Redis高级数据类型及应用场景:Streams用于消息队列,Geospatial处理地理坐标查询,HyperLogLog高效估算UV,Bitmaps和Bitfields实现节省空间的布尔/数值存储。渐进式遍历命令SCAN可避免KEYS*的阻塞风险。Redis默认提供16个隔离数据库,支持FLUSHDB/FLUSHALL等管理命令,但生产环境需谨慎使用。这些特性共同体现了Redis高性能、低内存的设计理念。

2025-08-03 22:56:44 602

原创 第八章:进入Redis的SET的核心

有序集合(Sorted Set)是一种结合集合和排序特性的数据结构,每个元素关联一个分数(score)用于排序,元素不可重复但分数可以重复。核心命令包括:ZADD添加/更新元素、ZRANGE/ZREVRANGE范围查询、ZCARD获取元素数量、ZREM删除元素等。有序集合内部采用ziplist或skiplist编码,根据元素数量和大小自动切换。典型应用场景包括排行榜系统,如通过ZADD记录用户点赞数,ZREVRANGE获取TOP10用户,结合ZSCORE和ZRANK查询具体排名等。这种数据结构能高效解决需要

2025-08-03 22:56:01 814

原创 第六章:进入Redis的List核心

Redis列表(List)是一种有序的数据结构,支持双向操作,可作为栈或队列使用。核心命令包括LPUSH/RPUSH(头/尾插入)、LPOP/RPOP(头/尾删除)、LRANGE(范围查询)、LINDEX(索引查询)等。列表特点包括元素有序可重复、支持负数索引、高效双端操作(O(1)复杂度)。内部采用quicklist实现,结合了压缩列表和链表的优势。典型应用场景包括消息队列(生产者-消费者模型)、微博Timeline(分页展示)、多频道订阅等。阻塞命令BLPOP/BRPOP可实现高效的阻塞式消息队列,支持

2025-07-30 22:48:03 980

原创 第七章:进入Redis的SET核心

Redis集合(Set)是一种无序、不重复的字符串元素集合,支持高效的增删查改操作。核心命令包括SADD(添加元素)、SMEMBERS(获取所有元素)、SISMEMBER(判断元素存在)、SPOP(随机删除)等,还支持集合运算(SINTER/SUNION/SDIFF)求交集/并集/差集。内部编码根据元素类型和数量自动选择intset(整数集合)或hashtable(哈希表)。典型应用场景包括:用户标签管理、共同好友计算、UV统计(去重访问量)等,特别适合需要高效集合运算和去重的业务场景。

2025-07-30 22:47:35 879

原创 第五章:进入Redis的Hash核心

Redis字符串类型解析与应用场景 摘要:Redis作为高性能键值数据库,其字符串类型支持二进制数据存储,最大容量512MB,无需编码转换,可直接存储文本、JSON及音视频等数据。核心特性包括三种内部编码(int、embstr、raw)的动态选择机制。典型应用场景包括: 热点数据缓存(结合过期时间管理) 分布式会话共享 手机验证码频控(通过SETNX+INCR实现) 播放量等计数功能(异步持久化设计) 哈希类型提供结构化数据存储优势,支持HSET/HGET等操作,采用ziplist(节省内存)和hashta

2025-07-28 21:50:43 1123

原创 第四章:分析 Redis 性能高原因和核心字符串类型命令

Redis采用单线程模型处理客户端请求,通过线性执行命令避免了并发问题。其高效性源于:1)内存存储实现微秒级读写;2)功能简单减少计算开销;3)单线程避免线程竞争;4)epoll多路复用实现高并发I/O处理。字符串操作命令包括SET/GET系列、自增INCR/DECR、APPEND拼接、GETRANGE/SETRANGE子串操作等,均以字节为单位处理数据,时间复杂度为O(1)。单线程模型虽宏观上同时服务多个客户端,但微观上仍顺序执行命令,配合内存存储和I/O复用机制,使Redis在简单数据操作场景下性能远超

2025-07-28 21:50:08 924

原创 redis前期工作:环境搭建-在ubuntu安装redis

本文介绍了Redis的安装配置及使用场景分析。在Linux服务器安装Redis需执行apt命令,并通过修改配置文件实现远程连接。Redis支持多种客户端形态,包括命令行、图形界面和API开发。文章对比了Redis与内存直接操作的性能差异,指出Redis在网络传输时会稍慢,但具有持久化优势。最后强调技术选型需考虑具体场景,避免盲目使用单一技术方案,要权衡存储速度与数据持久化等需求。

2025-07-24 22:36:52 437 2

原创 第三章:掌握 Redis 存储与获取数据的核心命令

本文介绍了Redis的核心数据操作命令,包括: 基本操作:set/get用于存储和获取键值对,keys命令支持通配符查询但生产环境慎用 键管理:exists检查键是否存在,del删除键,expire/ttl设置和查看过期时间 数据类型:Redis支持字符串、哈希、列表等数据结构,底层采用多种编码方式优化 过期策略:结合定期删除和惰性删除,并分析了时间轮等定时器实现方案 注意事项:keys命令可能阻塞服务,删除操作风险取决于Redis角色(缓存/数据库) 重点说明了Redis单线程特性下的性能考虑和不同场景下

2025-07-24 22:34:41 1093

原创 第一章: 初识 Redis:背后的特性和典型应用场景

Redis 在实时数据存储、缓存与会话存储、流处理与消息传递等场景中都发挥着重要作用。通过合理利用 Redis 的特性,我们可以构建出高性能、高可用的应用系统。希望本文的案例分析能帮助大家更好地理解和应用 Redis,在实际项目中发挥其最大价值。如果你想了解更多关于 Redis 的高级用法和最佳实践,可以持续关注我们的技术博客,我们将为大家带来更多精彩内容。

2025-07-20 17:16:08 1040

原创 第二章: 启程 Redis:为什么它是后端工程师的 “必修课”?

Redis 的轻量级和灵活性使其成为技术栈中不可替代的组件。掌握 Redis 不仅解决当下性能问题,更为未来应对大数据、实时计算等挑战奠定基础。后端工程师通过深度理解 Redis,能够更高效地设计弹性可扩展的系统架构。

2025-07-20 11:46:52 624

原创 二.微服务架构中的精妙设计:环境和工程搭建

微服务到底多⼩才算"微", 这个在业界并没有明确的标准. 微服务并不是越⼩越好, 服务越⼩, 微服务架构的优点和缺点都会越来越明显.服务越⼩, 微服务的独⽴性就会越来越⾼, 但同时, 微服务的数量也会越多, 管理这些微服务的难度也会提⾼. 所以服务拆分也要考虑场景

2025-03-30 23:09:00 1095 1

原创 三.微服务架构中的精妙设计:服务注册/服务发现-Eureka

在最初的架构体系中, 集群的概念还不那么流⾏, 且机器数量也⽐较少, 此时直接使⽤DNS+Nginx就可以满⾜⼏乎所有服务的发现. 相关的注册信息直接配置在Nginx. 但是随着微服务的流⾏与流量的激增,机器规模逐渐变⼤, 并且机器会有频繁的上下线⾏为, 这种时候需要运维⼿动地去维护这个配置信息是⼀个很⿇烦的操作.所以开发者们开始希望有这么一个东西, 它能维护⼀个服务列表, 哪个机器上线了,哪个机器宕机了, 这些信息都会自动更新到服务列表上, 客户端拿到这个列表, 直接进行服务调用即可. 这个就是注册中心。

2025-03-30 23:07:37 1668

原创 一.微服务架构中的精妙设计:SpringCloud的概述

微服务解决⽅案- Spring Cloud。

2025-03-29 18:44:42 758

原创 位运算算法:解锁高效编程的钥匙

位运算是直接对整数在二进制位上进行操作的运算,主要包括以下几种:按位与(&)运算规则:将两个数转换为二进制后,对应位都为 1 时,结果位才为 1,否则为 0 。例如,3 & 5 ,3 的二进制是 0011,5 的二进制是 0101 ,则 0011 & 0101 = 0001(即十进制的 1 )。应用场景:常用于获取某数二进制特定位置的值,如 num & 1 可判断 num 二进制最低位是否为 1;还可用于屏蔽某些位,保留其他位等

2025-03-28 14:09:48 617

原创 前缀和算法:解锁高效编程的钥匙

题目要求题目分析: 算法分析:前缀和算法:快速求出数组中某一段连续区间的和。 代码步骤:(1)输入数据从标准输入读取两个整数 和 : 表示数组的长度。 表示查询的次数。读取数组 ,注意数组下标从 开始。(2)前缀和数组创建一个前缀和数组 ,其中 表示数组 中前 个元素的和。前缀和的计算公式: (3)查询处理对于每个查询,输入区间的左右边界 和 。细节补充:设置前缀和数组时,定义第一个元素的下标为1,不是0,这样的目的是解决边界问题。源代码:代码通过:题目要求:题目解析:

2025-02-26 10:50:43 976

原创 双指针算法:解锁高效编程的钥匙

做题策略:1.定义两个指针(其实本质是两个索引),cur指针(初始位置为0)和dest指针(初始位置为-1)2.cur从后往前遍历数组3.cur遍历完整个数组即完成。视频展示如下:(1)283移动零算法小结:根据双指针移动的方法,可以将数组进行块划分,可以分成三个区间。

2025-02-24 16:56:19 869

原创 滑动窗口算法:解锁高效编程的钥匙

在比较种类的时候,我们可以直接用hash容器进行比较(循环),但是可以进行优化,使用数组模拟hash表,同时用变量存储种类,大大滴优化✌。将 x 减到 0 的最小操作数。源码:(使用hash容器)找到字符串中所有字母异位词。最大连续1的个数 III。无重复字符的最长子串。

2025-02-24 16:55:41 431

原创 从初学者到专家:Java继承的完整指南

Java中使用类对现实世界中实体来进行描述,类经过实例化之后的产物对象,则可以用来表示现实中的实体,但是 现实世界错综复杂,事物之间可能会存在一些关联,那在设计程序是就需要考虑通过观察上述代码会发现,猫和狗的类中存在那能否将这些共性抽取呢?。

2025-02-05 11:00:49 857

原创 二分算法模板:解锁高效编程的钥匙

数组具有二段性,可以分为左右两边合法区和不合法区如果选择左端点,右边区域不合法,选择 left = mid ,;如果选择右端点,左边区域不合法,

2025-02-02 15:03:28 495

原创 在排序数组中查找元素的第一个和最后一个位置(力扣)

使用二分进行查找。

2025-01-30 18:13:38 1155

原创 简单配置阿里云服务器编写Linux

先说环境,为了分工明确,不同工作人员涉及到的"环境"不同。开发环境: 开发⼈员写代码⽤的机器.测试环境: 测试⼈员测试程序使⽤的机器.⽣产环境(线上环境): 最终项⽬发布时所使⽤的机器. 对稳定性要求很⾼把程序安装到⽣产环境上, 这个过程称为 "部署". 也叫 "上线".

2025-01-08 11:08:19 1362 1

原创 Spring项目:文字花园(四)

接下来我们介绍第三种⽅案: 令牌技术 JWT令牌⽣成和校验。1.在pom文件,引入依赖 2.生成令牌(utils/JwsUtils)代码: 3.编写后端接口(User Controller) service层:mapper层:4.编写前端代码进行交互: 展示成功 . 新添类:interceptor/LoginInterceptor 代码: 1.2应用到项目1.新添类:config/webconfig2. 编写前端代码(blog_list.html)

2024-08-20 23:03:41 1045 4

原创 Spring项目:文字花园(三)

controller层添加方法(根据博客id查看博客详情)Service层写构造方法使用postman来进行测试测试成功。

2024-08-19 22:01:18 526

原创 Spring由于后端逻辑,前端无法展示数据

前端需要发送请求,获取到getList方法,但是后端返回的是一个List类,而不是Result类,导致找不到SUCCESS,根本没有执行if语句内容,自然就没有展示到到前端。或者在前端代码,在if条件把SUCCESS状态码去掉,直接使用List对象。后端逻辑:在ctroller层,调用getList方法返回的是List列表。状态码SUCCESS返回result类。把返回的类型修改成Result。前端代码,if条件里面是。来进行数据展示更新。

2024-08-19 18:09:52 707

原创 Spring项目:文字花园(一)

实现登录注册功能。⽤⼾登录成功后, 可以查看所有⼈的博客. 点击 可以查看该博客的正⽂内容. 如果该博客 作者为当前登录⽤⼾, 可以完成博客的修改和删除操作, 以及发表新博客。

2024-08-12 21:35:11 989

原创 Spring项目:文字花园(二)

这段代码使用MyBatis注解方式定义了一个名为和selectById,分别用于根据用户名和用户ID从数据库中查询用户信息,并返回UserInfo对象。单元测试:代码解读:用于测试接口中的和selectById方法,通过自动注入实例并调用其方法来验证数据库查询功能的正确性,测试结果通过控制台输出显示。

2024-08-12 21:22:45 830

原创 事务隔离级别

Spring 事务传播机制我们回顾一下MySQL 事务隔离级别.SQL 标准定义了四种隔离级别, MySQL 全都⽀持. 这四种隔离级别分别是:1.: 读未提交, 也叫未提交读. 该隔离级别的事务可以看到其他事务中未提交的数据.读已提交, 也叫提交读. 该隔离级别的事务能读取到已经提交事务的数据,该隔离级别不会有脏读的问题.但由于在事务的执⾏中可以读取到其他事务提交的结果, 所以在不同时间的相同 SQL 查询可能会得到不同的结果, 这种现象叫做不可重复读3.

2024-08-11 21:41:16 2150

原创 【无标题】

然而,也需要注意,由于事务管理是通过代理实现的,因此有些情况下(如类内部的方法调用)可能无法触发事务管理逻辑。⽆需⼿动开启事务和提交事务, 进⼊⽅法时⾃动开启事务, ⽅法执⾏完会⾃动提交事务, 如果中途发⽣了没有处理的异常会⾃动回滚事务.注解的类或方法时,Spring 会为这个类或方法创建一个代理对象,并在代理对象中嵌入事务管理的逻辑。方法进行用户注册,如果注册成功则提交事务,如果在注册过程中遇到异常则回滚事务。属性定义了事务的传播行为,即当前事务方法应该如何与存在的事务进行交互。

2024-08-11 21:17:36 694

原创 Spring事务

事务的定义:事务是⼀组操作的集合, 是⼀个不可分割的操作.事务会把所有的操作作为⼀个整体, ⼀起向数据库提交或者是撤销操作请求.所以这组操作要么同时成功, 要么同时失败.事务的特性(ACID)原子性:事务中的所有操作作为一个整体执行,它们要么全部成功,要么全部失败回滚。一致性:事务执行前后,数据库必须从一个一致性状态转变到另一个一致性状态。隔离性:并发执行的事务之间应该相互隔离,避免数据冲突和不一致性。持久性:一旦事务提交,其对数据库的修改就是永久性的,即使在系统故障后也能够恢复。

2024-08-09 18:36:27 1288

原创 Spring AOP 源码剖析

Spring AOP通过动态代理技术提供了一种灵活的方式来增强现有方法的功能,而无需修改源代码。其源码实现涉及Bean生命周期管理、动态代理技术、责任链模式等多个方面,深入理解这些机制有助于更好地使用和维护Spring AOP。

2024-08-08 21:51:04 1372

原创 深入探索String AOP想详情

AOP是Spring框架的第⼆⼤核⼼(第⼀⼤核⼼是IoC)Q:什么是AOP?A:Aspect Oriented Programming(⾯向切⾯编程)什么是⾯向切⾯编程呢?切⾯就是指某⼀类特定问题, 所以AOP也可以理解为⾯向特定⽅法编程. 什么是⾯向特定⽅法编程呢?

2024-08-08 20:58:33 744

原创 深入探索String AOP:切点表达式

创建⼀个注解类(和创建Class⽂件⼀样的流程, 选择Annotation就可以了)代码简单说明, 了解即可. 不做过多解释1.@Target 标识了 Annotation 所修饰的对象范围, 即该注解可以⽤在什么地⽅.TYPE: ⽤于描述类、接⼝(包括注解类型) 或enum声明ElementType.METHOD: 描述⽅法ElementType.PARAMETER: 描述参数TYPE_USE: 可以标注任意类型。

2024-08-08 20:53:31 918

原创 DispatcherServlet 源码分析

当Tomcat启动之后, 有⼀个核⼼的类DispatcherServlet, 它来控制程序的执⾏顺序.所有请求都会先进到DispatcherServlet,执⾏doDispatch 调度⽅法. 如果有拦截器, 会先执⾏拦截器 preHandle() ⽅法的代码, 如果 preHandle() 返回true, 继续访问controller中的⽅法. controller当中的⽅法执⾏完毕后,再回过来执⾏ postHandle() 和 afterCompletion() ,返回给DispatcherServle

2024-08-06 22:39:33 1189

原创 Spring Boot实战:拦截器

什么是拦截器:拦截器在SpringBoot中主要有以下几个作用: 1.2拦截器的基本使用1.⾃定义拦截器:实现HandlerInterceptor接⼝,并重写其所有⽅法 2.注册配置拦截器:实现WebMvcConfigurer接⼝,并重写addInterceptors⽅法 3.启动服务, 试试访问任意请求, 观察后端⽇志可以看到preHandle ⽅法执⾏之后就放⾏了, 开始执⾏⽬标⽅法, ⽬标⽅法执⾏完成之后执⾏ postHandle和afterCompletion⽅法.

2024-08-06 11:03:11 6608

原创 Mybatis实战:图书管理系统(笔记)

数据库表是应⽤程序开发中的⼀个重要环节, 数据库表的设计往往会决定我们的应⽤需求是否能顺利实现, 甚⾄决定我们的实现⽅式. 如何设计表以及这些表有哪些字段, 这些表存在哪些关系 也是⾮常重要的.分析我们的需求, 图书管理系统相对来说⽐较简单, 只有两个实体: ⽤⼾和图书, 并且⽤⼾和图书之间没有关联关系表的具体字段设计, 也与需求有关.数据库表设计是依据业务需求来设计的. 如何设计出优秀的数据库表, 与经验有很⼤关系.2.在controller层写后端(UserController)逻辑。

2024-08-04 21:57:43 843

原创 Mybatis实战:#{} 和 ${}的使用区别和数据库连接池

{} 和 ${}#{} 和 ${} 在MyBatis框架中都是用于SQL语句中参数替换的标记,但它们在使用方式和处理参数值上存在一些显著的区别。特点1.1Interger类型的参数1.先看Interger类型的参数2.观察日志3.查看日志中的输出语句我们输⼊的参数并没有在后⾯拼接,id的值是使⽤?进⾏占位. 这种SQL 我们称之为"预编译SQL"。4.我们把#{}改成${}5.再次查看输出日志信息可以看到, 这次的参数是直接拼接在SQL语句中了。

2024-08-02 16:18:07 2130

空空如也

空空如也

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

TA关注的人

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