- 博客(37)
- 收藏
- 关注
原创 redis缓存常见问题-缓存击穿、缓存穿透、缓存雪崩
文章主要讨论了Redis缓存使用中的常见问题及其解决方案。首先,缓存一致性问题是企业中最常见的,文章分析了CacheAside模式的优缺点,并提出了先更新数据库再删除缓存的策略,以减少不一致性的概率。其次,缓存穿透问题通过缓存空值或使用布隆过滤器来解决,以减少对数据库的直接访问。缓存雪崩问题则通过设置不同的TTL、使用Redis集群、降级限流和多级缓存等策略来缓解。最后,缓存击穿问题通过互斥锁和逻辑过期两种方案来处理,以避免热点Key失效时对数据库的冲击。文章还提到,在面试中可能会被问到Redis缓存相关的
2025-05-21 01:03:18
1150
原创 redis面试篇
文章摘要:本文探讨了缓存系统中的四个常见问题及其解决方案。首先,关于缓存双写一致性,推荐使用CacheAside模式,并设置缓存过期时间以确保最终一致性,而不采用延迟双删机制因其复杂且效果有限。其次,缓存穿透问题可通过布隆过滤器或缓存空值来解决。第三,缓存雪崩问题可通过设置不同的TTL值和利用Redis集群或多级缓存来缓解。最后,缓存击穿问题可通过互斥锁或逻辑过期策略来处理,避免多线程并发重建缓存,同时进行双重检查以确保缓存一致性。
2025-05-21 00:43:41
379
原创 Elasticsearch进阶篇-数据聚合
聚合(aggregations)是一种强大的数据分析工具,能够快速实现数据的统计、分析和运算。常见的聚合类型包括桶(Bucket)聚合、度量(Metric)聚合和管道(pipeline)聚合。桶聚合用于文档分组,如按品牌或日期分组;度量聚合用于计算最大值、最小值、平均值等;管道聚合则基于其他聚合结果进行进一步运算。通过DSL语法,可以轻松实现这些聚合功能,例如按条件过滤后进行品牌统计或价格分析。在Java中,可以使用RestClient和AggregationBuilders工具类来实现聚合功能,代码结构清
2025-05-20 22:39:16
1091
原创 Elasticsearch进阶篇-java程序通过RestClient操作es实现查询
本文介绍了如何使用Java API进行Elasticsearch查询,涵盖了从发送请求到解析响应的完整流程。首先,通过创建SearchRequest对象并利用request.source()构建DSL查询条件,使用QueryBuilders构建查询语句。接着,通过client.search()发送请求并解析SearchResponse响应结果,逐层解析JSON结构以获取文档数据。文章还详细介绍了多种查询类型,包括match、multi_match、range、term查询,以及复合查询如bool查询。此外,
2025-05-20 22:15:03
1065
原创 Elasticsearch进阶篇-DSL
本文介绍了Elasticsearch的DSL查询语法,主要分为叶子查询和复合查询两大类。叶子查询包括全文检索和精准查询,如match、term和range等;复合查询则通过逻辑运算组合多个查询,如bool查询。此外,文章还详细讲解了排序、分页和高亮等查询结果处理方式。通过Kibana的DevTools工具,用户可以快速上手DSL查询,并利用其强大的搜索功能进行数据检索。掌握DSL查询语法后,可以更高效地使用Elasticsearch进行数据搜索和分析。
2025-05-18 23:08:42
1030
原创 Elasticsearch基础篇-java程序通过RestClient操作es
本文介绍了如何在Java程序中集成和使用Elasticsearch,以实现高效的搜索功能。首先,通过引入RestHighLevelClient依赖并初始化,建立与Elasticsearch的连接。接着,详细讲解了索引库的操作,包括创建、删除和查询索引库,以及如何通过Mapping映射定义索引库结构。此外,还介绍了文档的增删改查操作,特别是批量导入文档的方法,以提高数据处理的效率。通过这些步骤,开发者可以在Java应用中有效地利用Elasticsearch进行数据搜索和分析。
2025-05-18 17:27:39
1459
原创 ElasticSearch基础篇-索引库操作、文档操作
Elasticsearch中的索引库操作类似于数据库表,Mapping映射则类似于表结构。Mapping定义了索引库中文档的约束,包括字段类型(如text、keyword、integer等)、是否创建索引、分词器等属性。索引库的CRUD操作遵循Restful风格的API,通过PUT、GET、DELETE等请求方式实现。创建索引库时需要定义Mapping,查询和删除索引库则直接通过索引库名进行操作。修改索引库时,虽然无法更改已有字段,但可以添加新字段。文档操作包括新增、删除、修改和查询,数据以JSON格式存储
2025-05-17 23:56:49
1074
原创 Elasticsearch入门篇
Elasticsearch是由Elastic公司开发的高性能搜索引擎,常用于日志收集、系统监控和数据分析。其技术栈包括Elasticsearch(数据存储与搜索)、Logstash/Beats(数据收集)和Kibana(数据可视化),合称ELK。Elasticsearch的核心功能是数据存储、搜索和计算,而Kibana则提供可视化操作界面,简化了Elasticsearch的API调用。安装Elasticsearch和Kibana可通过Docker命令完成,分别运行在9200和5601端口。Elasticse
2025-05-17 23:44:10
980
原创 RabbitMQ高级篇-消费者的可靠性
本文详细探讨了消息队列中消费者可靠性的实现机制。首先介绍了消费者确认机制,包括ack、nack和reject三种回执方式,并指出Spring AMQP如何通过配置简化这一过程。接着讨论了失败重试机制,通过本地重试避免消息无限循环,并提供了配置示例。文章还提出了失败处理策略,特别是RepublishMessageRecoverer的使用,以优雅地处理无法立即解决的消息。最后,强调了业务幂等性的重要性,并提出了两种实现方案:唯一消息ID和业务状态判断,以防止重复消息导致的业务异常。这些策略和机制共同确保了消息处
2025-05-15 23:54:54
670
原创 RabbitMQ高级篇-MQ的可靠性
MQ的可靠性主要依赖于数据持久化设置,确保消息在服务重启或崩溃时不会丢失。数据持久化包括交换机、队列和消息三个层面的持久化设置。交换机持久化通过设置Durability参数为Durable实现,队列持久化则在创建队列时指定durable=true。消息持久化通过设置delivery_mode=2实现,确保消息写入磁盘。非持久化设置适用于对消息可靠性要求不高的场景,非持久化队列和消息在服务重启后将丢失。持久化消息同时存储在内存和磁盘,而非持久化消息仅在内存中存储,磁盘存储为临时性。通过合理配置持久化设置,可以
2025-05-15 23:38:42
1320
原创 RabbitMQ高级篇-发送者的可靠性
消息在从生产者到消费者的传递过程中,存在多种可能导致消息丢失的情况,包括发送时的网络故障、MQ内部异常以及消费者处理失败等。为确保消息的可靠性,需从三个方面入手:确保生产者成功发送消息、MQ妥善保存消息以及消费者正确处理消息。为此,可以采用生产者重试机制和生产者确认机制。重试机制通过多次尝试发送消息来提高成功率,而确认机制则通过PublisherConfirm和PublisherReturn两种方式,确保消息成功投递到MQ并正确处理。这些机制虽能有效提高消息传递的可靠性,但也会影响性能,因此需根据具体业务需
2025-05-14 23:15:10
1013
原创 快速上手RabbitMQ及springboot快速整合RabbitMQ
Work模型的使用:多个消费者绑定到一个队列,同一条消息只会被一个消费者处理通过设置prefetch来控制消费者预取的消息数量Fanout交换机将消息路由给每一个与之绑定的队列Direct交换机根据RoutingKey判断路由给哪个队列如果多个队列具有相同的RoutingKey,则与Fanout功能类似。
2025-05-14 21:30:23
1084
原创 docker:docker常用命令、数据卷、镜像、Dockerfile、项目部署DockerCompose
当我们利用 Docker 安装应用时, Docker 会自动搜索并下载应用镜像( image )。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。Docker 会在运行镜像时创建一个隔离环境,称为容器镜像仓库:存储和管理镜像的平台, Docker 官方维护了一个公共仓库: Docker Hub。数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。html:放置一些静态资源conf:放置配置文件如果我们要让Nginx代理我们的静态资源,最好是放到。
2025-05-12 20:08:14
972
原创 安装docker,在docker上安装mysql,docker上安装nginx
可以看到容器的状态是启动(up),创建时间33分钟前,容器名称mysql,linux的3306端口映射到了mysql的3306端口,所以之后连接linux的3306,相当于操作到了docker容器的mysql监听的3306端口。-o 将镜像输出为什么样的文件,即将nginx:1.20.2的镜像保存为nginx-1.20.2.tar的文件。:1.20.2:指定拉取的Nginx镜像,如果在本地已经存在,就直接使用,如果不存在,就去镜像仓库拉取。如果没有指定版本,默认是latest,代表最新的版本镜像。
2025-04-26 23:08:31
2469
原创 docker配置mysql遇到的问题:网络连接超时、启动mysql失败、navicat无法远程连接mysql
在这一行-v /mydata/mysql/conf:/etc/mysql,我们将主机路径/mydata/mysql/conf挂载到容器路径/etc/mysql下,但实际上容器配置在/etc/mysql/conf.d/目录下。这个错误表明,你的客户端尝试通过 IP 地址连接到 MySQL 服务器,但服务器拒绝了这个请求。我们的命令指定的配置文件路径是/etc/mysql/,而容器读取的配置文件路径是/etc/mysql/conf.d/。切换到国内镜像源,如使用阿里云的Docker镜像加速器,以提高下载速度。
2025-04-26 22:31:24
1058
原创 linux常用指令:文件目录类、文件查看类、压缩和解压类
在 Linux 系统中,掌握常用指令是高效操作的关键。本文将为你详细介绍一些实用的 Linux 常用指令,帮助你在终端中游刃有余地完成各种任务。
2025-04-17 19:48:05
1008
原创 软件测试过程模型:v模型、w模型、x模型、H模型
只要某个测试达到准备就绪点,测试执行活动就可以开展,并且不同的测试活动就可按照某个次序先后进行,也可以反复进行。X模型中定位了探索性测试,这是不进行事先计划的特殊类型测试,可以帮助有经验的测试人员在测试计划之外发现更多的软件错误。两个V模型组成,一个V是软件测试全过程,一个V是软件开发全过程,明确表示出了测试与开发的并行关系。验收测试的标准是用户的需求,用户需求对应指导验收测试的效果,每个阶段都有相对应的阶段。在W模型中、需求,设计,编码等活动被视为串行的,这样无法支持灵活的迭代。D.开发人员自己测试。
2025-04-14 23:21:11
538
原创 python基础:数据类型转换、运算符(算术运算符、比较运算符、逻辑运算符、三元运算符、位运算符)
python变量的类型不是固定,会根据变量当前值在运行时决定,可以通过内置函数type(变量)来查看其他类型,这种方式就是隐式转换,有的也称为自动转换。str转成int时,要求字符串中本身是整数;str转成float,字符串中可以是整数;变量根据使用的上下文(即当前值)在运行时决定其类型。float转换成int时会直接去掉小数点部分;强制转换后不会影响原变量和数据/值得类型。运算时数据类型会向高精度转换。将数据类型作为函数名;
2025-04-13 23:48:20
374
原创 软件生命周期模型:瀑布模型、螺旋模型、迭代模型、敏捷开发、增量模型、快速原型模型
为了早点上市场,先发布具备基本功能的产品,后续根据市场反应或者产品计划发布后续版本,即刚开始发布的就是一个稳定的、可运行的软件,可交给用户使用,随着后面的开发越来越深入。增量模型是把软件的每个模块独立开来,每次交付/发行都交其中的一个模块,根据市场反馈,决定下一次交付哪个模块,可以不按照顺序。螺旋模型是一种演化软件开发过程的模型,它兼顾了快速原型的迭代的特征以及瀑布模型的系统化和严格监控。发布的软件就是可以运行的,在初级版本进行深入的研发,类型于更新。含义:把软件分割成独立的模块,分批次的完成和交付。
2025-04-13 22:39:58
1116
原创 python基础:变量-数据类型(整数类型、浮点类型、布尔类型、字符串类型)
意义:python仅保存一份相同且不可变字符串,不同的值被存放在字符串的驻留池中,python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同的字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量。1.在python中,int可以表示很大的数,限制最多存放4300个数字长的值,(官方:the limit(4300 digits) for integer)好处:当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提示效率和节约内存。
2025-04-11 19:11:03
1007
原创 springboot中测试python脚本:ProcessBuilder
ProcessBuilder是jdk提供的脚本执行工具类,无论是python文件还是shell脚本还是其他的指令,都可以通过此类来执行,我们来看看它是如何调用python脚本的。是 Java 提供的一个用于创建操作系统进程的类,它使得启动和管理外部进程变得更加简单和灵活。以下是一个详细的教程,帮助你理解如何在 Java 中使用。
2025-04-10 21:11:24
725
原创 python语言概述:python快捷键、转义字符
计算机不能直接执行程序员写的代码,需要通过python解释器(python.exe)将源代码解释翻译成计算器可以执行的二进制码。python源文件通常以.py为拓展名(规范),但不是必须(即就算是hello.abc,python解释器也是可以识别执行的)"结束,但带上";使用一次tab操作,实现缩进,默认整体向右边移动,使用shift+tab整体向左移动。快速启动程序 ctrl+shift+f10 或者 shift+f10。如果注释函数或者其中的某个步骤,使用单行注释。快速格式化 alt+ctrl+l。
2025-04-10 02:47:00
398
原创 mysql root密码忘记了,重置方法
首先,需要停止 MySQL 服务。由于跳过了权限表,可以直接登录 MySQL,不需要密码。停止并重新启动 MySQL 服务,使更改生效。选项启动 MySQL,这将跳过所有权限检查。
2025-03-20 21:06:44
379
原创 springbooot使用jdbctemplate进行动态数据源连接测试和根据yml文件进行连接测试的区别
Spring Boot 的自动配置机制会根据配置文件中的信息自动创建DataSource对象,并使用该对象创建实例。你不需要手动创建或配置这些对象,Spring Boot 会自动完成这些工作,并通过依赖注入将它们提供给你的应用。
2025-03-20 20:59:00
857
原创 HttpClient
HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
2025-03-04 21:56:28
345
原创 在 Java 中操作 Redis-RedisTemplate
RedisTemplate 针对大量 api 进行了归类封装 , 将同一数据类型的操作封装为对应的 Operation 接口,具体分类如下:• ValueOperations : string 数据操作• SetOperations : set 类型数据操作• ZSetOperations : zset 类型数据操作• HashOperations : hash 类型的数据操作• ListOperations : list 类型的数据操作。
2025-03-03 23:52:41
691
原创 SpringCloud - Eureka
一、为什么使用Eureka1.在企业级项目中,服务消费访问请求会存在高并发2.如果只有一个会员中心-提供服务,可用性差 3.所以,会员中心提供服务往往是一个集群,也就是说会有多个会员中心-提供服务微服务模块4.那么这个时候,就存在一个问题就是服务消费方,怎么去发现可以使用的服务5.当服务消费方,发现了可以使用的服务后(可能是多个,又存在一个问题就是到底调用A服务,还是B 服务的问题,这就引出了服务注册和负载均衡)6.Eureka 就可以解决上述问题二、引入Eureka框架解读:1. 会员中心-提供服务的,在
2025-01-23 23:59:20
710
原创 redis常用指令-set、hash、Zset
一句话: set 提供的功能与list 类似是一个列表的功能,特殊之处在于set 是可以自动排重的, 即值是不允许重复的。返回有序集key 中,下标在之间的元素,带WITHSCORES,可以让分数一起和值返回到结果集。返回两个集合的差集元素(key1 中的,不包含key2 中的)判断集合是否为含有该值,有1,没有0。给集合中的键赋值把集合中一个值从一个集合移动到另一个集合。返回该值在集合中的排名,从0 开始。
2024-12-09 22:38:14
959
原创 redis常用命令-list
其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。所以对于这个命令例子 LPUSH mylist a b c,返回的列表是 c 为第一个元素, b 为第二个元素, a 为第三个元素,k对于的是一个list,这个list底层是双向链表。用lpush,因为是从表头存放,从左到右每次取出来的都是最新的),而且list是做缓存的,在内存里速度也特别快。其它,比如微信的最近转发,微博的最新关注等.
2024-12-08 23:04:42
1593
原创 redis启动时报错
解答:这个错误信息表明你在尝试读取一个配置文件时遇到了问题。错误提示 Bad directive or wrong number of arguments 通常意味着配置文件中存在语法错误或者指令使用不当。所以我用vi /etc/redis.conf命令,发现我的配置文件确实在第一行出现了无关的字母,我删掉之后就可以成功启动了。解答:我登录XShell是用的root用户,而我的linux登录的是普通用户,所以拒绝连接,将linux换成root用户登录就行。
2024-12-08 22:49:03
772
原创 redis常用命令-String
String1. String 是 Redis 最基本的类型,一个 key 对应一个 value。2. String 类型是二进制安全的, Redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化 的对象。3. String 类型是 Redis 基本的数据类型,一个 Redis 中字符串 value 最多可以是 512M。
2024-12-06 19:05:07
2216
原创 Redis+XShell下载安装
2.2.1安装 C 语言的编译环境 yum install gcc2.2.2测试 gcc 版本 gcc --version。
2024-12-05 23:18:22
590
原创 前后端分离的springboot项目利用MybatisPlus的分页插件进行查询操作
目标:在springboot项目中,在后端通过MybatisPlus的分页插件实现查询操作,前端通过Element Plus实现分页导航,将分页请求与后端的接口结合(注:以家具项目的增删查改进行举例,代码只有一部分)。
2024-12-04 23:36:06
907
1
原创 Spring Initializr创建springboot项目,提示java: 错误: 无效的源发行版:16
运行项目后报错:java: 错误: 无效的源发行版:16。
2024-12-03 19:21:02
2957
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人