- 博客(169)
- 收藏
- 关注
原创 RabbitMQ七种工作模式之 RPC通信模式, 发布确认模式
相⽐于单独确认策略, 批量确认极⼤地提升了confirm的效率, 缺点是出现Basic.Nack或者超时时, 我们不清楚具体哪条消息出了问题. 客⼾端需要将这⼀批次的消息全部重发, 这会带来明显的重复消息数量, 当消息经常丢失时,批量确认的性能应该是不升反降的。异步confirm⽅法的编程实现最为复杂. Channel 接⼝提供了⼀个⽅法addConfirmListener. 这个⽅法可以添加ConfirmListener 回调接⼝.使⽤发送确认机制, 必须要信道设置成confirm(确认)模式。
2024-12-09 11:28:44 976
原创 RabbitMQ七种工作模式之简单模式, 工作队列模式, 发布订阅模式, 路由模式, 通配符模式
RabbitMQ 共提供了7种⼯作模式, 进⾏消息传递。
2024-12-06 11:47:27 1209
原创 RabbitMQ快速入门
Consumer 用于定义消息消费者的行为. 当我们需要从RabbitMQ接收消息时, 需要提供⼀个实现了Consumer 接口的对象.我们现在要编写的事简单的应用场景, 使用内置交换机即可, 此时, 生产者发送的消息会根据队列名直接路由到对应的队列, 无需关心交换机。在这个方法中, 我们可以定义如何处理接收到的消息, 例如打印消息内容, 处理业务逻辑或者将消息。每个虚拟机会有几个内置的交换机, 内置交换机的名称是空字符串(“”)目前只能看到打印一条数据, 因为还没等打印成功, 资源就被释放了。
2024-12-04 16:55:18 1215
原创 RabbitMQ核心概念及工作流程 + AMQP
文章目录一. RabbitMQ核心概念1. Producer, Consumer, Broker2. Connection和Channel3. Virtual host4. Queue5. Exchange二. RabbitMQ的工作流程三. AMQP四. web界面操作对用户操作对虚拟机操作一. RabbitMQ核心概念RabbitMQ是⼀个消息中间件, 也是⼀个⽣产者消费者模型. 它负责接收, 存储并转发消息1. Producer, Consumer, BrokerProducer: ⽣产者,
2024-12-04 15:04:06 1332
原创 RabbitMQ介绍及安装
Rabbit, 兔⼦的意思 互联⽹⾏业很多公司, 都喜欢⽤动物命名产品, 或者作为公司的logo, 吉祥物. ⽐如: 腾讯的企鹅, 京东的 狗, 美团的袋⿏, 携程的海豚,阿⾥就更多了, 蚂蚁, ⻜猪,天猫,菜⻦, 闲⻥, 盒⻢…Rabbit 也是⼀个公司名. MQ ( message queue ) 消息队列 的意思 , RabbitMQ 是 Rabbit企业下的⼀个消息队列产品.是消息(message) ⽽已. 消息可以⾮常简单,⽐如只包含⽂本字符串, JSON等,也可以很复杂, ⽐如内嵌对。
2024-12-04 11:08:35 852
原创 spring操作redis
RedisCallback是一个函数式接口, 相当于一个回调函数, 可以在回调里, 写redis命令, 这个回调就会被RedisTemplate内部进行执行。StringRedisTemplate是RedisTemplate的子类, 专门用来处理文本数据的。execute要求回调方法中必须写return语句, 返回什么, 就会作为execute的返回值。此处的redisTemplate是把操作的Redis方法, 分成了几个类别来组织的。前面使用jedis, 是通过jedis对象里的方法操作redis的。
2024-12-03 17:19:59 617
原创 java 操作 redis
之前介绍的是各种redis的基本操作/命令, 都是在redis命令行客户端, 手动执行的但是在日常开发中, 更多的是使用redis的api, 来实现定制化的redis客户端程序, 进一步操作redis服务器redis服务器在官网公开了使用的协议RESP, 任何一个第三方都可以通过上述协议, 实现一个和redis服务器通信的客户端程序已经有很多大佬做好了库, 可以让我们直接调用(不必关注redis协议的细节)在java生态中, 封装了RESP协议, 实现的redis客户端有很多, 我们主要使用。
2024-12-03 10:25:56 953
原创 redis数据库管理
redis中的database是现成的, 用户不能够自己创建新的数据库, 也不能删除已有的数据库默认redis提供了16个数据库, 标号0~15这16个数据库中的数据是隔离的, 相互之间不会有影响默认使用的数据库是0号。
2024-12-02 20:55:41 173
原创 redis渐进式遍历
keys * , 一次性把整个redis中所有的key都获取到, 这个操作比较危险, 可能会阻塞redis服务器通过渐进式遍历, 就可以做到, 既能够获取到所有的key, 又不会卡死服务器渐进式遍历, 不是一个命令把所有key都拿到, 而是每执行一次命令, 只获取到其中的一小部分, 保证当前这次操作不会太卡, 想要得到所有的key, 就需要进行多次遍历, 多次执行渐进式遍历命令, 所用到的思想就是化整为零渐进式遍历其实是一组命令, 这组命令的使用方法是一样的。
2024-12-02 20:43:41 311
原创 redis针对hash的命令 及 使用场景
可以将每个用户的 id 定义为键后缀,多对 field-value 对应用户的各个属性。设置 hash 中指定的字段(field)的值(value)在字段不存在的情况下,设置 hash 中的字段和值。将 hash 中字段对应的数值添加指定的值。获取 hash 中的所有字段以及对应的值。判断 hash 中是否有指定的字段。⼀次获取 hash 中多个字段的值。获取 hash 中的所有字段的个数。获取 hash 中指定字段的值。获取 hash 中的所有字段。获取 hash 中的所有的值。
2024-12-02 19:56:58 421
原创 redis针对string的命令及应用场景
例如MySQL 的数据库名为 vs,⽤⼾表名为 user_info,那么对应的键可以使⽤"vs:user_info:6379"、“vs:user_info:6379:name” 来表⽰,如果当前 Redis 只会被⼀个业务使⽤,可以省略业务名 “vs:”。如果key不存在, 则让新的value覆盖旧的value, 可能回盖面原来的数据类型, 原来的key的生存时间也会失效。如果对应的 key 不存在或者对应的数据类型不是 string,返回 nil。如果对应的值是负数,则视为减去对应的值。
2024-12-02 14:09:01 765
原创 redis核心命令全局命令 + redis 常见的数据结构 + redis单线程模型
如果redis作为缓存, redis中存的是热点数据, 全量数据是在mysql中存着, 那么redis使用del, 删除几个key, 一般来说问题不大, 相比之下, 如果是mysql数据, 哪怕误删了一个数据, 都可能是影响很大的。惰性删除: 假设key已经过期, 但暂时还没有删除, 后面如果有一次访问, 正好用好这个key, 于是这个访问就会让redis服务器触发删除key的操作, 同时再返回一个nil。给指定的key设置过期时间, 单位是秒, key存活超出这个指定的值, 就会被自动删除。
2024-11-29 12:24:52 969
原创 认识redis 及 Ubuntu安装redis
redis 是在内存中存储数据的中间件, 用在分布式系统。6. 使用redis自带的客户端连接服务器。使用apt命令搜索redis相关软件包。ctrl + d 退出redis客户端。使用apt命令安装redis。安装完成后, 自动启动。为什么redis快?先切换到root用户。
2024-11-28 17:59:48 830
原创 动态规划 之 回文子串 算法专题
字符串被分成dp[0][i - 1] && dp[i][j] && dp[j + 1][n - 1] 三部分。= s[j] : 说明不是ij都选, 只选择其中一个, 求最大值。3.其余情况, 要找i + 1 和 j - 1 的最长回文子序列 + 2。dp[i][j] 表示 (i, j)字符串中, 最长回文子序列。用i j 表示中间子串的开始和结束位置。2.i +1 = j, 最长为2。1.i == j , 最长为1。无需初始化, 不会越界。从左往右, 从下往上。
2024-11-20 10:34:28 490
原创 二叉树相关OJ题
3. 如果上述都不满足, 则判断两节点的数值是否相同, 如果不相同,返回false。1. 如果一个节点为空, 一个节点不为空, 那么说明不相同,返回false。4. 上述条件都不满足, 即两节点相同, 则递归判断左节点和右结点。2. 如果两个结点都为空, 说明此时两个节点相同, 返回true。判断两棵树是否相同, 需要两颗树同时遍历结点, 并分析结点的情况。8. 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。9. 根据一棵树的前序遍历与中序遍历构造二叉树。14. 二叉树后序非递归遍历实现。
2024-11-19 19:26:54 315
原创 动态规划 之 子序列系列 算法专题
dp[i] 表示以i位置为结尾, 最长斐波那契子序列的长度, 这样我们并不知道前面两个数是谁, 所以我们可以固定两个位置, 以i和j位置为结尾, 这样就可以找到k位置。前置处理: 为了保证使用动态规划, 填表顺序是从左往右, 所以要先对数组进行排序, 只需要根据第一个数进行排序即可, 保证选择i位置时, 不会选到i后面的位置。如果找到k位置, 并且这个位置在i, j的前面, 那么dp[i][j] = dp[k][i] + 1。因为要频繁查找k的位置, 可以将arr中下标和值的映射关系放在hash表中。
2024-11-15 12:01:57 1183
原创 动态规划 之 子数组 算法专题
存在环形, 我们要找收尾相接的最大值, 相当于是找中间的最小值, 最后再用sum - 最小值就是最大值。但是如果g[i - 1] == 0, 那么说明前面的数乘积不是负数, 此时长度应该为0。1.nums[i]为负数, 那么就需要找前面为正数的最长数组长度f[i - 1]2.nums[i]为正数, 那么就需要找前面为负数的最长数组长度g[i - 1]f[i] 表示以i位置结尾, 最后呈现"上升"状态下的最大湍流子数组的长度。g[i] 表示以i位置结尾, 最后呈现"下降"状态下的最大湍流子数组的长度。
2024-11-13 09:17:05 1094
原创 动态规划 之 简单多状态 dp 问题 算法专题
2.如果处于"可交易"状态, 那么第i - 1天, 可能处于"可交易"状态(i - 1天之前就卖了, 第i天还没买, 等于啥也没干), 可能处于"冷冻期"状态(i - 1天卖了, 第i天还没买, 等于啥也没干), 由于要最大利润, 对两次状态的结果取最大值。2.如果i选择蓝色, dp[i][0], 那么dp[i - 1]只能选择[1][2], 要的是最小花费, 所以。3.如果i选择红色, dp[i][0], 那么dp[i - 1]只能选择[1][2], 要的是最小花费, 所以。
2024-11-11 10:13:29 925
原创 动态规划 之 路径问题 算法专题
初始化使用优化的思想进行初始化, 添加虚拟节点在第一行和第一列的位置填表时会发生越界所以需要添加一行一列我们只需要像上表一样初始化虚拟节点, 就可以正确的进行填表填表顺序从上往下 从左往右返回值返回dp[m][n]
2024-11-06 20:58:41 1006
原创 动态规划 之 斐波那契数列模型 算法专题
状态表示是什么?dp表里面的值锁表示的含义状态表示怎么来的?如果初始化和填表的逻辑类似, 我们可以把初始化塞到填表逻辑中做法:dp多开一个空间, 将之前的dp表整体向后移动, 前面的一个位置称为虚拟节点注意:1.虚拟结点里面的值, 要保证是正确的 一般情况下设置为0, 但还是要具体分析2.下标的映射关系。
2024-11-06 18:07:23 799
原创 递归 搜索 回溯 算法专题
如果每个分支只有两个, 即是二叉树 就用类似二叉树遍历的方法如果每个分支有多个, 即是多叉树, 就是用循环, 循环的次数为分叉数层数用递归出口来规定记录的结果是int类型, 放在参数中不需要考虑结果的恢复现场, 但是回溯要恢复记录的结果是一个数组, 放在全局变量和参数都可以, 但是都需要考虑恢复现场。
2024-11-04 19:56:01 483
原创 Linux基本使用和程序部署
用户名为云服务器的用户名, 密码是我们改过的密码。经过这么多年的发展,Linux已经成为。名称随便, 主机号为云服务器的公网IP。密码强度设为2, 其他选择Y。(设置的数据库密码)’;
2024-10-18 15:06:03 456
原创 [spring]spring事务和事务传播机制
事务传播机制就是:多个事务⽅法存在调⽤关系时,事务是如何在这些⽅法间进⾏传播的事务隔离级别是解决多个书屋同时调用一个数据库的问题事务传播机制解决的是一个事务在多个节点(方法)中的传递问题。
2024-10-11 15:59:03 765
原创 [spring]SpringBoot拦截器 统一数据返回格式 统一异常处理
例如, 图书管理系统, 在访问图书list页面之前, 需要先进行登录, 如果没登录, 就需要进行强制跳转页面那么我们就需要在每个接口中都进行判断是否进行了登录, 像这样重复的代码, SpringBoot就封装成了一个框架定义一个接口类, 实现HandlerInterceptor接口, 根据需要重写里面的方法@Slf4j@Component@Overridelog.info("目标方法执行前执行");@Overridelog.info("目标方法执行后执行");@Override。
2024-09-28 14:11:03 1314
原创 [spring]用MyBatis XML操作数据库 其他查询操作 数据库连接池 mysql企业开发规范 动态sql
-需要修改到上述mapper接口所对应的路径-->> < mapper namespace = " com.bite.mybatis.mapper.UserInfoXmlMapper " > > < mapper namespace = " com.bite.mybatis.mapper.UserInfoXmlMapper " > >
2024-09-24 15:33:49 940
原创 [spring]MyBatis介绍 及 用MyBatis注解操作简单数据库
简单来说 MyBatis 是更简单完成程序和数据库交互的框架,也就是更简单的操作和读取数据库⼯具--需要修改到上述mapper接口所对应的路径-->> < mapper namespace = " com.bite.mybatis.mapper.UserInfoXmlMapper " > >
2024-09-23 20:57:02 954
原创 [spring]springboot日志
得到日志对象:需要使用日志工厂LoggerFactory注意:Logger 对象是属于 org.slf4j 包下的打印日志:使用info()SLF4J不同于其他⽇志框架, 它不是⼀个真正的⽇志实现, ⽽是⼀个抽象层, 对⽇志框架制定的⼀种规范,标准, 接⼝. 所有SLF4J并不能独⽴使⽤, 需要和具体的⽇志框架配合使⽤SLF4J是⻔⾯模式的典型应⽤⻔⾯模式定义⻔⾯模式(Facade Pattern)⼜称为外观模式, 提供了⼀个统⼀的接⼝, ⽤来访问⼦系统中的⼀群接⼝, 其主要特征是定义了⼀个⾼
2024-09-23 16:09:37 1185
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人