SpringBoot | 大新闻项目后端(redis优化登录)

该项目的前篇内容的使用jwt令牌实现登录认证,使用Md5加密实现注册,在上一篇:http://t.csdnimg.cn/vn3rB 该篇主要内容:redis优化登录和ThreadLocal提供线程局部变量,以及该大新闻项目的主要代码。 redis优化登录 其实在前面项目中的登录,有一个令牌机制的bug,就是在你修改密码后,原来密码的登录进去的token,还是可以使用的,旧令牌并没有失效,这会造成用户在修改密码后,但是原来密码登录进去的页面仍然可以正常访问,有很大的安全隐患。 所以使用redis来解决这个问题 令牌主动失效机制 登录成功后,给浏览器响应令牌的同时,把该令牌存储到 redis 中LoginInterceptor 拦截器中,需要验证浏览器携带的令牌,并同时需要获取到 redis 中存储的与之相同的令牌当用户修改密码成功后,删除 redis 中存储的旧令牌 redis的测试代码: package com.xu; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; import java.util.concurrent.TimeUnit; @SpringBootTest //如果在测试类上添加了这个注释,那么将来单元测试方法执行之前,会先初始化Spring容器 public class RedisTest { @Autowired private StringRedisTemplate stringRedisTemplate; @Test public void testSet(){ //让redis中存储一个键值对 StringRedisTemplate ValueOperations<String, String> operations = stringRedisTemplate.opsForValue(); operations.set("username","zhangsan"); operations.set("id","1",15, TimeUnit.SECONDS); } @Test public void testGet(){ ValueOperations<String, String> operations = stringRedisTemplate.opsForValue(); System.out.println(operations.get("username")); } } 运行效果: 其实里面的id是设置了失效的时间,所以在超出时间的范围外,则get不到id的值。 在整个项目的代码中,redis的使用也是类似:

vue3使用pinia中的actions,需要调用接口的话

actions,需要调用接口的话,假如页面想要调用actions中的方法获取数据, 必须使用try catch async await 进行包裹,详情看下面代码 import {defineStore} from 'pinia' import {reqCode,reqUserLogin} from '../../api/hospital/index' import {PhoneTy} from '../../api/hospital/type' const useUserStore = defineStore('User',{ state:()=>{ return{ visiable: false,//用于控制登录组件的dialog显示与隐藏 code: '',//存储用户的验证码, //存储用户的信息 userInfo:JSON.parse(localStorage.getItem('USERINFO') as string) || {} } }, actions:{ //获取短信验证 async getCode(value:string){ const r:PhoneTy = await reqCode(value) as any if(r.code == 200){ this.code = r.data console.log(this.code,'this.code1') } console.log(this.code,'this.code2') }, //登陆用户 async reqUserLogin(value:object){ const r = await reqUserLogin(value) this.userInfo = r.data localStorage.setItem('USERINFO',JSON.stringify(this.userInfo)) console.

Qt使用sqlite数据库及项目实战

一.sqlite使用介绍 在Qt中使用SQLite数据库非常简单,SQLite是一个轻量级的嵌入式数据库,不需要单独的数据库服务器,完全使用本地文件来存储数据。 当在Qt中使用SQLite数据库时,需要涉及到一些SQL语句以及Qt中的相关函数,接下来我将从头开始介绍所有涉及的语句以及相应的解释。 1. 连接到数据库:addDatabase 在Qt中,你可以使用QSqlDatabase来连接数据库。首先需要添加数据库类型,然后指定数据库的名称: QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("mydatabase.db"); if(!db.open()) { qDebug() << "无法连接到数据库"; return; } 在这段代码中,我们首先创建了一个名为mydatabase.db的SQLite数据库,然后通过open()函数来打开数据库连接。如果连接失败,将会输出错误信息。 2. 创建表:CREATE TABLE 一般来说,你需要在数据库中创建表来存储数据。这可以通过执行CREATE TABLE语句来实现: QSqlQuery query; query.exec("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)"); 这里我们使用exec()函数执行SQL语句,创建了一个名为users的表,包含id、name和age三个列。 3. 插入数据:INSERT 当需要在表中插入新的数据时,可以使用SQL的INSERT INTO语句。在Qt中,可以使用QSqlQuery对象的prepare()和bindValue()函数来执行预处理插入语句: 常规的数据库插入语句 INSERT into users(id,name,age)VALUES(111,"name",12) Qt中 QString name = "Alice"; int age = 25; QSqlQuery query; query.prepare("INSERT INTO users (name, age) VALUES (:name, :age)"); query.bindValue(":name", name); query.

Linux系统部署MongoDB开源文档型数据库并实现无公网IP远程访问

文章目录 前言1. 安装Docker2. 使用Docker拉取MongoDB镜像3. 创建并启动MongoDB容器4. 本地连接测试5. 公网远程访问本地MongoDB容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 💡 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击跳转到网站】 前言 本文主要介绍如何在Linux Ubuntu系统快速部署MongoDB,并结合cpolar内网穿透工具实现公网远程访问本地数据库。 MongoDB服务端可以运行在Linux、Windows、MacOS平台,可以存储比较复杂的数据类型,支持的查询语言非常强大,几乎可以实现类似关系数据库单表查询的绝大部分功能,还可以对数据建立索引。 直接实用包管理器安装MongoDB比较复杂,使用Docker安装部署MongoDB则相对简单快速,下面就和大家分享一下具体操作流程。 1. 安装Docker 本教程操作环境为Linux Ubuntu系统,在开始之前,我们需要先安装Docker。 在终端中执行下方命令: 添加Docker源 # Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg # Add the repository to Apt sources: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.

AI绘画Stable Diffusion 图生图必看教程:局部重绘和涂鸦重绘详解,超强操作流程奉上!

大家好,我是程序员晓晓 今天我将给大家分享一下 AI绘画 Stable Diffusion 的 局部重绘(Inpainting) 玩法,这是一种在图像中指定区域进行修改和修复的技术。它允许用户选择图像的某个部分进行重新绘制,而不影响图像的其他部分。这在图像修复、编辑和创作中非常有用。 当我们仅仅对一张图片中的某一个部分不满意,需要修改时,我们就需要用到局部重绘功能,因为无论是你修改提示词还是其他方式都无法保证这张图重新生成还能是和原来完全一样。 教程开始前,如果还有小伙伴没有安装SD的,可以看我往期入门教程 2024最新超强AI绘画Stable Diffusion整合包安装教程,零基础入门必备!,SD安装包下载请看文末扫描免费获取哦 教程开始 我们拿爱莎公主为例。 正向提示词:cinematic photo casual elsa,<lora:princess_xl_v2:0.4>,35mm photograph,film,bokeh,professional,4k,highly detailed,反向提示词:``drawing,painting,crayon,sketch,graphite,impressionist,noisy,blurry,soft,deformed,ugly, 我们现在希望画面的其他地方都不做任何改变,仅仅让她把眼睛闭上。 我们首先点击这个按钮把这张图导入到图生图中。点击图片下方的局部重绘按钮,等待几秒钟让图片加载完成。 用画笔将需要重绘的区域涂抹。 在图生图的正向提示词内添加上:(closed eyes:1.2),确保重绘幅度在一个合理的数值,其他参数默认即可。 点击“生成”,我们就会获得一张闭眼的爱莎了,画面其他内容没有变化,仅仅是眼睛部分进行了重绘。 选择图像:在Stable Diffusion中加载你想要进行局部重绘的图像。 标记区域:使用绘图工具在图像上标记需要重绘的区域。这一步通常通过画笔或矩形工具进行。确保选中的区域覆盖所有需要修改或修复的部分。 输入描述:在文本框中输入对重绘区域的描述。描述可以包括你希望生成的内容或修复的细节。例如,“修复这部分的划痕”或“在这里添加一朵花”。 生成图像:点击生成按钮,系统会根据你的描述和标记的区域进行重绘。生成的结果会显示在原图像上,你可以查看效果并进行调整。 保存图像:如果对结果满意,可以将修改后的图像保存到本地。 局部重绘参数详解 在进行局部重绘时,可以调整一些参数来优化效果。以下是常见参数及其含义: 缩放选项 仅调整大小:只调整图像的大小,而不进行任何重绘。 裁剪至适应:调整图像大小,使其适应指定的尺寸,可能会裁剪图像的一部分。 缩放后填充空白:调整图像大小后,如果有空白区域,会用背景色填充。 调整大小并填充图像:调整图像大小,同时填充空白区域,使图像保持完整。 蒙版边缘模糊度 :类似Photoshop中的羽化的效果,使蒙版和原图衔接更为自然。 蒙版设置: 重绘蒙版内容:仅重绘被蒙版覆盖的区域。 重绘非蒙版内容:仅重绘未被蒙版覆盖的区域。 感兴趣的小伙伴,赠送全套AIGC学习资料,包含AI绘画、AI人工智能等前沿科技教程和软件工具,具体看这里。 蒙版区域内容处理 填充:选择是否应用蒙版进行局部重绘。 原图:使用原图作为参考进行重绘。 潜空间噪声:控制蒙版和非蒙版区域的过渡效果。 空白潜空间:使空白区域与图像内容自然融合。 重绘区域 整个图片:对整张图片进行重绘。 仅蒙版区域:仅对蒙版覆盖的区域进行重绘。 仅蒙版区域下边缘预留像素:和第五课中的分块重叠像素宽度功能是一致的。 采样方法(Sampler) 选择采样方法:决定图像生成的算法。常见的采样方法包括DPM++ 2M、Euler a等。 迭代步数(Steps) 迭代步数:定义生成图像时的迭代次数。步数越多,生成的图像细节越丰富,但处理时间也越长。 重绘尺寸 宽度:设置重绘图像的宽度,以像素为单位。 高度:设置重绘图像的高度,以像素为单位。 提示词引导系数(CFG Scale) 提示词引导系数:控制生成图像时提示词对图像的影响。值越高,生成的图像越接近提示词描述的内容。 重绘幅度 重绘幅度(Denoising Strength):控制图像重绘的强度。值越高,重绘的部分越接近描述的内容,值越低,保留的原始细节越多。 其他参数 采样频率:采样频率控制图像生成过程中的采样间隔。

mac|Mac压缩与解压缩

1、系统自带的压缩软件。但是它能解压的格式很少 2、keka(优点:体积小,没广告) 支持压缩格式:7z,Zip,Tar,Gzip,Bzip2,DMG,ISO 支持的提取格式:RAR,7z,Lzma,xz,Zip,Tar,Gzip,Bzip2,ISO,EXE,CAB,PAX App store下载需要钱,可以到这里下载(宝藏网站宝藏站主呜呜呜,基本上要用到的都免费) 3、系统自带的zip 可以在终端通过zip、unzip进行压缩和解压缩 unzip file.zip zip file.zip file zip -er file.zip file(加密) 4、安装rar 下载,在关于本机里可以看到自己是arm还是x64 我的是m2就选的arm 下载完进入目录解压缩,在终端进入解压缩后的文件夹 # 安装rar命令 sudo install -c -o $USER rar /usr/local/bin/ # 安装unrar命令 sudo install -c -o $USER unrar /usr/local/bin/ Rar a -p file.rar (加密压缩) 5、7zip brew install p7zip 如果显示找不到brew,则安装brew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 选择下载源 输入开机密码,选择删除之前安装的brew:y 按下回车 选择镜像(这里我选择了清华的) 7z a file.7z file -t7z //压缩 7z a file.7z file -t7z -p //加密压缩 7z x file.

PortSwigger web实验室(BurpSuit官方靶场)之SQL注入

前言 Hi~ o( ̄▽ ̄)ブ,我是一名刚刚开始学习网安的新手。在做PortSwigger实验室(也就是BurpSuit官方做的靶场和学习中心)题目的时候发现对于新手来说还是有很多问题的。上网搜索相关文章发现可能是官方跟新了靶场的题目,导致很多文章已经“货不对板”了。思来想去最后决定自己来写一篇通关文章!如果有什么地方写的不好或者有什么错误欢迎大伙指出批评~~ ps:该文章包含大量我作为初学者在解题过程中的学习过程和内容,可能会显得很臃肿。如果只是寻找简洁的通关攻略的朋友可能就不太适合啦~~作为初学者很多地方可能写的不够详细或者有错误,希望大家能在评论区积极讨论嘻嘻(●’◡’●) 本篇主要是题解实践,立论放在我的另一篇笔记中,如果感兴趣也可以看看哦!SQL注入) 靶场地址 https://portswigger.net/web-security 关于SQL注入 这个段落是对SQL的一些简介,如果您已经很了解了就可以直接跳过了哦~~(以下内容基于PortSwigger中对于SQL injection的讲解进行翻译和添加:靶场地址。) 什么是SQL注入 SQL注入(SQLi)是一种Web安全漏洞,允许攻击者干扰应用程序对其数据库进行的查询。它通常允许攻击者查看他们通常无法检索的数据。这可能包括属于其他用户的数据,或者应用程序本身能够访问的任何其他数据。在许多情况下,攻击者可以修改或删除此数据,从而导致应用程序的内容或行为发生持久更改。 在某些情况下,攻击者可以升级SQL注入攻击以危及底层服务器或其他后端基础架构,或执行拒绝服务攻击。 一次成功的SQL注入攻击会造成什么样的影响 成功的SQL注入攻击可能导致对敏感数据(如密码、信用卡详细信息或个人用户信息)的未经授权访问。近年来,许多备受瞩目的数据泄露都是SQL注入攻击的结果,导致声誉受损和监管罚款。在某些情况下,攻击者可以获得进入组织系统的持久后门,从而导致长期的危害,而这种危害可能会在很长一段时间内被忽视。 SQL injection 题解 Lab: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data(实验:WHERE子句中的SQL注入漏洞允许检索隐藏数据) 目标 验证是否存在SQL漏洞,并通过执行SQL注入攻击,使应用程序显示一个或多个未发布的产品。 情报 产品类别筛选器中存在SQL注入漏洞。当用户选择一个类别时,应用程序执行如下所示的SQL查询: SELECT * FROM products WHERE category = 'Gifts' AND released = 1 行动 访问实验室 可以看到是一个商店的主页,有提供按照类型检索的功能,点一下试试看: 按照上方情报我们已经知道其后方执行的SQL语句,因此直接构造payload: '+OR+1=1-- 可以预测其拼接后会执行的SQL语句是: SELECT * FROM products WHERE category = ''+OR+1=1--' AND released = 1 “–”是注释的意思,在其后方的语句会被注释起来。因为1等于1永远是对的,因此无论category字段匹配与否都不会影响最终结果,该表会被全部显示出来 到这就成功啦! 恭喜你解开了第一道题!b( ̄▽ ̄)d Lab: SQL injection vulnerability allowing login bypass(实验:允许绕过登录的SQL注入漏洞) 第一次做的时候还蛮震惊的,真的没想到还可以这样玩

服务器安装多个Tomcat

服务器安装多个Tomcat 因为申请了一个域名,然后想设置一个二级域名,让不同的二级域名访问到不同的项目,例如blog.booleandev.xyz访问到博客项目,www.booleandev.xyz访问到主页,网上找了找资料,发现一般是使用nginx反向代理映射到不同的端口,再跳转到不同的项目,因此想到自己的服务器上安装多个tomcat来玩一玩,顺便这么久没写博客了,最近工作也不是特别忙。好了,废话不说,正文开始了。 1.下载tomcat安装包放入服务器中 从网上下载tomcat的linux安装包,然后利用WinSCp软件拖入到服务器,我放得目录是/usr/local/tomcats,然后再将不同的端口的tomcat放入这个包下,例如80端口的tomcat的文件夹是/usr/local/tomcats/tomcat80,依次其它端口类推,这样放入,使得各个端口清晰明了。配置起来方便,我这一共安装了4个tomcat,端口号分别为80,8080,8081,8082,如果你还要更多,可以一次类推。 2.安装tomcat 首先将下载的tomcat放入/usr/local/tomcats/tomcat80, 然后解压tar -zxvf apache-tomcat-7.0.81.tar.gz, 解压之后,在将解压后的文件移动到tomcat80目录下,mv -r ./apache-tomcat-7.0.81/* ./ 然后再将安装包复制到其它目录下,例如复制到8080端口目录下,cp -r ./* /usr/local/tomcats/tomcat8080,依次类推,tomcat就安装好了 3.配置tomcat全局变量 修改/etc/profile文件,vim /etc/profile 在末尾加入如下数据 ##########tomcat-80########### CATALINA_BASE=/usr/local/tomcats/tomcat80 CATALINA_HOME=/usr/local/tomcats/tomcat80 TOMCAT_HOME=/usr/local/tomcats/tomcat80 ##########tomcat-8080########### CATALINA_8080_BASE=/usr/local/tomcats/tomcat8080 CATALINA_8080_HOME=/usr/local/tomcats/tomcat8080 TOMCAT_8080_HOME=/usr/local/tomcats/tomcat8080 ##########tomcat-8081########### CATALINA_8081_BASE=/usr/local/tomcats/tomcat8081 CATALINA_8081_HOME=/usr/local/tomcats/tomcat8081 TOMCAT_8081_HOME=/usr/local/tomcats/tomcat8081 ##########tomcat-8082########### CATALINA_8082_BASE=/usr/local/tomcats/tomcat8082 CATALINA_8082_HOME=/usr/local/tomcats/tomcat8082 TOMCAT_8082_HOME=/usr/local/tomcats/tomcat8082 4.修改tomcat的bin目录下的文件 修改tomcat安装包下的bin目录下的cataline.sh 在# OS specific support. $var _must_ be set to either true or false.下面添加(80端口无需修改这) export CATALINA_BASE=<span class="katex--inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>C</mi><mi>A</mi><mi>T</mi><mi>A</mi><mi>L</mi><mi>I</mi><mi>N</mi><msub><mi>A</mi><mn>8</mn></msub><mn>08</mn><msub><mn>0</mn><mi>B</mi></msub><mi>A</mi><mi>S</mi><mi>E</mi><mi>e</mi><mi>x</mi><mi>p</mi><mi>o</mi><mi>r</mi><mi>t</mi><mi>C</mi><mi>A</mi><mi>T</mi><mi>A</mi><mi>L</mi><mi>I</mi><mi>N</mi><msub><mi>A</mi><mi>H</mi></msub><mi>O</mi><mi>M</mi><mi>E</mi><mo>=</mo></mrow><annotation encoding="application/x-tex">CATALINA_8080_BASE export CATALINA_HOME=</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8778em;vertical-align:-0.1944em;"><span class="mord mathnormal" style="margin-right:0.07153em;">C</span><span class="

DP学习——策略模式

学而时习之,温故而知新。 敌人出招(使用场景) 业务中需要多个算法可替换,而不能重构代码时,怎么办?或者一个对象在运行中要根据业务切换不同的模式或者采用不同的算法,怎么办? 到你出招 这个时候就要出策略模式这一招了。 具体招式 策略模式的招式,就是把需要替换的算法抽象成接口类,然后根据不同业务定义人多子类——储备很多子类来实现接口类的可替换算法。 这样的话,一个对象想要根据业务状态执行不同算法或者策略,那么只需要传递进来不同的策略子类就行了。 这个策略实际上分为2类,一类是各种继承抽象策略类的子类,另一类就是使用这些策略的类它可以有替换接口,接受那些策略子类。

Stable Diffusion低显存也能跑大图了,再也不用怕爆显存!

Stable Diffusion(以下简称SD)是一款很强大的AI绘画软件,很多人都会拿SD和MJ(Midjourney)作对比,其中最重要的一点就是使用门槛上,SD需要最低也是4GB的显存,如果显存低了是没办法获得很好的体验的,最佳的配置是12-24GB 基本上所有的功能都能用。现在pkuliyi2015大佬开发了一个免费插件Tiled Diffusion(插件安装目录文件夹:extensions),可以大幅度减少SD生图所需的显存,其工作原理就是将一张图不同的块,通过连续生成图块,然后再合并成一张图,再也不用–lowvram 或 --medvram指令降低作画的质量了。 Tiled Diffusion界面 主要功能: 1、可以轻松做出超高质量的图像放大,即使是8K的图 也只需要12G显存。 2、当你不想大幅度的改变人像时,特别适合于人像放大,可以达到无损放大的程度。 3、X4的放大比例,如果你的电脑平时只敢开X2放大,现在X4放大也不会爆显存了,去噪强度建议设置0.4。 4、Img2img 放大,默认参数下,选择Tiled Diffusion的X4放大,只需要1分钟 左右,如果是X2放大,只需要10秒。 5、使用ControlNet插件的canny 2560 * 1280重绘,效果如图: canny线稿图 canny重绘效果图 安装教程: 软件直装:打开SD网页版地址,选择拓展-从网址安装-输入插件地址: https://github.com/pkuliyi2015/multidiffusion-upscaler-for-automatic1111 点击“安装”,如果国内网络不稳定,可以在github前面加个K变成kgithub,就会变成从国内的网站安装,速度大大提高。 sd插件安装方法 压缩包安装:打开项目地址,点击code,然后点击下面弹出来的download zip 这样就会用压缩包的形式下载下来,再把压缩包解压到extensions文件夹里面即可。这样安装后期更新还是一样的方法,PS:不如网址直接安装方便,点击SD拓展-在线更新即可自动下载更新了。 sd插件安装方法 使用方法: 插件安装后,你可以直接使用软件默认的设置,只需要打开“启用”即可,英文版的是打开Enable。如果生成的图像比较模糊或者颜色灰暗,需要打开模型对应的VAE进行颜色修复。如果还是爆显存了,需要把各个tile调小。 Tiled Diffusion示例图 如图所示,一张完整的图都被分成了不同的块,这个插件使用起来就会把原图分成的小块一遍一遍的分割和融合,最终生成我们想要的图,如果你没有生成高清大图的需求,建议关掉这个功能,这会让你生成图的速度变慢。 块的大小和重叠数量决定了生成图的速度,如果你把块的宽度和高度设置的很低就会生成更多的小块,需要的时间也就更多,建议块的宽度和高度设置96或者128以提高生成速度,分块重叠个数建议在使用MultiDiffusion功能的时候设置32或者48,使用Mixture of Diffusers 选择16或32,与 MultiDiffusion 相比,Mixture of Diffusers 需要较少的重叠,两者使用的方法不太一样。 Stable Diffusion生成的图 区域提示语控制 因为每个块都共享顶部一样的主提示词,所以你没有办法将两个不同风格的事物放在一起,但是这个插件可以通过区域提示词分别控制不同的区块,比如左边你可以通过不同的lora设置一个赛博朋克风格人物,右边区域设置一个汉服风格人物,这样就实现了不同时期的人同框了,打开绘制完整的画布背景就可以实现在同一个背景下了。 使用方法:把分区控制功能打开,然后选择想要设置的不同的分区数,以上面的介绍为例,我们需要设置两个不同的区域,把区域1和区域2都打开,然后设置宽度和高度达到占满整幅画的目的,如果不占满就会出现不同的噪点和色块。这样我们就可以在区域1写上单独的提示词和反向提示词,embedding的NG_DeepNegative_V1_75T也是可以使用的。如果你想自己绘制图像,可以选择前景,否则就选择背景,因为分区域已经写了相关的人物提示词,所以在顶部的提示词框就可以不写了,只需要写masterpiece, best quality, (realistic, photo-realistic:1.4)等质量提示词,不需要提到任何具象化的东西,不然生成的图会很糟糕。 MultiDiffusion分区控制 总之,如果你是小显存,那就装它 装它 装它!如果你想生成很大很大的图,那就装它 装它 装它! 关于AI绘画技术储备 学好 AI绘画 不论是就业还是做副业赚钱都不错,但要学会 AI绘画 还是要有一个学习规划。最后大家分享一份全套的 AI绘画 学习资料,给那些想学习 AI绘画 的小伙伴们一点帮助!

无服务器【Serverless】架构的深度剖析:组件介绍、优缺点与适用场景

🐇明明跟你说过:个人主页 🏅个人专栏:《未来已来:云原生之旅》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、云计算的发展趋势 2、无服务器计算简介 二、无服务器架构概述 1、什么是无服务器计算 2、关键组件:函数即服务(FaaS)、事件驱动模型 3、与传统服务器架构的对比 三、无服务器架构的优势 1、成本效率 2、灵活性与可扩展性 四、无服务器架构的挑战与局限 1、冷启动问题 2、资源限制与监控难题 一、引言 1、云计算的发展趋势 云原生技术的普及与深化:云原生技术(包括容器、微服务、持续集成/持续部署CI/CD等)将更加广泛地被采用,以提高应用的灵活性、可移植性和可维护性。容器化和Kubernetes等编排工具将成为标准配置。多云与混合云策略的增长:随着企业对云服务的依赖加深,多云(使用多个公有云服务商)和混合云(结合公有云与私有云)策略将更为普遍,以减少供应商锁定,提高业务连续性和灵活性。成本优化与服务降价:随着技术成熟和市场竞争,IaaS(基础设施即服务)价格预计将持续下降,同时服务商将提供更多优化成本的方案,如预留实例、节约计划等。人工智能与机器学习的整合:AI和ML将成为云服务的重要组成部分,云服务商将提供更多开箱即用的AI服务,助力企业智能化转型,提高数据分析、决策制定的效率和准确性。 2、无服务器计算简介 无服务器计算(Serverless Computing)是一种云计算服务模型,它允许开发者构建和运行应用程序,而无需直接管理底层服务器或基础设施。尽管名称中有“无服务器”一词,实际上仍然需要物理服务器来支撑服务运行,但这些服务器的管理和维护工作对开发者透明,由云服务提供商全权负责。 在无服务器模型中,应用被分解成一系列功能或微服务,这些功能在需要时被触发执行,通常是响应特定的事件(如文件上传、数据库更改或HTTP请求)。开发者只需要编写并上传代码,云平台会自动管理和分配资源,按实际使用的计算量计费,无需预先支付或保留服务器容量。 二、无服务器架构概述 1、什么是无服务器计算 无服务器计算,听起来好像没有服务器参与一样,但实际上并不是真的没有服务器,而是把管理和维护服务器的复杂工作从开发者那里移开了。想象一下,你开了一家餐厅,但不用自己买地盖厨房、雇厨师、洗碗工,只要告诉别人你想做什么菜(编写代码),就有专业的餐饮团队(云服务提供商)帮你准备好一切,按客人点菜(触发事件)的时候迅速做好并端上桌(执行代码),而且只在有客人点菜时才收费。 具体来说,无服务器计算就是你把应用程序拆分成很多小的功能块(比如计算一个人的年龄、发送邮件等简单任务),每个功能块都是一个独立的“函数”。当你需要使用这些功能时,比如用户点击了一个按钮,云平台就会自动运行对应的函数来完成任务,完成后就停止,不占用资源也不计费。这样,你就不用操心服务器怎么配置、软件怎么更新这些繁琐的事,只需要专注于写出解决问题的代码就行了。这样一来,不仅省事,还能根据实际使用情况灵活付费,成本更低,效率更高。 2、关键组件:函数即服务(FaaS)、事件驱动模型 在无服务器计算模型中,两个核心概念是“函数即服务(Function as a Service,简称FaaS)”和“事件驱动模型” 函数即服务(FaaS) 想象一下,你拥有一支神奇的魔法队伍,每当你说出咒语(也就是一个需求或事件发生),他们立刻出现,完成一项特定的任务后便消失无踪,不留下任何需要你打理的痕迹。FaaS就是这样的一个概念。 在技术领域,FaaS是一种云服务,让你能够上传一小段代码(这个代码块就是一个“函数”),然后设定好什么时候或者在什么条件下(比如文件上传、API调用、定时任务等)去运行这段代码,而不需要你去关心运行这段代码所需的服务器配置、资源分配等问题。代码执行完毕后,资源会被自动回收,你只需为执行这段时间内的计算资源付费。 事件驱动模型 事件驱动模型就像是一个自动化生产线,每一步操作都是由前一步的操作结果(即“事件”)触发的。在无服务器架构中,这种模式尤为重要。 想象你家的智能门铃,当有人按门铃(这是一个事件),就会触发一系列动作:摄像头开始录像、发送通知到你的手机、甚至自动开灯。在这个过程中,每一个动作都是由前一个事件触发的,而不是一直在运行等待任务。 在FaaS中,事件可以是任何事情:用户上传图片、数据库记录更新、网页访问等。一旦这些事件发生,云平台就会自动调用相应的函数去处理这些事件,执行完后函数会自动结束,整个过程高效且按需进行。 总结起来,FaaS提供了运行代码片段的能力,而事件驱动模型确保了这些代码片段只有在需要时才被触发执行,两者结合构成了无服务器计算的核心机制,让开发者能够更高效、低成本地构建和运行应用程序。 3、与传统服务器架构的对比 1. 资源管理与运维 传统服务器架构:通常需要运维人员手动配置和管理服务器硬件、操作系统、中间件以及应用程序的部署。这包括资源的预分配、软件安装、安全补丁更新、性能监控和故障排查等。无服务器架构:开发者几乎不直接管理底层基础设施,云服务提供商自动处理服务器的配置、扩展、维护和安全更新。用户只需关注业务逻辑的代码编写和部署,极大地减轻了运维负担。 2. 计费模式 传统服务器架构:通常基于固定成本或者预付费模型,即使资源未充分利用,也需要承担一定的费用。包括服务器租赁、带宽、存储空间等固定成本。无服务器架构:采用按需付费的模式,仅对实际消耗的计算资源(如执行时间、请求次数、存储使用量等)进行计费,这有助于降低成本,特别是在应用负载波动较大的情况下。 3. 扩展性 传统服务器架构:扩展性相对较低,需要提前规划资源以应对高峰负载,手动添加或升级服务器资源。无服务器架构:具有高度的弹性和自动扩展能力。云服务会根据应用的实际需求自动分配资源,无需人工干预,能够迅速响应突发流量。 4. 开发与部署速度 传统服务器架构:部署新应用或更新现有应用通常需要较长的时间,涉及到环境配置、测试、部署等多个环节。无服务器架构:函数部署快速,代码上传后即可运行,迭代速度快,有利于快速开发和持续交付。 三、无服务器架构的优势 1、成本效率 按需付费模式:在无服务器计算模型下,用户仅需为实际使用的计算资源和执行时间付费,而不是预先支付固定的服务器租用费用。这意味着在应用需求低谷期,用户不会为闲置的服务器资源买单,大大降低了空闲成本。资源自动优化:无服务器架构通过自动伸缩功能,根据应用的实际负载动态分配资源。在流量高峰期,系统自动增加资源以保证性能;而在低峰期,则自动释放资源,减少开支。这种精细化的成本控制策略能够确保资源得到最高效的利用。减少运维成本:由于云服务提供商负责底层基础设施的维护和管理,企业无需雇佣大量运维人员进行服务器监控、安全更新、备份等工作,从而节省了大量的人力成本。消除前期投资:相较于传统服务器架构,无服务器模式免去了购买和设置服务器的初期投入,降低了进入门槛,特别是对于初创企业和进行新项目试验的团队而言,可以更快地启动项目而无需担心高昂的初始投资。成本透明化:无服务器架构的计费模式较为直接和透明,用户可以清晰地看到每一项服务或函数的消耗成本,便于预算管理和成本优化。避免资源浪费:由于资源的即时分配和释放,无服务器架构减少了因资源预估不准确导致的过度配置或资源闲置问题,从而避免了不必要的资金浪费。 2、灵活性与可扩展性 快速迭代与部署:无服务器架构允许开发者将应用拆分为微小的功能模块(函数),每个函数都可以独立开发、测试和部署。这种细粒度的管理极大提升了开发效率,使得新功能的添加或现有功能的修改变得迅速且简便,支持快速迭代和持续集成/持续部署(CI/CD)流程。无缝扩展:基于事件驱动的机制,无服务器应用能够根据实际需求自动扩展。当请求量增加时,云服务提供商自动分配更多资源来处理额外的工作负载,而不需要开发者手动调整服务器数量或配置。这一特性确保了应用在面对突发流量或长期增长时都能保持高性能和稳定性,同时也避免了过量预置资源带来的浪费。地理分布式部署:云服务提供商通常在全球拥有多个数据中心,无服务器架构能够轻松利用这一优势,根据用户地理位置智能路由请求,或在不同地区复制服务,减少延迟,提升用户体验。这对于跨国运营或需快速响应的业务至关重要。跨平台兼容性:无服务器函数通常遵循开放标准,这意味着开发者编写的代码可以在不同的云服务商之间迁移,增加了灵活性,减少了供应商锁定的风险。 四、无服务器架构的挑战与局限 1、冷启动问题 冷启动问题定义 冷启动指的是在无服务器环境中,当一个函数在一段时间内没有被调用,云服务提供商可能会将其从内存中移除以节省资源。当下一次请求到达时,这个函数需要重新加载到内存中,初始化执行环境,这一过程会产生额外的延迟,即所谓的“冷启动延迟”。 冷启动的影响 延迟增加:用户首次请求或长时间未请求后再次请求时,可能体验到较明显的延迟,影响应用响应速度和用户体验。资源消耗:冷启动过程中需要加载函数及其依赖,可能会暂时消耗更多的计算和内存资源。一致性问题:对于要求严格响应时间的应用,冷启动可能导致服务性能不稳定。 应对策略 预热机制:定期触发函数,保持其活跃状态,减少冷启动发生的概率。代码与依赖优化:减小函数包的大小,优化代码结构,减少加载时间。使用缓存:缓存函数实例或其依赖,加快重启时的加载速度 2、资源限制与监控难题 资源限制

中国移动中国联通中国电信数字化转型营销销售讲师培训老师讲授AIGC大模型人工智能5G云算力网络云网终端AIGC人工智能宽带政企物联网专线 IDC智慧城市

唐兴通 数字化商业创新顾问、新媒体营销专家、数字化销售增长教练、沃顿商学院演讲嘉宾。全球创新增长战略大家EM·罗杰斯(创新的扩散)、杰弗里·摩尔(跨越鸿沟)、亨利·切萨布鲁夫(开放式创新)在中国合作者。《中欧商业评论》《清华管理评论》撰稿人。 拥有近20年的咨询实践经验,兼任执教12家中外商学院高级管理课程(清华大学、北京大学、浙江大学、上海交通大学、中国人民大学、哥伦比亚大学等)。给超过30万以上企业管理层讲授过数字化、新媒体营销、销售增长等课程。 15年运营商(集团、省、市、基地)培训经验,课程结合企业实际案例展开,以营销实战经验、企业管理咨询经验和扎实的理论功底为基础,有效帮助运营商提高销售额、学会数字化转型、新媒体营销、提高市场份额,整体提升数字化竞争优势。 先后为中欧国际工商学院、长江商学院、清华大学、北京大学、上海交大、华为、中国移动、中国联通、中国电信、新华三、阿里巴巴、今日头条、百度、中粮集团、国家电网、中石油、中国建设银行、招商银行等提供咨询顾问或培训。 先后出版《引爆社群:移动互联网时代新4C法则》《数字化战略》《穿越周期:数字化转型与动态能力》《创新的扩散》《开放式创新》《梯次增长》《组合式创新》《种子用户方法论》《决战第三屏》等12部作品。其中《创新的扩散》《引爆社群》被多所985/211高校列为博士/硕士入学考试指定教材,中欧国际工商学院课程教材。 一位行走的“斯多葛主义”者,以平和心态作为数字商业的实践者、记录者。 主讲课程如下 : 1. 《新媒体营销、数字化营销、社群营销、私域运营、全网营销》 2. 《运营商数字化转型战略与实现路径》 3. 《数字时代商业模式创新》 4. 《数字化销售技巧与客户拓展实践》 5. 《政企产品TOB业务数字化营销与销售新方法 》 6. 《AI大模型、AIGC/ChatGPT从入门到精通,提升办公效能》《AI大模型、AIGC/ChatGPT工具入门使用指南》 7. 《AI大模型、AIGC/ChatGPT在营销与销售中应用》《在营销与销售导入AI大模型、AIGC/ChatGPT工具》 8. 《创新思维与创新管理方法论》 9. 《新零售与实体店线上线下引流》 10. 《企业增长战略与路径管理》 唐兴通老师培训项目: 电信运营商部分授课记录(部分) 1. 为中国移动总部作《数字时代商业模式》培训,培训内容5G、云时代产品与商业模式等。 2. 给广东省移动作《运营商数字化转型与实践路径》,讲授数字化转型与运营商业务探索; 3. 为广东省移动大讲坛讲授《5G时代终端与流量经营营销创新》,讲授5G背景下的新的市场运营; 4. 给广东省移动作《宽带与终端业务推广》,培训地点鼎湖培训基地; 5. 给浙江省移动作《新媒体营销与运营商业务推广》培训,培训新媒体营销,社群营销; 6. 为江苏移动讲授《政企业务与流量经营创新》,讲授政企业务数字化营销创新; 7. 给湖北省移动作《终端销售与流量经营》培训;讲授数字时代终端销售与流量经营; 8. 为云南省移动做《数字时代市场营销能力提升》,全省市场骨干人员能力轮训,6期; 9. 为山西省移动做全省3级经理轮训《终端流量与政企业务经营实践》,培训38天,19期轮训; 10. 为贵州省移动做《流量经营与业务推广》,全省3级经理轮训,讲授数字时代运营商营销创新; 11. 给安徽省移动作《私域流量与社群营销》培训,探讨私域流量与社群营销应用; 12. 为广州移动讲授《数字时代营销与销售技巧》,讲授数字时代新营销及业务创新推广; 13. 为深圳移动讲授《移动互联网产品营销与运营》,解读移动互联网的业务与推广; 14. 为深圳移动讲授《直播带货与短视频营销》,探讨数字时代的市场推广与创新营销; 15. 为中国电信集团作《流量经营营销与市场推广》培训,探讨新媒体营销营销与流量经营; 16. 给中国电信学院作《网络营销与新闻发言人》培训,培训地点中国电信上海培训中心; 17. 为浙江省电信作《新媒体营销推广与应用》培训,培训内容流量运营,市场推广; 18. 为浙江省电信内部创业团队讲授《移动互联网产品与营销》,讲授移动互联网及营销实操; 19. 为广东电信研究院作《数字化转型与市场运营》培训,探讨移动互联网时代产品及市场营销的推广,网络营销的应用;

mac 突然 vscode打不开了?

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 vscode版本踩坑 问题描述解决过程解决方案 问题描述 mac上vscode 前一天 还用的好好的,第二天突然软件都打不开了 解决过程 1、第一步:重启电脑(无效) 2、第二步:卸载vscode重新安装 (依旧无效) 3、查阅百度上的方法 全部无效 解决方案 链接: 参考链接 百度了大半天 都没有找到解决方案,最后 参考git 发现用户留言 在mac上 1.91版本会导致运行奔溃,最后安装1.90版本才能正常使用,真是无了个大语了。

C# 工厂模式(Factory Pattern)

工厂模式用于创建对象而不将具体类的代码与客户端代码混合在一起,从而使一个类的实例化延迟到其子类。 示例代码: // 抽象产品 public interface IProduct { void Use(); } // 具体产品A public class ConcreteProductA : IProduct { public void Use() { Console.WriteLine("Using ConcreteProductA"); } } // 具体产品B public class ConcreteProductB : IProduct { public void Use() { Console.WriteLine("Using ConcreteProductB"); } } // 工厂类 public class ProductFactory { public static IProduct CreateProduct(string type) { switch (type) { case "A": return new ConcreteProductA(); case "B": return new ConcreteProductB(); default: throw new ArgumentException("

三、分布式软总线的架构设计

软总线的主要架构如下: 软总线主体功能分为发现、组网、连接和传输四个基本模块,实现: · 即插即用:快速便捷发现周边设备。 · 自由流转:各设备间自组网,任意建立业务连接,实现自由通信。 · 高效传输:通过WIFI、蓝牙设备下软硬件协同最大化发挥硬件传输性能。

C++|哈希应用->布隆过滤器

目录 一、概念 二、模拟实现 三、布隆过滤器扩展应用 上一篇章学习了位图的使用,但它只适用于整数,对于要查询字符串是否在不在,位图并不能解决。所以针对这一问题,布隆过滤器可以派上用场,至于布隆过滤器是什么,其实并没有什么神奇的,就是在位图上套了哈希函数罢了,这两者组合起来就是布隆过滤器,而字符串就可以通过哈希函数转换成整数映射到位图当中去。 一、概念 布隆过滤器是由布隆(Burton Howard Bloom)在1970年提出的一种紧凑型的、比较巧妙的概念性数据结构,特点是高效地插入和查询,可以用来告诉你“某样东西一定不存在或者可能存在”,他是用多个哈希函数,将一个数据映射到位图结构中。此种方式不仅可以提升查询效率,也可以节省大量的内存空间。 原理分析: 我们来进行分析,为什么不存在是一定的,而存在是可能的,以及为什么要这样做。 首先来解释为什么要用多个哈希函数。 我们知道,字符串可以通过哈希函数转换成整数,但是哈希冲突是避免不了的,可能存在多个字符串通过哈希函数都得到了一样的整数,所以,为了尽量的减少哈希冲突,可以使用多个哈希函数,让字符串通过多个哈希函数得到多个映射位置,只要不是多个映射位置都相同,就不会冲突,这样大大提高了效率。至于要用几个哈希函数是适合的。 这里有一份研究:(转载详解布隆过滤器的原理,使用场景和注意事项 - 知乎 (zhihu.com)) 其中误报率就是哈希冲突率 其中k、m、n满足: 其中k、m、p满足: 我们可以发现,哈希函数用的越多,哈希冲突率就越低,但是哈希函数到3之后,误报率已经很低了,其次,当哈希函数、插入元素固定,所开空间越大,误报率也越低。 用一张图来表示通过哈希函数映射到位图中: 那么综上,即使采用了多个哈希函数,也依然可能会存在哈希冲突,所以在判断东西在不在时,若返回的是存在,这有可能是误判,说明映射的位置依然可能完全相同,而不存在时,说明映射的位置不完全相同,这是正确的结果,为了确保冲突率,我们在模拟实现的时候就采用3个哈希函数。 二、模拟实现 #include "MyBitSet.h"//在上一篇章已实现 struct BKDRHash { size_t operator()(const string& key) { size_t hash = 0; for (auto e : key) { //BKDR hash *= 31; hash += e; } return hash; } }; struct APHash { size_t operator()(const string& key) { size_t hash = 0; for (size_t i = 0; i < key.

R&RStudio 下载及安装(详尽版)

R语言来自S语言,是S语言的一个变种。S语言、C语言、Unix系统都是贝尔实验室的研究成果。R 语言是一种解释型的面向数学理论研究工作者的语言,主要用于统计分析、绘图、数据挖掘。 R 语言自由软件,免费、开放源代码,支持各个主要计算机系统,在语法层面提供了更加丰富的数据结构操作并且能够十分方便地输出文字和图形信息,它广泛应用于数学尤其是统计学领域。 目录 R下载及安装 RStudio下载及安装 R版本切换 R下载及安装 进入R语言官网 R: The R Project for Statistical Computing (r-project.org)https://www.r-project.org/ 选择“download R” 下翻找到国内镜像,选择其中一个即可 选择对应系统版本,这里以Windows为例 选择“install R for the first time” 下载最新4.4.1版本 “Download R-4.4.1 for Windows” 在“Previous release”中可以下载以往版本 下载完成后即可安装,自定义安装位置,其他过程默认 注意:自定义安装的文件目录不能有中文 安装完成后,桌面快捷方式如图 若未创建快捷方式,找到R安装目录,“bin-x64”下打开“Rgui.exe”即可 启动后进入命令行界面,每输入一行命令,就在后面显示计算结果 例如进行一个简单的乘方运算,运行结果如下 RStudio下载及安装 RStudio 是一个 R 编程语言的集成开发环境(IDE),包含控制台、语法高亮显示的编辑器、支持直接代码执行以及画图、浏览历史、调试和工作区管理功能。 进入RStudio下载页面 Download RStudio - Posithttps://posit.co/downloads/下拉找到免费版,选择“DOWNLOAD” 下拉找到不同系统对应的链接,这里以Windows为例, 若需要其他版本可以继续下拉,找到“Older vers” 下载完成后打开安装程序 下一步 自选安装位置,不建议C盘,下一步 注意:文件目录不能有中文 安装 完成后打开”rstudio.exe“ 选择所需R版本, 即可进入RStudio界面 进行一个简单的乘方运算,运行结果如下 R版本切换 进入RStudio,上边栏找到Tools 选择“Global Options” 在“General”中找到“R version”,选择“Change”即可切换R版本

iOS多target时怎么对InfoPlist进行国际化

由于不同target要显示不同的App名称、不同的权限提示语,国际化InfoPlist文件必须创建名称为InfoPlist.strings的文件,那么多个target时怎么进行国际化呢?步骤如下: 一、首先我们在项目根目录创建不同的文件夹对应多个不同的target,然后在对应文件夹下创建每个target对应的InfoPlist.strings如图:第一个InfoPlist.strings放在Sanitation(命名随意取)文件夹下,第二个InfoPlist.strings放在Fulongma文件夹下 二、我们在InfoPlist.strings右侧勾选设置,该文件对应的targetMembership,这样每个InfoPlist.string都会找到对应target的info.plist文件,我们就可以在对应的InfoPlist.string文件中对需要翻译的权限,APP名称等做国际化了。如图:

GaussDB关键技术原理:高性能(四)

GaussDB关键技术原理:高性能(三)从查询重写RBO、物理优化CBO、分布式优化器、布式执行框架、轻量全局事务管理GTM-lite等五方面对高性能关键技术进行了解读,本篇将从USTORE存储引擎、计划缓存计划技术、数据分区与分区剪枝、列式存储和向量化引擎、SMP并行执行等方面继续介绍GaussDB高性能关键技术。 目录 3.6 USTORE存储引擎 3.7 计划缓存计划技术 3.8 数据分区与分区剪枝 3.9 列式存储和向量化引擎 向量化执行引擎 3.10 SMP并行执行 3.6 USTORE存储引擎 GaussDB新增的Ustore存储引擎,相比于Append Update(追加更新)行存储引擎,Ustore存储引擎可以提高数据页面内更新的HOT UPDATE的垃圾回收效率,有效减少多次更新元组后存储空间占用的问题。设计原理上Ustore存储引擎采用NUMA-aware的Undo子系统设计,使得Undo子系统可以在多核平台上有效扩展;同时采用多版本索引技术,解决索引清理问题,有效提升了存储空间的回收复用效率。Ustore存储引擎结合Undo空间,可以实现更高效、更全面的闪回查询和回收站机制,能快速回退人为“误操”为GaussDB Kernel提供了更丰富的企业级功能。Ustore基于Undo回滚段技术、页面并行回放技术、多版本索引技术、xLog无锁落盘技术等实现了高可用高可靠的行存储引擎。 USTORE存储引擎作为原有ASTORE存储引擎的替代者其核心目标定位于: (1)针对OLTP场景,实现Inplace-update,利用Undo实现新旧版本分离存储;降低类似于AStore存储引擎由于频繁更新或闪回功能开启导致的数据页空间膨胀,以及相应的索引空间膨胀。 (2)通过在DML操作过程中执行动态页面清理,去除VACUUM依赖,减少由于异步数据清理产生的大量读写I/O。通过Undo子系统,实现事务级的空间管控,旧版本集中回收。 (3)对插入、更新、删除等各种负载的业务,性能和资源使用表现相对平衡。在频繁更新类的业务场景中,更新操作采用原地更新模式,可以获得更高、更平滑的性能表现。适合“短”(事务短)、“频”(更新操作频繁)、“快”(性能要求高)的典型 OLTP类业务场景 3.7 计划缓存计划技术 数据库接收到SQL语句后通常要经过如下处理:词语法解析->优化重写->生成执行计划-> 执行,从开始解析到计划生成其实是一个比较耗时的过程,一个常用的思想就是将计划缓存下来,当执行到相似的SQL时,从而可以复用计划,跳过SQL语句生成执行计划的整个过程,在一般OLTP业务负载中,由于涉及到的数据量较少,同时借助索引技术能够大大加速数据的访问路径,因此查询的解析、重写、优化阶段占比会比价高,如果能够讲一些模板性质的语句计划缓存起来,每次设置不同的参数那么点查询的处理流程能够大大简化,提升查询时延和并发吞吐量。 计划缓存技术:当数据库收到一条 SQL 请求后,首先会通过查询即系模块对 SQL 文本做一次快速参数化处理,参数化处理的作用是把 SQL 文本中的常量参数替换成通配符 ?,例如 SELECT * FROM t1 WHERE c1 = 1 会被替换为 SELECT * FROM t1 WHERE c1 = ?。接着数据库会从计划缓存中查看有没有已经生成好的计划给这条参数化后的 SQL 使用。如果找到了可用的计划,数据库就会直接执行这个计划。如果没有找到可用的计划,数据库会重新为这条 SQL 生成执行计划,并把生成好的计划保存到计划缓存中以备后续的 SQL 使用。通常情况下从计划缓存中直接获取执行计划相比于重新生成执行计划,耗时通常会低至少一个数量级,因此使用计划缓存可以大大降低获取执行计划的时间,从而减少 SQL 的响应时间。 上图为对比走计划缓存、不走计划缓存的SQL执行过程,可以看到执行待计划缓存的查询语句可以规避掉大量的处理逻辑,在OLTP并发负载场景下提升效果镜像,首先,事务型负载单条查询执行时间本身就在毫秒级ms,查询解析、RBO/CBO优化等一些列过程也是毫秒级往往会超过查询本身的执行时间,另一方面,查询解析、RBO/CBO本身是消耗CPU计算资源的操作,这对事务型高并发、高吞吐的事务型复杂起来说非常明显的资源占用,如果能将这部分资源剩下、同时将查询解析的时延消减为0对整体性能是非常明显的提升 3.8 数据分区与分区剪枝 在数据系统中,数据分区是在一个实例内部按照用户指定的策略对数据做进一步的数据切分,将表按照指定规则划分为多个数据互不重叠的部分。从数据分区的角度来看是一种水平分区(horizontal partition)分区策略方式。分区表增强了数据库应用程序的性能、可管理性和可用性,并有助于降低存储大量数据的总体拥有成本。分区允许将表、索引和索引组织的表细分为更小的部分,使这些数据库对象能够在更精细的粒度级别上进行管理和访问。GaussDB Kernel提供了丰富的分区策略和扩展,以满足不同业务场景的需求。由于分区策略的实现完全由数据库内部实现,对用户是完全透明的,因此它几乎可以在实施分区表优化策略以后做平滑迁移,无需潜在耗费人力物力的应用程序更改: (1)改善查询性能,对分区对象的查询可以仅搜索自己关心的分区,提高检索效率 (2)增强可用性,如果分区表的某个分区出现故障,表在其他分区的数据仍然可用。

基于SpringBoot+大数据+爬虫+数据可视化的的媒体社交与可视化平台设计和实现(源码+LW+部署讲解)设计和实现(源码+LW+部署讲解)

博主介绍:✌全网粉丝50W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文降重、长期答辩答疑辅导、腾讯会议一对一专业讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路。 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅ Java项目精品实战案例《100套》 Java微信小程序项目实战《100套》 大数据项目实战《100套》 Python项目实战《100套》 感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人​ 系统介绍: 媒体社交与可视化平台是一个综合性的网络社区,旨在为用户提供一个内容丰富、交互性强的在线环境。平台的核心功能包括用户管理、论坛交流、信息发布和个性化服务等。管理员通过用户管理确保社区秩序,通过论坛管理促进内容的健康互动,而网站公告管理则保证了信息的及时传达。系统管理和个人中心为管理员和用户提供了必要的账户管理和个性化设置。前台界面以用户为中心,提供了一系列功能模块,如首页展示、用户注册与登录、论坛讨论、公告浏览和个人中心,其中个人中心进一步包含修改密码、好友列表、聊天记录、发布内容和收藏等功能。这个平台以其直观的用户界面、丰富的互动功能和便捷的信息管理,成为了人们社交和信息获取的重要渠道。 本篇论文对媒体社交与可视化平台的需求分析、功能设计、系统设计进行了较为详尽的阐述,并对系统的整体设计进行了阐述,并对各功能的实现和主要功能进行了说明,并附上了相应的操作界面图。 程序上交给用户进行使用时,需要提供程序的操作流程图,这样便于用户容易理解程序的具体工作步骤,现如今程序的操作流程都有一个大致的标准,即先通过登录页面提交登录数据,通过程序验证正确之后,用户才能在程序功能操作区页面操作对应的功能。 ​ 程序操作流程图 首先前端通过Vue和axios发送HTTP请求到后端的登录接口。在后端接收登录请求的Controller会使用`@RequestParam Map<String, Object> params`来接收前端传递的用户参数,用户名和密码。然后后端根据接收到的参数创建一个查询条件封装对象MyBatis的EntityWrapper用于构建查询条件。接着在业务层,调用相应的service方法来查询数据库中是否存在匹配的用户信息。这个查询方法Login()会将前端传递的对象参数传递到后台的DAO层,进行数据库的交互操作。如果存在符合条件的用户,则会返回相关的用户信息。最后在后端控制器中将查询结果封装成响应体,通过`return R.ok().put("data", userService.selecView(ew))`将用户信息返回给前端。前端收到响应后,可以通过调用Vue、ElementUI等组件来渲染登录结果,例如显示用户信息或者跳转到相应的页面。 详细视频演示 请联系我获取更详细的演示视频 功能截图: 在系统前台首页,调用`$route(newValue)`方法监听路由变化,根据当前的路由地址来确定活动菜单的索引,并且根据路由的哈希部分(即URL的`#`后面的部分)来判断是否需要滚动页面到顶部或者某个特定元素的位置。如果不是首页,会将页面滚动到指定元素处,否则滚动到页面顶部。另外通过`headportrait()`方法用于更新组件渲染点前用户头像。在用户登录后,后端返回了新的用户信息,需要及时更新页面上的用户头像信息。 论文参考: 论文参考: 1 绪 论 1.1研究背景与意义 1.2系统研究现状 1.3 论文主要工作内容 2 系统关键技术 2.1 java简介 2.2 MySQL数据库 2.3 B/S结构 2.4 SpringBoot框架 2.5 VUE框架 3 系统分析 3.1 系统可行性分析 3.1.1 技术可行性 3.1.2 操作可行性 3.1.3 经济可行性 3.1.4 法律可行性 3.2 系统性能分析 3.3 系统功能分析 3.4 系统流程分析 3.4.1 数据开发流程 3.