十三: redis–发布订阅模式使用及场景 发布订阅模式一般用来做广播,发布者发送消息到指定的通道,订阅者订阅指定的通道, 当发布者发送了新的消息,订阅者可以马上收到消息,一个通道可以有多个订阅者,后面订阅的 订阅者不能收到之前的消息,因为发布订阅不做消息持久化以及ack确认消息消费。所以如果 做消息队列是不能满足生产消息不能丢失的情况,已经吞吐率。 命令 publish 解释 发送消息到指定通道 返回的结果表示有少个订阅者 用法 publish channelName msg 示例
2024-11-30如果您想要用多对多关系,您需要定义一个用于关系的辅助表。对于这个辅助表, 强烈建议 不 使用模型,而是采用一个实际的表: tags = db.Table('tags', db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')), db.Column('page_id', db.Integer, db.ForeignKey('page.id')) ) class Page(db.Model): id = db.Col
2024-11-30策略模式在 Spring Boot 框架中的应用 在 Spring Boot 中,策略模式的实现通常借助 依赖注入 来动态选择具体的策略,这使得我们可以轻松地扩展新的策略类,而不需要修改现有的代码。 Spring Boot 中策略模式的应用场景:支付系统 场景描述: 假设我们在一个电商系统中实现多种支付方式(如支付宝、微信支付、信用卡等)。每种支付方式的处理逻辑不同,我们希望能在用户选择支付方式时动态选择对应的支付策略。这里可以使用策略模式,将不同的支付逻辑封装在独立的策略类中,并在运行
2024-11-301. Spring MVC 介绍 1.1 Spring MVC 概述 Spring MVC(Model-View-Controller)是 Spring 框架中用于构建 Web 应用的模块,它实现了基于模型-视图-控制器(MVC)设计模式的 Web 应用程序开发。MVC 模式通过将应用逻辑、数据和界面分开,促进应用的分层设计: Model(模型):封装了应用的数据和业务逻辑。View(视图):负责将模型数据展示给用户。Controller(控制器):负责接收用户请求,调用服务处理数据,并将结果返
2024-11-30Tomcat的部署 Window -> Preferences -> Servers -> 选择或添加Tomcat
2024-11-30前言 CountDownLatch是多线程中一个比较重要的概念,它可以使得一个或多个线程等待其他线程执行完毕之后再执行。它内部有一个计数器和一个阻塞队列,每当一个线程调用countDown()方法后,计数器的值减少1。当计数器的值不为0时,调用await()方法的线程将会被加入到阻塞队列,一直阻塞到计数器的值为0。 常用方法 public class CountDownLatch { //构造一个值为count的计数器 public CountDownLatch(int co
2024-11-30Overview 内置输出(官方以后可能会弃用) printprintlnfmt fmt.Print --输出fmt.Println --输出并换行fmt.Printf --格式化输出fmt.Sprintf --字符串格式化,可以将一串占位符内容格式化为一段内容输出 Description 1)fmt.Print package main import "fmt" func main() { fmt.Print("Hello") fmt.Print("Hello") }
2024-11-30报错 :org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 2 问题原因:yml文件的编码格式有问题。 解决方案: 1、去掉yml文件中的中文注释,即可正常启动。(不推荐) 2、修改配置文件项的编码格式,然后重新编译,再即可。如下图 第一种:改项目编码格式为uft-8
2024-11-30HashSet 实现HashSet var memo = make(map[string]struct{}) 我们主要使用的是Golang中的Map的键不能重复,但是map的键不能单独存在,所以我们加了一个struct{} 作为值,你也可以使用int作为值,到时候赋值为1证明键存在即可。 判断HashSet是否存在某个键 value, ok := memo[key] //如果存在这个键 if ok { } else {//不存在键 } HashMap m = make(ma
2024-11-30Go 语言中,包是代码的组织单位,可以由多个文件组成。这意味着在同一个包中的不同文件中,可以共享变量、函数和其他的标识符。需要注意的是,这些变量必须在使用之前进行声明。一般情况下,可以在包级别的变量声明中定义变量,这样它们就可以在包中的所有文件中使用。这些变量可以在不同的文件中进行赋值和修改。 两个go文件test.go和struct.go均位于main包中,在test.go文件中调用struct.go中定义的结构体tes 使用go run src/main/test.go报错结构体未定
2024-11-30