自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(181)
  • 资源 (2)
  • 收藏
  • 关注

原创 Redis实现分布式锁的六种方式。最佳实践:原子性获取锁+LUA脚本释放锁

redis实现分布式锁

2022-06-19 11:14:44 1861 2

原创 redis的实战项目02_缓存、缓存更新策略、穿透、雪崩、击穿、缓存工具封装

redis的实战项目02_缓存、缓存更新策略、穿透、雪崩、击穿、缓存工具封装一、什么是缓存?缓存的作用:缓存的成本:二、添加redis缓存:三、缓存一致性问题,更新策略【重点】1、场景的缓存更新策略1. 内存淘汰:2.超时剔除3. 主动更新4. 业务场景:2、主动更新的策略的实现:1.主动更新需要考虑的3点问题:2. 具体实现-案例3. 测试:四、缓存穿透1、介绍:解决方法:2、解决方法一:缓存空对象3、解决方法二:布隆过滤4、案例实现:缓存穿透-缓存空对象五、一、什么是缓存?缓存就是数据交换的缓冲区(

2022-04-26 20:33:18 988

原创 微服务24_服务异步通信04:RabbitMQ高可用问题、镜像集群、仲裁队列

这里写自定义目录标题前言:消息队列在使用过程中,面临着很多实际问题需要思考:本文章是:高可用问题一、集群分类:二、普通集群1、特征:2、部署普通集群1. 准备三个节点:2.获取cookie3.准备集群配置3、启动集群4、测试1.数据共享测试2.可用性测试三、镜像集群1、特征:2、镜像模式的配置1.exactly模式2.all模式3.nodes模式测试1.数据共享模式:2.优点是:高可用四、仲裁队列1、集群特征2、添加仲裁队列3.Java代码创建仲裁队列4.SpringAMQP连接MQ集群前言:消息队列在使

2022-04-11 21:13:23 2038

原创 微服务23_服务异步通信01:RabbitMQ消息可靠性

微服务23_服务异步通信01:消息可靠性前言:消息队列在使用过程中,面临着很多实际问题需要思考:第一节:消息的可靠性一、生产者消息确认【确保生产者发送成功】1.生产者消息确认引入demo以及开启rabbitMQ1.修改配置2.定义ReturnCallback回调.【消息到达了交换机但是路由过程中失败了】全局唯一3.定义ConfirmCallback.【消息没有到到达交换机】测试:1. 测试消息发送成功:2. 测试:在交换机发送失败:3.测试:在队列发送失败:二、消息持久化(确保MQ的消息持久化)三、消费者消

2022-04-10 17:12:35 1210

原创 微服务19_分布式缓存:Redis:持久化、主从、哨兵、集群

这里写自定义目录标题单节点Redis存在的问题一、持久化解决数据丢失1、RDB1.基础配置2.bgsave主进程和子进程3.总结2、AOF二、主从解决并发问题搭建前需要了解的知识1、搭建主从架构1.步骤2.开启主从关系:在从节点上面连接主节点3.测试 主能读写、从只能读2、主从数据同步原理1.全量同步master如何判断slave是不是第一次来同步数据?2.增量同步3、可以从以下几个方面来优化Redis主从就集群:三、哨兵解决故障恢复1、哨兵的作用和原理1.哨兵的介绍2.服务状态监控3. 选举新的maste

2022-04-05 22:27:58 1189

原创 11【保姆级】-GO语言的struct

【代码】11【保姆级】-GO语言的struct。

2023-11-26 20:40:01 1412

原创 10【保姆级】-GO语言的map

map是key-value数据组构又称为字段或者关联数组。类似其它编程语言的集合在编程中是经常使用到。基本语法var map变量名 map [keytype] valuetypekey 可以是什么类型golang中的map,的 key 可以是很多种类型,比如 bool, 数字,string,指针channel,还可以是只包含前面几个类型的 接口,结构体,数组通常为int、string(其他类型很少使用)

2023-11-26 17:41:32 444

原创 09【保姆级】-GO语言的数组和切片

数组可以存放多个同一类型数据。数组也是一种数据类型,在 Go 中,数组是值类型。// 设置排序顺序数组的首地址 也就是 数组第一个元素的地址。第二个元素的地址是:首地址+数组类型的占用的字节数。fmt.Printf("首地址是:%p,首元素地址是:%p,第二个元素的地址是:%p", &arr, &arr[0], &arr[1])// 首地址是:0xc042076030,首元素地址是:0xc042076030,第二个元素的地址是:0xc042076038切片的英文是 slice。

2023-11-21 22:26:16 460

原创 08【保姆级】-GO语言的函数、包、错误处理

为完成某一功能的程序指令(语句)的集合,称为函数。在Go语言中分为:自定义函数、系统函数。func 函数名(形参列表) (返回值类型列表) {执行语句 return 返回值列表 } 1. 形参列表 : 表示函数的输入 2. 函数中的语句 : 表示为了实现某一功能代码块 3. 函数可以有返回值 , 也可以没有例子: jc := a + breturn c。

2023-11-14 00:38:42 459 2

原创 Goland报错:Cannot resolve symbol ‘XXX‘。一键解决该问题。

Goland报错:Cannot resolve symbol 'XXX'。一键解决该问题。

2023-11-12 01:13:51 767

原创 07【保姆级】-GO语言的程序流程控制【if switch for while 】

Switch语句用于基于不同条件执行不同动作,每一个case分支都是唯一的,从上到下逐一测试,知道匹配为止。switch的执行的流程是,先执行表达式得到值,然后和case的表达式进行比较,如果相等就匹配到,然后执行对应的case的语句块,然后退出switch控制如果switch的表达式的值都没有和任何case的表达式匹配成功,则执行default的语句。执行后退出switch的控制。最后的default语句不是必须的Golang的case后的表达式可以有多个,使用逗号间隔。

2023-11-10 00:30:24 320

原创 06【保姆级】-GO语言的运算符

算数运算符是对数值类型的变量进行运算的,比如加减乘除。在Go程序中实用的非常多。

2023-11-09 02:30:04 268 1

原创 在Go中,goland报错:Error: Cannot find package go_codeXXXX

问题 Error: Cannot find package go_code/解决方法:

2023-11-08 16:52:05 114

原创 05【保姆级】-GO语言的标识符

可以代表任何其他的标识符,但是它对应的值会被忽略(比如:忽略某个返回值)。所以仅能用作于“占位符”来使用,不能作为标识符使用。由26个英文字母大小写、0-9 、_。下划线“_” 本身在Go中是一个特殊的标识符,成为。作为标识符,比如:break/ if等等。Golang中严格区分大小写。

2023-11-07 19:50:55 232

原创 04【保姆级】-GO语言指针

应用类型:变量存储的是一个地址,这个地址对应的空间才真正存储数据(也就是值),内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就成了一个垃圾,由GC来回收。值类型:变量直接存储值,内存通常在栈中分配。

2023-11-07 17:37:09 242

原创 只需两步折叠GoLand的控制台中多余的信息,控制台显示无效内容太多(GOROOT、GOPATH)

goland控制台取消多余的信息【超级简单,只需两步】,无效内容太多。

2023-11-07 11:37:46 207

原创 03【保姆级】-GO语言变量和数据类型和相互转换

任何高级程序语言写程序,变量都是程序的基本组成单位。变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,同样的道理,通过变量名可以访问到变量()Golang 中没有专门的字符类型,如果要存储单个字符(字母),一般使用byte来保存。字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。也就是说对于传统的字符串是由字符组成的,而Go 的字符串不同,它是由字节组成的。

2023-11-06 19:22:31 298

转载 Go语言中%d %v %t %T %c %b 一篇文章分清楚

对每一个类似Printf的函数,都有对应的Print型函数,该函数不接受格式字符串,就效果上等价于对每一个参数都是用verb %v。在所有的扫描函数里,如果一个操作数实现了Scan方法(或者说,它实现了Scanner接口),将会使用该接口为该操作数扫描文本。宽度和精度格式化控制的是Unicode码值的数量(不同于C的printf,它的这两个因数指的是字节的数量)宽度会在输入文本中被使用(%5s表示最多读取5个rune来生成一个字符串),但没有使用精度的语法(没有%5.2f,只有%5f)

2023-11-06 12:40:39 852

原创 02【保姆级】-GO语言开发注意事项(特色重点)

表示:引入一个包,包名 fmt,引入该包后,就可以使用 fmt包的函数,比如: fimt.Println。表示该 hello.go 文件所在的包是 main,在 go 中,每个文件都必须归属于一个包。注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去。用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性;main 是函数名,是一个主函数,即我们程序的入口。func 是一个关键字,表示一个函数。第一种:官方推荐使用行注释。go 文件的后缀是 go。

2023-11-01 23:06:29 720

原创 01【保姆级】-GO语言特点 && 下载安装 && hello

使用一个表达式来形容 Go 语言: Go = C + Python,说明 Go 语言既有 C静态语言程序的运行速度,又能达到 Pvthon 动态语言的快速开发。: 是创建文件的关联的,比如说你勾选了java,如果,以后电脑上的.go 文件都会默认启动idea的方式显示打开。表示:引入一个包,包名 fmt,引入该包后,就可以使用 fmt包的函数,比如: fimt.Println。我把所有的选项解释,都放入下面了,如果不知道怎么选,跟着我来就可以了。main 是函数名,是一个主函数,即我们程序的入口。

2023-11-01 17:58:33 314

原创 【建议收藏】前端使用—VScode如何下载安装和使用(汉化)

指的是用。

2023-09-27 18:39:11 620

原创 SpringBoot整合mybatis-plus 实现增删改查和分页查询

SpringBoot 结合 MP完成增删改查!!!!

2022-10-29 14:38:07 2806

原创 一张张截图教你使用gitee

gitee

2022-08-23 10:58:59 382

原创 Spring的IOC和AOP,学不会Spring的,你看我的文章

大神请绕开,只允许小白看。 看到Spring脑袋疼,你看我文章,包你看会!!

2022-08-22 16:16:03 306

原创 Redis的最佳实践?看完不心动,算我输!!

Redis的最佳实践。 bigKey、慢查询、持久化配置、

2022-06-25 13:05:48 708

原创 redis单机、主从、哨兵、集群模式

单机模式是最简单的,redis启动后,业务调用即可。优点:缺点:在进行启动:查看redis是否启动成功启动开机自动启动redis:建一个系统服务文件:然后重载系统服务:systemctl daemon-reload3、SpringBoot集成Redis 单机模式1.创建demo基于spring Initializr来创建一个springBoot项目我的springBoot版本是:其中我勾选了Spring Data Redis和Lombok引入依赖配置applicatio

2022-06-15 17:13:16 1508 2

转载 java基础面试题

java基础面试题JDK和JRE和JVMInteger与int的区别面向对象的三个基本特征?java数据类型。String不是基本数据类型重载和重写的区别String 类可以继承吗?String和StringBuilder、StringBuffer的区别?== 和 equals 的区别是什么?深拷贝和浅拷贝区别是什么?并发和并行有什么区别?Java 中的 final 关键字有哪些用法?​ static关键字final finally finalize区别java线程几种状态synchronized 和 Lo

2022-05-26 21:36:09 161

原创 redis的实战项目03_set点赞、Zset点赞排序

redis的实战项目03_set点赞、Zset点赞排序一、点赞1、需求:2、实现步骤描述:3、代码业务:二、点赞排行榜1、需求:2、实现步骤描述:3、代码业务:三、所有的业务层代码:用SortedSet进行实现点赞、排序点赞在学习redis中的基本数据类型时,只知道增删改查,并体会不到数据类型的优点和缺点。今天我们通过点赞和点赞排序,体验set和SortedSet的优点。list:底层是链表,查找时需要根据链表遍历查找,所以o(n)set:底层是哈希,所以查找速度非常快。一、点赞1、需求:

2022-05-23 12:48:02 1040

原创 java基础面试题——连环追问HashMap

连环追问HashMap一、HashMap底层数据结构1.HashMap的底层数据结构是什么? 1.7和1.8的区别2.为什么要用红黑树?3.何时会树化?4.何时回退化为链表?5.为什么不直接用树替换成链表6.为什么树化阈值是8,而不是更小呢?二、索引问题7.索引如何计算?8.hashCode 都有了,为什么还要提供hash()方法?为什么二次哈希?9.数组容量为何是2的N次幂?10.hashMap容量不用2的N次幂,行不行三、扩容11.介绍一下put方法流程,1.7和1.8的区别12.加载因子为何默认是0.

2022-05-19 18:24:48 448

原创 java基础面试题——ArrayList底层和LinkedList的区别呢

java基础面试题001—ArrayList底层机制和LinkedList比较一、ArrayList对比LinkedList1、ArrayList2、LinkedList3、自我总结二、ArrayList的扩容机制三、fail-fast 与 fail-safe一、ArrayList对比LinkedList通常在面试时,不会单独问LinkedList而是把ArrayList一起来问,比如说两者进行对比。那么,你认为这样的说法是正确的吗?ArrayList 增删慢、查询快LinkedList 增删

2022-05-19 11:04:56 386

原创 redis的实战项目01_模拟短信登录业务

redis的实战项目01_短信登录一、导入黑马点评项目1. 数据库:2. 单体项目介绍:二、基于session实现登录1、发送短信验证码1.理论流程2.代码操作:2、短信验证码登录、注册1.理论流程2.代码操作:3、校验登录状态1.理论流程2.代码操作:三、集群的session共享问题四、基于redis实现共享session登录一、导入黑马点评项目1. 数据库:⚫ tb_user:用户表⚫ tb_user_info:用户详情表⚫ tb_shop:商户信息表⚫ tb_shop_type:商户类型表

2022-04-24 21:50:06 2621 1

原创 sed: cannot rename /etc/rabbitmq/sedODwfcN: Device or resource busy

sed: cannot rename /etc/rabbitmq/sedODwfcN: Device or resource busy错误演示:下面是我用的镜像版本:正确操作:如何获取镜像呢?问题是:由于RabbitMQ的镜像版本不同,导致在运行失败,查看日志是:sed: cannot rename /etc/rabbitmq/sedODwfcN: Device or resource busy错误演示:下面是我用的镜像版本:docker run -d --net mq-net \-v ${PWD}

2022-04-11 17:19:40 4021 3

原创 微服务24_服务异步通信03:RabbitMQ消息堆积解决方法:惰性队列

微服务24_服务异步通信03:消息堆积解决方法:惰性队列总结一、消息堆积问题1、什么是消息堆积问题:二、惰性队列来解决消息堆积1.惰性队列2、开启惰性队列1.一个正在运行的普通队列,变成惰性队列2. 申明一个全新的队列,配置为惰性队列3、测试:总结消息堆积问题的解决方案?队列上绑定多个消费者,提高消费速度使用惰性队列,可以再mq中保存更多消息惰性队列的优点有哪些?基于磁盘存储,消息上限高没有间歇性的page-out,性能比较稳定惰性队列的缺点有哪些?基于磁盘存储,消息时效性会降低

2022-04-11 11:24:33 1943 1

原创 微服务24_服务异步通信02:RabbitMQ延迟消息的问题-DelayExchange插件

微服务24_服务异步通信02:延迟消息的问题前言:第二节:死信交换机:1、初始死信交换机.利用死信交换机接收死信(拓展)2、TTL3、延迟队列:1.什么是延迟队列:2.安装DelayExchange插件1. 上传插件:2. 安装插件:3.使用插件:3.DelayExchange原理4.使用DelayExchange1)声明DelayExchange交换机2)发送消息5. 测试:解决在交换机中报错:6.总结利用springAMQP进行收发消息是最基本的功能,因为在收发消息过程当中,会遇到很多问题需要解决。

2022-04-10 22:38:05 938

原创 微服务22_多级缓存03:Canal缓存和数据保持一致性

微服务21_多级缓存03:缓存同步一、缓存同步策略介绍Canal二、安装Canal1.开启MySQL主从--》开启binlog2.开启MySQL主从--》设置用户权限3.安装Canal-》创建网络4.安装Canal-》上传.tar文件,load解压5.运行容器三、监听Canal1.引入依赖:2.编写配置:3.修改Item实体类4.编写监听器 (Redis/ jvm缓存同步)测试:大多数情况下,浏览器查询到的都是缓存数据,如果缓存数据与数据库数据存在较大差异,可能会产生比较严重的后果。所以我们必须保证数据

2022-04-08 21:26:45 2514

原创 微服务21_多级缓存02:OpenResty/Nginx/Redis多级缓存

这里写自定义目录标题一、安装OpenResty1、安装开发库、仓库、安装OpenResty2、配置环境变量3.启动和运行4.备注二、OpenResty快速入门1、反向代理流程2、OpenResty监听请求3、编写item.lua三、请求参数处理1.获取参数的API2.获取参数并返回。Openresy获取请求id,拼接到返回结果中四、查询Tomcat五、Redis缓存预热六、查询Redis缓存七、Nginx本地缓存一、安装OpenRestyOpenResty是一个基于Nginx的高性能Web平台,用户方便

2022-04-08 17:23:37 3911 2

原创 微服务20_多级缓存01:JVM进程缓存

微服务20_多级缓存01:JVM进程缓存前言:什么是多级缓存?1、传统缓存的问题:2、多级缓存方案一、JVM进程缓存(Tomcat内部编写进程缓存)1、导入商品案例1.安装mysql2.导入Demo3. 商品查询页面 来调用controller的接口4.反向代理的配置:2、初始Caffeine1.了解本地缓存和分布式缓存3、实现进程缓存前言:什么是多级缓存?缓存的作用是减轻数据库的压力,缩短服务相应的时间,从而提高整个并发的能力,Redis单节并发以及很高了,但是依然有上限,随着互联网的发展,用户体量越

2022-04-06 21:22:31 4182

原创 微服务18_分布式事务02:Seatda:四种模式XA、AT、TCC、SAGA

微服务18_分布式事务02:Seatda:四种模式XA、AT、TCC、SAGA一、XA模式1、seata的XA模式2、具体操作:二、AT模式(用的最多)1、AT模式的原理2、AT模式的脏写模式3、实现AT模式三、TCC模式(性能好、非事务DB可用redis)1、TCC模式原理总结2、例子:利用TCC实现分布式事务具体的service业务逻辑四、SAGA模式XA和AT都能实现一致性和隔离性:XA是强一致性AT是最终一致性。XA是第一阶段不提交,基于事务本身特性完成隔离AT是加了全局锁,锁定资源去隔

2022-04-04 21:47:54 2624

原创 微服务17_分布式事务01:理论基础以及认识Seatda

微服务17_分布式事务01:理论基础以及认识Seatda一、分布式服务的事务问题1.什么是事务2.分布式服务的案例3.进行演示分布式事务问题:4.启动项目,并启动Nacos5.分析为什么没有全部回滚6.什么是分布式事务二、理论基础1、CAP定理2、BASE理论三、一、分布式服务的事务问题1.什么是事务所有事务都要满足ACID原则:原子性:事务中的所有操作,要么全部成功、要么全部失败一致性:要保证数据库内部完整性约束、声明性约束隔离性:对统一资源操作的事务不能同时发生持久性:对数据库做的一切

2022-04-04 15:27:25 532

原创 微服务16_微服务保护04:sentinel授权规则及自定义异常结果

微服务16_微服务保护04:sentinel授权规则及自定义异常结果一、授权规则1.基本规则:白名单和黑名单2.如何获取origin3.给网关添加请求头4.配置授权规则二、自定义异常结果1.异常类型:2.自定义异常处理三、规则持久化1.规则管理模式1.pull模式2.push模式学习:Sentinel 规则持久化1、修改order-service服务1.引入依赖2.配置nacos地址2、### .启动一、授权规则授权规则可以对请求方来源做判断和控制1.基本规则:白名单和黑名单白名单:来源(orig

2022-04-03 13:02:07 295

云E办的数据库文件,SQL文件

云E办的数据库文件,SQL文件

2022-11-25

Chrom进行显示JSON数据

Chrom进行显示JSON数据哈

2022-01-16

Chrom进行显示JSON数据, Java后端开发必备

Chrom进行显示JSON数据哈

2022-01-16

云E办项目-前端整体代码。

云E办项目-前端整体代码。vue/vue-cli/vuex

2022-01-11

空空如也

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

TA关注的人

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