Java
未读消息可靠性问题
以支付服务为例:当用户支付后会进行余额的扣减,接着去更新支付状态,最后去发送消息通知给交易服务进行更新订单状态。
但是在发送消息会存在以下问题:
当支付服务(发送者)发送消息时,由于网络等问题,导致消息丢失,就发送正常进行交易服务的处理。
当消息代理(MQ)发送消息给交易服务也会存在消息丢失的风险。
当信息能正常发送时,但是交易服务(消费者)本身宕机也会导致更新订单状态失败。
解决方案:
发送者的可靠性
MQ的可靠性
消费者的可靠性
延迟消息
发送者的可靠性发送者重连
有时候由于网络的波动,可能会出现发送者连接MQ失败的情况。通过配置我们可以开启失败后后的重连机制。
为了解决这个问题,SpringAMQP提供的消息发送时的重试机制。即:当RabbitTemplate与MQ连接超时后,多次重试。
修改publisher模块的application.yaml文件,添加下面的内容:
123456789spring: rabbitmq: connection-timeout: 1s # 设置MQ的连接超时时间 template: re ...
黑马商城作为一个电商项目,商品的搜索肯定是访问频率最高的页面之一。目前搜索功能是基于数据库的模糊搜索来实现的,存在很多问题。
首先,查询效率较低。
由于数据库模糊查询不走索引,在数据量较大的时候,查询性能很差。黑马商城的商品表中仅仅有不到9万条数据,基于数据库查询时,搜索接口的表现如图:
改为基于搜索引擎后,查询表现如下:
需要注意的是,数据库模糊查询随着表数据量的增多,查询性能的下降会非常明显,而搜索引擎的性能则不会随着数据增多而下降太多。目前仅10万不到的数据量差距就如此明显,如果数据量达到百万、千万、甚至上亿级别,这个性能差距会非常夸张。
其次,功能单一
数据库的模糊搜索功能单一,匹配条件非常苛刻,必须恰好包含用户搜索的关键字。而在搜索引擎中,用户输入出现个别错字,或者用拼音搜索、同义词搜索都能正确匹配到数据。
综上,在面临海量数据的搜索,或者有一些复杂搜索需求的时候,推荐使用专门的搜索引擎来实现搜索功能。
目前全球的搜索引擎技术排名如下:
排名第一的就是我们今天要学习的elasticsearch.
elasticsearch是一款非常强大的开源搜索引擎,支持的功能非常多 ...
在昨天的学习中,我们已经导入了大量数据到elasticsearch中,实现了商品数据的存储。不过查询商品数据时依然采用的是根据id查询,而非模糊搜索。
所以今天,我们来研究下elasticsearch的数据搜索功能。Elasticsearch提供了基于JSON的DSL(Domain Specific Language)语句来定义查询条件,其JavaAPI就是在组织DSL条件。
因此,我们先学习DSL的查询语法,然后再基于DSL来对照学习JavaAPI,就会事半功倍。
DSL查询
Elasticsearch的查询可以分为两大类:
叶子查询(Leaf query clauses):一般是在特定的字段里查询特定值,属于简单查询,很少单独使用。
复合查询(Compound query clauses):以逻辑方式组合多个叶子查询或者更改叶子查询的行为方式。
快速入门
我们依然在Kibana的DevTools中学习查询的DSL语法。首先来看查询的语法结构:
12345678GET /{索引库名}/_search{"query": ...
Redis入门
启动Redis服务-服务端:双击Redis目录下redis-server.exe文件。
客户端:双击Redis目录下redis-cli.exe文件
Redis简介
Redis是一个基于==内存==的key-value结构数据库。
基于内存存储,读写性能高
单线程,每个命令具备原子性
支持数据持久化(一段时间后会将数据存储到磁盘中)
支持多语言客户端(java,python…)
社会存储热点数据(热点商品,资讯,新闻)
企业应用广泛
Redis数据类型
5中常用数据类型介绍
Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型
字符串String:普通字符串,Redis中最简单的数据类型。
哈希hash:也叫散列,类似于java中的HashMap结构。
列表list:按照差顺序排序,可以有触发元素,类似于java中linkedList。
集合set:无序集合,没有重复元素,类似于java中的HashSet。
有序集合sorted set/zset:集 ...
登录短信登录-基于Session
集群的session共享问题
多台Tomcat并不共享session存储空间,当请求切换到不同Tomcat服务时导致数据丢失的问题。
session的替代方案应该满足:数据共享,内存存储,key、value结构
基于Redis实现共享session登录
以手机号为key存储验证码-String结构
将对象的每个字段独立存储,可以针对单个字段做crud,并且内存占用更少。——Hash类型。以随机Token为key存储用户数据。
以随机Token为key获取用户数据
123456789101112131415161718192021222324252627282930313233343536public String login(LoginFormDTO loginForm, HttpSession session) { // 校验手机号 String phone = loginForm.getPhone(); if (RegexUtils.isPhoneInvalid(phone)) { ...
基础用命令行窗口连接MySQL数据库1234mysql -h 主机名 -p 端 -u 用户名 -p 密码# 登陆前保证服务启动net stop mysqlnet start mysql
使用指令创建数据库1234create database 数据库名 #使用指令创建数据库drop database 数据库名 #使用指令删除数据库#创建一个使用utf-8字符集的数据库create database 数据库名 character set utf-8
数据库备份恢复操作
12345678910#显示数据库语句show databases;#显示接口创建语句show create database 数据库名#备份数据库(在DOS执行)mysql -u用户名 -p 密码 -b 数据库1,数据库2>文件名.sql#恢复数据库source 文件名.sql#备份库的表mysqldump -u 用户名 -p 密码 数据库 表1,表2 > d://文件名.sql
数据类型
char(n) 长度为 $\mathrm{n}$ 的字符型
VARCHAR(n) 最大长度为 $\mathrm ...
Java
未读Spring Ai官网
文本输出
在pom.xml中引入依赖
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven. ...
起步操作系统的概念
操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件
操作系统是系统资源的管理者
向上层提供方便易用的服务
是最接近硬件的一层软件
系统资源的管理者
提供的功能
处理机管理
存储器管理
文件管理
设备管理
目标:安全,高效
执行一个程序前需要将该程序放到内存中,才能被cpu处理
向上层提供方便易用的服务
最接近硬件的层次
操作系统对硬件技巧的拓展:将CPU,内存,磁盘,显示器,键盘等硬件合理地组织起来,让各种硬件能够相互协调配合,实现更多更复杂的功能。
操作系统的发展与分类
手工操作阶段:用户独占全机,人机速度矛盾导致资源利用率极低。
批处理阶段——单道批处理系统:引入脱机输入、输出技术,并有监督程序否则控制作业的输入、输出。
优点:缓解了一定程度的人机速度矛盾,资源利用率有所提升。
缺点:内存中仅能有遇到程序运行,但是CPU有大量的时间是在空闲等待I/O完成。
多道批处理系统:每次往内存中读入多道程序,支持 ...
Electron官网地址
Electron简介Electron是一个使用HTML、css和JavaScript构建跨平台桌面应用程序的框架
前端技术
Electron嵌入了Chromium和Node.js,使web开发人员能够创建桌面应用程序。
跨平台
Electron应用程序与macOS,Windows和Linux兼容,可在所有支持的架构的三个平台上运行。
开源
Electron是一个开源项目,由OpenJS基金会和一个活跃的贡献者社区维护。
开发环境
Node.js
nvm
查看本机已安装版本列表: nvm list
查看当前可用版本列表: nvm list available
安装指定版本: nvm install <版本号>
切换指定版本: nvm use <版本>
卸载指定版本: nvm uninstall <版本号>
更多详情:point_right:
构建Electron工程方法一:Quick Start
官网推荐
将项目克隆到本地
安装依赖:npm i
启动程序:npm run start
方法二:Electron ...
uni-app 基础创建 uni-app 项目方式
uni-app 支持两种方式创建项目:
通过 HBuilderX 创建(需安装 HBuilderX 编辑器)
通过命令行创建(需安装 NodeJS 环境)
HBuilderX 创建 uni-app 项目创建步骤
1.下载安装 HbuilderX 编辑器
2.通过 HbuilderX 创建 uni-app vue3 项目
3.安装 uni-app vue3 编译器插件
4.编译成微信小程序端代码
5.开启服务端口
小技巧分享:模拟器窗口分离和置顶
HBuildeX 和 微信开发者工具 关系
tip 温馨提示HBuildeX 和 uni-app 都属于 DCloud 公司的产品。
pages.json 和 tabBar 案例目录结构
我们先来认识 uni-app 项目的目录结构。
1234567891011├─pages 业务页面文件存放的目录│ └─index│ └─index.vue index页面├─static 存放应用引用的本地静态资源的目录(注意 ...