自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Redis 进阶】Redis 典型应用 —— 分布式锁

在一个分布式的系统中,也会涉及到多个节点访问同一个公共资源的情况,此时就需要通过锁来做互斥控制, 避免出现类似于 “线程安全” 的问题。而 Java 的 synchronized 或者 C++ 的 std::mutex,这样的锁都是只能在当前进程中生效,在分布式的这种多个进程多个主机的场景下就无能为力了,此时就需要使用到分布式锁.本质上就是使用一个公共的服务器,来记录加锁状态。

2025-08-27 11:02:43 1051

原创 【Redis 进阶】Redis 典型应用 —— 缓存(cache)

缓存(cache)是计算机中的一个经典的概念,在很多场景中都会涉及到。核心思路就是把一些常用的数据放到触手可及(访问速度更快)的地方,方便随时读取。举例:我需要去高铁站坐高铁,坐高铁是需要反复刷身份证的(进入高铁站、检票、上车、乘车过程中、出站...)。正常来说,我的身份证是放在行李箱里的(行李箱的存储空间大,足够能装),但是每次刷身份证都需要开一次行李箱找身份证就非常不方便。因此我就可以把身份证先放到口袋里,虽然口袋空间小,但是访问速度比行李箱快很多。

2025-08-27 10:39:05 742

原创 【Redis 进阶】-------集群

特点:md5 计算结果是定长的,其计算结果是分散的,计算结果是不可逆的),得到的结果为:bc4b2a76b9719d91,再把这个结果 % 3(hash(key) % N => 0),结果为 0,那么就把 hello 这个 key 放到 0 号分片上。在实际使用 Redis 集群分片的时候,不需要手动指定哪些槽位分配给某个分片,只需要告诉某个分片应该持有多少个槽位即可,Redis 会自动完成后续的槽位分配,以及对应的 key 搬运的工作。如果集群中的从节点挂了,是没有什么影响的。

2025-08-26 11:20:39 828

原创 【Redis 进阶】-----哨兵 Sentinel(重点理解流程和原理)

Redis 的主从复制模式下,一旦主节点由于故障不能提供服务,需要人工进行主从切换,同时大量的客户端需要被通知切换到新的主节点上,对于上了一定规模的应用来说,这种方案是无法接受的,于是 Redis 从 2.8 开始提供了 Redis Sentinel(哨兵)加个来解决这个问题。

2025-08-26 09:01:44 968

原创 【Redis 进阶】----主从复制(重点理解流程和原理)

(某个服务器程序只有一个节点(只搞一个物理服务器来部署这个服务器程序)。可用性不高:如果这个机器挂了意味着服务就中断了;性能 / 支持的并发量比较有限)。。在分布式系统中,往往希望有多个服务器来部署 Redis 服务,从而构成一个 Redis 集群,此时就可以让这个集群给整个分布式系统中的其他服务提供更稳定、更高效的数据存储功能。在若干个 Redis 节点中,有的是 “主” 节点,有的是 “从” 节点。从节点上的数据要随着主节点变化,和主节点保持一致。

2025-08-23 21:50:56 860 1

原创 【Redis 进阶】------事务

这个时候其实就容易引起歧义。因此,即使不保证严格的隔离性,至少也要告诉用户,当前的操作可能存在风险。watch 命令就是用来解决上述这个问题的,watch 在该客户端上监控一组具体的 key,看看这个 key 在事务的 multi 和 exec 之间,set key 之后,是否在外部被其他客户端修改了。

2025-08-23 18:56:39 978

原创 [Redis进阶]---------持久化

但一般来说,实际工作中 Redis 版本都是统一的,实在不行也可以通过写一个程序的方式来直接遍历旧的 Redis 中的所有 key,把数据取出来插入到新的 Redis 服务器中即可)。需要考虑到极端情况:假设在重写的过程中,重写了一半服务器突然挂了,此时子进程内存的数据就会丢失,新的 AOF 文件内容还不完整,所以如果父进程不坚持写旧的 AOF 文件,那么重启就无法保证数据的完整性了。现在的系统中,系统资源一般都是比较充裕的,AOF 的开销并不大,所以一般来说,AOF 的适用场景更多一些。

2025-08-23 18:27:17 920

原创 【redis初阶】------在 Spring 中操作 Redis

【代码】【redis初阶】------在 Spring 中操作 Redis。

2025-08-10 21:02:59 242

原创 【redis初阶】------redis客户端(2)

【代码】【redis初阶】------redis客户端(2)

2025-08-10 16:51:59 266

原创 【redis初阶】------redis客户端(1)

直接开放 Redis 端口到公网 ≈ “给服务器开大门”,风险极高(Redis 无复杂认证时,黑客可暴力破解)。Java 操作 redis 的客户端有很多. 其中最知名的是 jedis.创建 maven 项目, 把 jedis 的依赖拷贝到 pom.xml 中。:安全访问云服务器 Redis,同时不暴露 Redis 端口到公网。→ 说明本地 8888 端口已被 SSH 客户端监听,转发规则生效。进行通信的,这是 Jedis 连接字符串的标准格式。,把云服务器的 Redis 端口(如 6379)

2025-08-10 15:58:49 625

原创 【redis初阶】-------数据库管理

许多关系型数据库,例如 MySQL 支持在一个实例下有多个数据库存在的,但是与关系型数据库用字符来区分不同数据库名不同,Redis 只是用数字作为多个数据库的实现。Redis 默认配置中是有 16 个数据库。如果真的需要完全隔离的两套键值对,更好的做法是维护多个 Redis 实例,而不是在一个Redis 实例中维护多数据库。这是因为本身 Redis 并没有为多数据库提供太多的特性,其次无论是否有多个数据库,Redis 都是使用单线程模型,所以彼此之间还是需要排队等待命令的执行。Redis 提供了几个面向。

2025-08-10 15:41:19 366

原创 【redis初阶】-----渐进式遍历

每次 scan 命令的时间复杂度是 O(1),但是要完整地完成所有键的遍历,需要执行多次 scan。整个过程如图所示。•首次 scan 从 0 开始.• 当 scan 返回的下次位置为 0 时,遍历结束.

2025-08-10 15:32:23 309

原创 【redis初阶】Zset 有序集合类型

有序集合相对于字符串、列表、哈希、集合来说会有一些陌生。它保留了集合不能有重复成员的特点,但与集合不同的是,有序集合中的每个元素都有一个唯一的浮点类型的分数(score)与之关联,使得有序集合中的元素是可以维护有序性的,但这个有序不是用下标作为排序依据而是用这个分数。如图所示,该有序集合显示了三国中的武将的武力。有序集合提供了获取指定分数和元素范围查找、计算成员排名等功能,合理地利用有序集合,可以帮助我们在实际开发中解决很多问题。💡 有序集合中的元素是不能重复的,但分数允许重复。

2025-08-10 14:30:34 658

原创 【redis初阶】--------Set 集合类型

集合类型也是保存多个字符串类型的元素的,但和列表类型不同的是,集合中1)元素之间是无序的;2)元素不允许重复;如图所示。一个集合中最多可以存储 2^32 - 1 个元素。Redis 除了支持集合内的增删查改操作,同时还支持多个集合取交集、并集、差集,合理地使用好集合类型,能在实际开发中解决很多问题。基本命令2.1 SADD将一个或者多个元素添加到 set 中。注意,重复的元素无法添加到 set 中。本次添加成功的元素个数。示例:SMEMBERS。

2025-08-10 13:24:43 1283

原创 【redis初阶】------List 列表类型

这意味着可以通过索引下标获取某个元素或者某个范围的元素列表,例如要获取图的第 5 个元素,可以执行 lindex user:1:messages 4 或者倒数第 1 个元素,lindex。在 Redis 中,可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等(如图所示)。quicklist 相当于是 链表 和 压缩列表 的结合整体还是一个链表,链表的每个节点,是一个压缩列表,每个压缩列表,都不让它太大,同时再把多个压缩列表通过链式结构连起来;

2025-08-10 11:45:00 1009

原创 【redis初阶】-----Hash 哈希类型

几乎所有的主流编程语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组、映射。在 Redis 中,哈希类型是指值本身又是一个键值对结构,形如 key = "key",value = { {field1,value1 }, ..., {fieldN, valueN } },Redis 键值对和哈希类型二者的关系可以用图来表示哈希类型中的映射关系通常称为 field-value,用于区分 Redis 整体的键值对(key-value),

2025-08-10 11:09:25 571

原创 【redis初阶】------string 类型

string 类型是 Redis 最基础的数据类型,关于字符串需要特别注意1)首先 Redis 中所有的键的类型都是字符串类型,而且其他几种数据结构也都是在字符串类似基础上构建的,例如列表和集合的元素类型是字符串类型,所以字符串类型能为其他 4 种数据结构的学习奠定基础。2)其次,如图 2-7所示,字符串类型的值实际可以是字符串,包含一般格式的字符串或者类似JSON、XML 格式的字符串;数字,可以是整型或者浮点型;甚至是二进制流数据,例如图片、音频、视频等。不过一个字符串的最大值不能超过 512 MB。

2025-08-10 09:53:46 660

原创 【Redis初阶】------单线程模型

3.单线程模型不会出现线程冲突4.redis的核心功能比mysql要更加简单5.一个线程可以管理多个socket大部分的时候都是闲置的(对计算机来说)所以我们给一个线程管理一个socket,然后导致:然后就让一个线程管理多个socket前提:这些socket都是不冲突且不繁琐的,不然还是乖乖多创建几个吧。

2025-08-05 16:07:35 184

原创 【Redis初阶】-----数据结构

2025-08-05 11:20:38 90

原创 【Redis初阶】------Redis实战操作.

如果get的key无对应的value,则返回nil。如果直接遍历所以的key肯定是不行的耗费时间太长了。注意:keys * 的时间复杂度是O(N)在线上环境的时候,禁止使用keys *每次抽取一部分,看有没有过期(一定要快)未过期时候显示剩余秒数,过期后显示-2。返回key对应的数据类型。

2025-08-05 10:56:14 269

原创 【Redis初阶】------初识Redis

Redis 提供了简单的 TCP 通信协议,很多编程语言可以很方便地接入到 Redis,并且由于 Redis 受到社区和各大公司的广泛认可,所以支持 Redis 的客户端语言也非常多,几乎涵盖了主流的编程语言,例如:C、C++、Java、PHP、Python、NodeJS 等,后续我会对 Redis 的客户端使用做详细说明。一台主机的硬件资源是有限的(cpu,硬盘,内存......),如果同一时刻处理的数据多了,就会导致硬盘资源不足,最终导致消息的等待时间增加。

2025-08-05 07:41:30 1614

原创 【MySQL进阶】------MySQL程序

MySQL安装Linux系统程序⼀般在 /usr/bin⽬录下,可以通过命令查看:windows系统⽬录:你的安装路径\MySQL Server 8.0\bin,可以通过命令查看:每个 MySQL 程序都有许多不同的选项。⼤多数程序都提供⼀个 --help 选项,您可以使⽤该选项来获取程序不同选项的描述。例如: mysql --help,可以通过在命令⾏或配置⽂件中指定选项来覆盖 MySQL 程序的默认选项值程序名作用mysqldMySQL的守护进程即 MySQL 服务器。

2025-08-03 22:14:50 1004

原创 【测试开发】----自动化测试selenium篇

自动化测试指软件测试的自动化,

2025-08-03 00:58:18 829

原创 标准项目-----网页五子棋(5)------对战功能

本文介绍了基于WebSocket实现五子棋游戏对战功能的关键技术方案。主要内容包括:1. 建立WebSocket连接并约定交互协议,包括游戏就绪、落子请求和响应等消息格式;2. 实现服务器端的房间管理、玩家状态维护和胜负判断逻辑;3. 完成客户端与服务器的落子交互处理,包括坐标传输、棋盘更新和胜负判定;4. 优化处理玩家掉线、胜负提示和页面跳转等细节问题。系统采用双哈希表维护玩家在线状态,通过坐标检测实现五子连珠判断,并解决了游戏结束后的数据同步和界面优化问题。该方案实现了完整的五子棋对战功能,确保了游戏过

2025-08-02 10:06:40 816

原创 标准项目-----网页五子棋(4)-----游戏大厅+匹配+房间代码

Component// 创建三个匹配队列@Autowired// 操作匹配队列的方法.// 把玩家放到匹配队列中System.out.println("把玩家 " + user.getUsername() + " 加入到了 normalQueue 中!");System.out.println("把玩家 " + user.getUsername() + " 加入到了 highQueue 中!");} else {

2025-08-01 16:12:38 937

原创 标准项目-----网页五子棋(3)-----用户模块

• selectByName:根据⽤⼾名查找⽤⼾信息.⽤于实现登录.• userLose:⽤⼾给失败玩家修改分数.• userWin:⽤于给获胜玩家修改分数.• insert:新增⽤⼾.⽤⼾实现注册.来完成,所以还需要引入jquery。实现UserMapper.xml。创建login.html。在后续的前后端交互中我们。

2025-08-01 11:09:02 337

原创 标准项目-----网页五子棋(2)-----项目介绍

本文介绍了一个基于Web的五子棋对战系统设计方案。系统采用SpringBoot+MyBatis技术栈实现,分为三大功能模块:1)用户模块实现注册登录及分数记录;2)匹配模块基于天梯分实现玩家匹配;3)对战模块提供完整的五子棋游戏流程。系统使用MySQL存储用户数据,WebSocket实现实时对战,前端采用HTML/CSS/AJAX技术。数据库设计包含用户表存储基本信息,系统配置了Jackson处理JSON序列化。该方案实现了从用户管理、智能匹配到在线对战的完整五子棋游戏流程。

2025-08-01 01:01:15 523

原创 标准项目-----网页五子棋(1)-----认识WebSocket

Websocket是一种协议,用于在客户端和服务器之间建立持久的双向通信连接,广泛应用于需要实时数据交换的应用程序,例如在线聊天、实时游戏、股票行情等。是从 HTML5 开始支持的一种网页端和服务端保持长连接的消息推送机制WebSocket 协议 与 HTTP 协议有什么区别呢?HTTP 协议通常使用在 "一问一答" 的应用场景中:客户端向服务器发送一个 HTTP 请求,服务器给客户端返回一个 HTTP 响应上述情况中,服务器属于被动的一方,若客户端不主动发起请求,服务器就无法主动给客户端响应。

2025-07-31 21:03:59 937

原创 【测试开发】----用例篇

也就是一些常规正常的输入集合(例如红包0-200内的正常金额,再例如发送的请求数据合理),利用有效等价类验证程序是否实现了规格说明中所规定的功能和性能。依据需求将输入(特殊情况下会考虑输出)划分为若干个等价类。如果这个测试用例测试通过,则认为所代表的等价类测试通过。边界值分析法就是对输入或输出的边界值进行测试的一种。通常边界值分析法是作为对等价类划分法的补充。常规思考+逆向思考+发散性思维。从等价类中选出一个测试用例。对于程序的规格说明书,

2025-07-22 14:36:35 860 1

原创 【测试开发】---Bug篇

软件测试贯穿于软件开发的整个周期1.需求分析2.测试计划3.测试设计与开发4.测试执行5.测试评估6.上线7.运行维护bug的描述是很重要的,如果你只是指出开发人员的代码的一个bug,让他现在就改,他不得骂死你,所以你应该描述清清楚楚这个bug一个具体的bug应该包括版本,环境,重现步骤,预期结果,实际结果BUG的级别 为什么要对bug进行级别划分bug的生命周期前提:一定不能吵架3.我们可以将bug定义文档拿出来,有理有据的讲 4.如果是一位有能力的测试人员,可以给出自己的建议(注意态度一定要好,而不是命

2025-07-22 13:20:25 375

原创 【测试开发】--概念篇

满足用户期望或正式规定文档(合同、标准、规范)所具有的条件和权能,包含用户需求和软件需求。可以简单理解为甲方提出的需求,如果没有甲方,那么就是终端用户使用产品时必须要完成 的任务。该需求一般比较简略或者叫功能需求,该需求会详细描述开发人员必须实现的软件功能。大多数公司在进行软件开发的时候会把用户需求转化为软件需求,开发人员和测试人员工作的直接依据就是软件需求用户需求:平台支持邮箱注册从软件测试人员角度看需求需求是测试人员开展软件测试工作的依据。2.开发模式软件的生命周期。

2025-07-21 17:35:30 638

原创 【测试开发】----认识测试

最常见的理解就是:软件测试就是找BUG,发现缺陷。所以,并不是程序执行错误,执行异常才是缺陷,不符合产品特性和预期,不满足用户需求也是缺陷测试试图验证软件是“工作的”,也就是验证软件功能执行的正确性测试的活动是以测试人员“预期结果”为依据,这里的“预期结果”指的就是需求定义。

2025-07-21 15:56:29 1018

原创 每日五题系列------java面试题总结

Write Once, Run Anywhere(一次编写,随处运行)”这句宣传口号,真心经典,流传了好多年!以至于,直到今天,依然有很多人觉得跨平台是 Java 语言最大的优势。避免死锁问题只需要打破上述四点的其中一点即可,对于第一点和第二点对于Java中是打破不了的,他们都是synchronized的基本特性。:一个线程拿到锁后,除非自己释放,否则别的线程无法抢夺。:一个线程拿到锁后,不释放这个锁的前提下,获取其他锁。:一个线程拿到锁后,其余线程就得阻塞等待。1.通过虚拟机实现跨平台。

2025-07-20 02:02:11 812

原创 Spring 底层原理剖析

Spring Boot 的自动配置:当 Spring 容器启动后,一些配置类、bean 对象等就自动存入 Ioc 容器中,而不再需要我们手动去声明,从而简化了程序开发过程,省去了繁琐的配置操作也就是说,Spring Boot 的自动配置,就是SpinrgBoot将依赖 jar 包中的配置类以及Bean加载到Spring Ioc容器中的过程我们主要学习一下两个方面:1. Spring 如何将对象加载到 Spring Ioc 容器中2. SpringBoot 是如何进行实现的。

2025-07-20 00:10:02 1139

原创 【JavaEE进阶】使用云服务器搭建Linux环境

我们在⼯作中会涉及到几个"环境"开发环境: 开发⼈员写代码用的机器.测试环境: 测试⼈员测试程序使用的机器.⽣产环境(线上环境): 最终项⽬发布时所使⽤的机器.对稳定性要求很⾼.把程序安装到⽣产环境上,这个过程称为"部署".也叫"上线"⼀旦程序部署成功,那么这个程序就能被外网中千千万万的普通用户访问到.换句话说,如果程序有BUG,这个BUG也就被千千万万的⽤⼾看到了.部署过程⾄关重要,属于程序开发中最重要的⼀环.⼀旦部署出现问题,极有可能导致严重的事故(服务器不可⽤之类的).

2025-07-17 15:18:25 659

原创 @Transactional 详解

事务传播机制就是: 多个事务⽅法存在调⽤关系时,事务是如何在这些⽅法间进⾏传播的.比如有两个⽅法A,B都被 @Transactional 修饰,A⽅法调⽤B⽅法A⽅法运⾏时,会开启⼀个事务.当A调⽤B时,B⽅法本⾝也有事务,此时B⽅法运⾏时,是加⼊A的事务,还是创建⼀个新的事务呢?这个就涉及到了事务的传播机制.⽐如公司流程管理执⾏任务之前,需要先写执⾏⽂档,任务执⾏结束,再写总结汇报此时A部⻔有⼀项⼯作,需要B部⻔的⽀援,此时B部⻔是直接使⽤A部⻔的⽂档,还是新建⼀个⽂档呢?

2025-07-13 00:37:54 664 2

原创 【JavaEE进阶】Spring事务

本篇文章主要内容为以下两个方面对事务进行一个简单的介绍Spring中事务如何实现事务的概念,我相信很多人在数据库的时候已经听过和了解了,所以这里只进行简单的介绍事务是⼀组操作的集合,是⼀个不可分割的操作。事务会把所有的操作作为⼀个整体,⼀起向数据库提交或者是撤销操作请求。所以这组操作要么同时成功,要么同时失败。

2025-07-13 00:09:19 607

原创 Spring Aop 原理----代理模式

前面对Spring AOP的详细使用进行了介绍,这篇博客博主将详细讲解一下Spring AOP的原理,也就是Spring是如何实现AOP的.Spring AOP是基于动态代理来实现AOP的,动态代理又是代理模式的一种。

2025-07-12 20:12:03 1007

原创 【JavaEE进阶】Spring AOP详解

面向切面编程比如在前面文章实现的的"登录校验",就是⼀类特定问题.登录校验拦截器,就是对"登录校验"这类问题的统⼀处理.所以,拦截器也是AOP的⼀种应用.AOP是⼀种思想,拦截器是AOP思想的⼀种实现.Spring框架实现了这种思想,提供了拦截器技术的相关接⼝.同样的,统⼀结果返回和统⼀异常处理,也是AOP思想的⼀种实现.简单来说:AOP是⼀种思想,是对某⼀类事情的集中处理AOP是⼀种思想,它的实现⽅法有很多,有Spring AOP,也有AspectJ、CGLIB等.

2025-07-12 16:06:07 1030

原创 图书管理系统(完结版)

统⼀的数据返回格式使⽤ @ControllerAdvice 和ResponseBodyAdvice 的⽅式实现@ControllerAdvice 表⽰控制器通知类添加类。当我们程序出现异常的时候,Spring会对我们进行异常相关的处理,当发生异常的时候,它会走到BasicErrorcontroller类中的 error方法。ResponseAdvice ,实现 ResponseBodyAdvice 接⼝,并在类上添加@ControllerAdvice 注解。但是如果每一个接口都这样写,岂不太麻烦了一点儿。

2025-07-10 23:16:25 902

空空如也

空空如也

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

TA关注的人

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