最近想给学生做个带页面的redis秒杀场景,网上找了很多都是java的,由于最近刚好学生也在学python,想着用python的相关web框架写个页面然后实现redis缓存数据库支持秒杀的场景。
页面效果如下:
先看下项目代码结构:
前端seckill.html页面代码
Redis高并发测试
使用Flask框架搭建的简单网页模拟Redis在“秒杀”场景中的使用
秒杀
后端代码:
# -*- coding:utf8 -*-
from flask import Flask, request, render_template, jsonify
from flask.json import loads
import random
import redis
app = Flask(__name__)
# 使用连接池和乐观锁处理连接超时和超卖问题,可能因锁的影响导致库存遗留
# 初始化Redis数据库 decode_responses=True:这样写存的数据是字符串格式
pyredis = redis.Redis(host='192.168.42.29', port=6379, db=0, decode_responses=True)
# pyredis.set(name='commodity:num',value=10)
pyredis.set(name='commodity:num', value=500)
pyredis.delete('user:id')
pyredis.sadd('user:id', 'null')
pyredis.close()
# 使用Redis连接池:处理连接超时问题
# Redis虽然是单线程但使用多路IO复用,性能瓶颈更有可能是建立连接的网络通信延迟
# 使用线程池,在连接建立后不会频繁释放、重建连接,而是返回连接池等待下次连接
pool = redis.ConnectionPool(host='192.168.42.29', port=6379, db=0)
# 原生AJAX请求
# 考虑并发请求(使用乐观锁和事务:处理超卖问题)
@app.route('/seckill', methods=['POST', 'GET'])
def fun_send():
if request.method == 'GET':
return render_template('seckill.html')
else:
pyredis = redis.Redis(connection_pool=pool)
rpipe = pyredis.pipeline(transaction=True)
baseid = request.form.get('msg', type=str).strip()
# print(baseid)
# 使用随机函数生成用户id,baseid使用postfile值
userid = baseid + str(random.randint(0, 100000))
# 增加乐观锁:解决超卖问题
rpipe.watch('commodity:num')
if int(rpipe.get('commodity:num')) < 1:
print('秒杀已结束')
return jsonify(user_id=userid, response_num=-1)
elif rpipe.sismember('user:id', userid):
print(f'用户%{userid}已秒杀过商品,不可重复秒杀!')
return jsonify(user_id=userid, response_num=-2)
else:
# 使用事务
rpipe.multi()
# 组队
rpipe.decr('commodity:num', amount=1)
rpipe.sadd('user:id', userid)
# 执行
reslist = rpipe.execute()
rpipe.close()
print(reslist)
print(f'用户{userid}成功秒杀商品!')
print('当前剩余商品数:%d' % (loads(pyredis.get('commodity:num'))))
return jsonify(user_id=userid, response_num=1)
# 以debug模式启动网页服务,这里的host填写自己windows服务器ip,因为一会要以linux的ab工具压力测试
app.run(debug=True, host='192.168.1.42', port=5000)
# 活动结束关闭网页打印出秒杀成功的用户
pyredis = redis.Redis(connection_pool=pool)
print('活动成功秒杀商品的用户:')
print(pyredis.smembers('user:id'))
print('当前剩余商品数:%d' % (loads(pyredis.get('commodity:num'))))
# ab(Apache bench)压力测试工具
# 对post请求进行压力测试
'''
在你的linux系统中使用yum install http-tools就有ab的压测工具了
ab -n 1000 -c 100 -p postfile -T 'application/x-www-form-urlencoded' http://192.168.1.42:5000/seckill
'''
# 创建postfile
'''
touch postfile
echo "msg=#ABCD" > postfile
'''
# 终端执行python脚本生成输出文件
'''
Linux:
chmod u+x flask_redis_web3.py
./flask_redis_web3.py > output 2>&1
Windos:
使用pycharm执行 页面访问http://你python项目服务器的ip:5000/seckill.html
'''
后端服务打开后在网页点击提交的效果:
前端页面提交一次请求
pycharm有日志打印
redis数据库有记录秒杀成功用户的id
前端页面多次点击秒杀会有多次库存消减的结果
后台数据库同时也会记录到
这里我们只是手动单次点击模拟不出来真实并发场景秒杀抢购的情况,因为实际上比如双11抢购秒杀iphone13是有几万几百万甚至上千万的人同时在线秒杀,所以我们这里就不能用单个用户模拟了(不过如果可以实现多个在线用户模拟点击秒杀按钮事件也是可以的,比如selenium),这里我们使用apache bench工具,也就是业内常说的ab工具,ab是apache自带的一个很好用的压力测试工具 ,可以模拟大并发量的用户请求。
ab安装:
通常使用yum安装就可以了
yum install -y http-tools
安装完成后可以使用ab --help看下帮助菜单,同时也能验证是否安装成功。
这里避免看不懂英文的,贴出中文
-n 要执行请求数,默认会执行一个请求
-c 一次执行多个请求的数量,默认是一次一个请求。
-t 用于基准测试的最大秒数,使用它在固定的总时间内对服务器进行基准测试。默认情况下,没有时间限制。
-s 超时之前等待的最大秒数。 默认值是30秒。
-b TCP发送/接收缓冲区的大小,以字节为单位。
-B 进行传出连接时要绑定的地址。
-p 包含数据到POST的文件。 还请记住设置-T。
-u 包含PUT数据的文件。 还请记住设置-T 。
-T Content-type用于POST / PUT数据的内容类型内容类型标题,例如:'application/x-www-form-urlencoded' 默认是'text/plain'
-v verbosity 要打印多少个疑难解答信息,设置详细级别 - 4和以上打印标题信息,3和以上打印响应代码(404,200等),2和以上打印警告和信息。
-w 在HTML表格中打印结果。
-i 使用HEAD代替GET。
-x 用作的属性的字符串。 属性被插入。
-y 用作的属性的字符串。
-z 用作的属性的字符串。
-C 将cookie添加到请求。 参数通常采用名称=值对的形式。 这个字段是可重复的。
-H attribute 例如 ‘Accept-Encoding: gzip’ 插入所有普通标题行之后。(重复)
-A 添加基本的WWW认证,该属性是一个冒号分隔的用户名和密码,auth-username:password
-P 添加基本代理验证,属性是一个冒号分隔的用户名和密码,proxy-auth-username:password
-X 使用代理服务器和端口号。
-V 打印版本号并退出。
-k 使用HTTP KeepAlive功能。
-d 不要显示百分点服务表。
-S 不要显示信心估计和警告。
-q 做超过150个请求时不要显示进度。
-g 将收集的数据输出到gnuplot格式文件。
-e 输出提供百分比的CSV文件。
-r 不要退出套接字接收错误。
-h 显示使用情况信息(此消息)。
-Z 密码套件指定SSL / TLS密码套件(请参阅openssl密码)
-f 指定SSL / TLS协议 (SSL3, TLS1, TLS1.1, TLS1.2 or ALL)
压力测试(这里模拟1000个请求量,并发数是100个):
ab -n 1000 -c 100 -p postfile -T 'application/x-www-form-urlencoded' http://192.168.1.42:5000/seckill
压力测试结果解释:
##首先是apache的版本信息
This is ApacheBench, Version 2.3
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.xxx.xxx/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking xxx.xxx.com (be patient)
Server Software: Apache/2.2.19 ##apache版本
Server Hostname: vm1.xxx.com ##请求的机子
Server Port: 80 ##请求端口
Document Path: /xxx.html
Document Length: 25 bytes ##页面长度
Concurrency Level: 100 ##并发数
Time taken for tests: 0.273 seconds ##共使用了多少时间
Complete requests: 1000 ##请求数
Failed requests: 0 ##失败请求
Write errors: 0
Total transferred: 275000 bytes ##总共传输字节数,包含http的头信息等
HTML transferred: 25000 bytes ##html字节数,实际的页面传递字节数
Requests per second: 3661.60 [#/sec] (mean) ##每秒多少请求,这个是非常重要的参数数值,服务器的吞吐量
Time per request: 27.310 [ms] (mean) ##用户平均请求等待时间
Time per request: 0.273 [ms] (mean, across all concurrent requests) ##服务器平均处理时间,也就是服务器吞吐量的倒数
Transfer rate: 983.34 [Kbytes/sec] received ##每秒获取的数据长度
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 2.3 0 16
Processing: 6 25 3.2 25 32
Waiting: 5 24 3.2 25 32
Total: 6 25 4.0 25 48
Percentage of the requests served within a certain time (ms)
50% 25 ## 50%的请求在25ms内返回
66% 26 ## 60%的请求在26ms内返回
75% 26
80% 26
90% 27
95% 31
98% 38
99% 43
100% 48 (longest request)
这时候发现后台redis数据库 记录了成功用户的随机id有458个,加上我前台页面点了两次总共有500个用户抢购成功。Redis数据库默认使用乐观锁,使用watch命令监控键值对,在事务对监控的键值对进行修改前,会比较此时的键值对和开启监视时的版本是否一致,若出现了修改,则不允许操作。
代码中设置的500个键值
记得要先打开redis数据库服务,再启动python网页服务,就可以用ab测试工具模拟高并发访问出现的异常。
注意事项 :
使用乐观锁和事务方式较好的解决了“超卖”问题,但在库存较多时,可能出现遗留库存。大量的请求在某个时间点同时发起,很多请求因为键值对发生了修改,版本不一致导致后续操作失败,因此库存可能没有一次清空,出现遗留。
建立连接时网络的延迟也是并发场景下重要影响因素,可能在查询时花费的时间比频繁建立、关闭连接所花费的时间还少,这时最好将连接方式改为使用连接池,连接建立后就不会频繁释放、重建连接,而是返回连接池等待下次连接。
代码中已经是连接池
连接池的作用就是为了提高性能。
连接池的作用:连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建连接和销毁连接的过程。这样性能上得到了提高。
关于原理可以看下这篇文章:连接池的作用及讲解_cbmljs的博客-CSDN博客_连接池
python页面秒杀参考牛人链接:使用Flask框架搭建的简单网页模拟Redis在“秒杀”场景中的使用(上) - 简书
你可能感兴趣的:(flask,redis,python)
关于Jedis和lettuce以及springDataRedis的一些区别
追光的人(陈聪)
第三阶段 redis相关 redis jedis java
1:三者其实都是用来操作redis的2:springDataRedis是对Jedis和lettuce的一系列封装,简化了很多方法3:公司里面之所以不怎么用Jedis也是因为其指令比较繁琐难以记忆,不如就用简化了的springDataRedis4:使用springDataRedis时,首先要导入springDataRedis的依赖,然后导入Jedis或者lettuce,如果是Jedis,需要再导入s
【Redis】Redis入门以及什么是分布式系统{Redis引入+分布式系统介绍}
阿猿收手吧!
# Redis redis 数据库 缓存
文章目录介绍redis的引入分布式系统单机架构应用服务和数据库服务分离【负载均衡】引入更多的应用服务器节点单机架构分布式是什么数据库分离和负载均衡理解负载均衡数据库读写分离引入缓存数据库分库分表引入微服务介绍Theopensource,in-memorydatastoreusedbymillionsofdevelopersasadatabases,cache,streamingengine,and
浅谈 redis
BigDeng_2014
工作 redis 数据库 java
redis特点:单进程多线程。主线程只有一个,还有两个副线程,用于文件和IO处理。可以集群部署,数据在各个机器上都有备份,挂了一台机器,可以从其他机器上找到数据。集群带来主从节点机制,一般至少需要3个节点来选举出主节点,也可以指定主节点。主从同步问题,会导致数据不一致。保证了分布式P和可用性A,牺牲了一致性C,可以保证最终一致性。比如数据恢复。把数据存放到内存,从内存查找数据比较快一些。有key-
python爬取自如网房源信息
2401_87368790
python 开发语言
本次爬取自如网房源信息所用到的知识点:requestsget请求lxml解析htmlXpathMongoDB存储正文分析目标站点url:http://hz.ziroom.com/z/nl/z3.html?p=2的p参数控制分页get请求获取单页源码--coding:utf-8--importrequestsimporttimefromrequests.exceptionsimportRequest
python的小技巧一
2401_87368790
python 开发语言
print(res)####一个数值的范围比较*常规的写法deftest_judge5(self):“”"判断一个值得的范围大小@return:“”"num=int(input(“请输入一个数字:”))ifnum>=0andnum>在判断字典的某一个key是否为空,可以用try…exception来实现>>>deftest_judge3(self):dict_data={“user_base”:{
Python演奏《起风了》
2401_86461228
python 数据库
代码:importctypesimportthreadingimporttimewinmm=ctypes.windll.winmmclassScale:Rest=0C8=108B7=107A7s=106A7=105G7s=104G7=103F7s=102F7=101E7=100D7s=99D7=98C7s=97C7=96B6=95A6s=94A6=93G6s=92G6=91F6s=90F6=89E
【Python】自动化神器PyAutoGUI —告别手动操作,一键模拟鼠标键盘,玩转微信及各种软件自动化
墩墩分墩
Python python 自动化 自动化脚本 自动化测试 pyautogui
文章目录1.PyAutoGUI简介2.不同操作系统引入模块3.全局延迟和临时休眠4,自动防故障功能5.获取屏幕分辨率—用于定位,这是最关键的,找到要点击的位置(像素坐标)6.获取鼠标位置7.判断坐标是否在屏幕范围内:8.鼠标移动8.1.鼠标移动的基本操作8.2.鼠标移动效果-缓动/渐变(Tween/Easing)9.鼠标点击10.鼠标滚轮控制11.鼠标拖拽12.键盘控制13.消息弹窗函数14.屏幕
pygame下载
2401_86461228
pygame python
pygame下载先进入pygame官网下载与你python对应的版本,然后解压:https://www.pygame.org/download.shtml然后打开cmd命令输入pipinstallpygame等待执行结束,然后打开python输入代码importpygame再运行,入出现以下情况说明安装成功注:我的python是32位的
Python3【字符串】:文本操作的瑞士军刀
李智 - 重庆
Python 精讲精练 - 从入门到实战 python 开发语言 经验分享 编程实战 趣味编程 编程技巧
Python3【字符串】:文本操作的瑞士军刀内容简介本系列文章是为Python3学习者精心设计的一套全面、实用的学习指南,旨在帮助读者从基础入门到项目实战,全面提升编程能力。文章结构由5个版块组成,内容层层递进,逻辑清晰。基础速通:n个浓缩提炼的核心知识点,夯实编程基础;经典范例:10个贴近实际的应用场景,深入理解Python3的编程技巧和应用方法;避坑宝典:10个典型错误解析,提供解决方案,帮助
使用Python实现并行计算算法:效率提升的利器
Echo_Wish
Python进阶 python 算法 开发语言
在处理大规模数据和计算密集型任务时,单线程的处理方式往往显得力不从心。并行计算作为一种提升计算效率的重要手段,能够充分利用多核处理器的优势,加速任务的完成。Python作为一种灵活且功能强大的编程语言,提供了丰富的并行计算工具。本文将详细介绍如何使用Python实现并行计算算法,并通过具体代码示例展示其实现过程。项目概述本项目旨在通过Python实现一个并行计算算法,展示如何利用Python的多线
华为OD机试2024年E卷-分苹果[100分]( Java | Python3 | C++ | C语言 | JsNode | Go )实现100%通过率
梅花C
华为OD题库 华为od
题目描述A、B两个人把苹果分为两堆,A希望按照他的计算规则等分苹果Q,他的计算规则是按照二进制加法计算,并且不计算进位12+5=9(1100+0101=9),B的计算规则是十进制加法,包括正常进位,B希望在满足A的情况下获取苹果重量最多。输入苹果的数量和每个苹果重量,输出满足A的情况下B获取的苹果总重量。如果无法满足A的要求,输出-1。数据范围1<=总苹果数量<=200001<=每个苹果重量<=1
python做并行计算_python做并行计算可以吗
角动量不守恒
python做并行计算
python可以做并行计算,下面是相关介绍:一、概览ParallelPython是一个python模块,提供在SMP(具有多个处理器或多核的系统)和集群(通过网络连接的计算机)上并行执行python代码的机制。它轻巧,易于安装和与其他python软件集成。ParallelPython是一个用纯Python编写的开源和跨平台模块。二、特性在SMP和集群上并行执行python代码易于理解和实现基于Jo
7. 马科维茨资产组合模型+金融研报AI长文本智能体(Qwen-Long)增强方案(理论+Python实战)
AI量金术师
金融资产组合模型进化论 人工智能 金融 python 机器学习 算法 大数据 线性回归
目录0.承前1.深度金融研报准备2.核心AI函数代码讲解2.1函数概述2.2输入参数2.3主要流程2.4异常处理2.5清理工作2.7get_ai_weights函数汇总3.汇总代码4.反思4.1不足之处4.2提升思路5.启后0.承前本篇博文是对前两篇文章,链接:5.马科维茨资产组合模型+政策意图AI金融智能体(Qwen-Max)增强方案(理论+Python实战)6.马科维茨资产组合模型+政策意图A
python字符串写入excel-python 将数据写入excel
weixin_37988176
摘要链接:python第三方库——xlrd和xlwt操作Excel文件学习:http://blog.csdn.net/wangkai_123456/article/details/50457284python操作Excel读写(使用xlrd和xlrt):http://blog.csdn.net/mr__fang/article/details/7089581Python中一般使用xlrd(exce
python并行计算
weixin_30894389
0.基础并行/发:multiprocessing/threading1.concurrent2.并发:asynico3.Ipython下的并行计算:使用ipyparallel库的IPython提供了前所未有的能力,将科学Python的探索能力与几乎即时访问多个计算核心相结合。系统可以直观地与本地或网络的计算节点集群进行交互,而不管集群的实现方式如何。这种易于交互使用帮助IPython和Python
Python并行计算:提高效率的利器
uote_e
python java linux Python
在现代计算领域中,处理大规模数据和复杂计算任务是常见的挑战。为了应对这些挑战,一种常见的解决方案是利用并行计算技术。Python作为一种流行的编程语言,也提供了强大的工具和库来支持并行计算。本文将介绍Python中的并行计算概念和技术,并提供一些示例代码。并行计算简介并行计算是指同时执行多个计算任务,以提高计算效率。在传统的串行计算中,任务是按顺序依次执行的,而并行计算可以将任务分解成多个子任务,
redis清空缓存
奔跑吧邓邓子
高效运维 缓存 redis 数据库
提示:“奔跑吧邓邓子”的高效运维专栏聚焦于各类运维场景中的实际操作与问题解决。内容涵盖服务器硬件(如IBMSystem3650M5)、云服务平台(如腾讯云、华为云)、服务器软件(如Nginx、Apache、GitLab、Redis、Elasticsearch、Kubernetes、Docker等)、开发工具(如Git、HBuilder)以及网络安全(如挖矿病毒排查、SSL证书配置)等多个方面。无论
Gemfire Geode redis区别
薛定谔的猫1982
系统架构 redis redis 数据库 缓存
GemFire、ApacheGeode和Redis是三种不同的数据管理工具,它们之间的区别具体如下:技术性质GemFire:是Pivotal公司(现隶属于VMware)推出的一款商业数据管理软件,主要用于构建分布式、高性能的数据密集型应用,为企业提供专业的数据管理解决方案,强调企业级的功能和支持。ApacheGeode:是基于GemFire的开源版本,由Apache软件基金会维护和管理。它继承了G
Python pip安装、使用详解
南山南北山北
Python语言 python pip 开发语言
1、Pythonpip简介pip是Python的软件包安装管理程序(你可以把它简单理解为类似Linux操作系统中的rpm/apt包管理工具),你可以使用pip从Python包索引和其他索引安装包。一般情况下,Python2.7/Python3.4以上版本默认自带安装了pip工具,当然,如果你的安装方式是如下3种之一,那么pip也会被自动安装:在虚拟环境中工作;使用从python.org下载的Pyt
PyQt6医疗多模态大语言模型(MLLM)实用系统框架构建初探(下.代码部分)
Allen_LVyingbo
医疗高效编程研发 python 健康医疗 python pyqt 语言模型 人工智能
医疗MLLM框架编程实现本医疗MLLM框架结合Python与PyQt6构建,旨在实现多模态医疗数据融合分析并提供可视化界面。下面从数据预处理、模型构建与训练、可视化界面开发、模型-界面通信与部署这几个关键部分详细介绍编程实现。6.1数据预处理在医疗MLLM框架中,多模态数据的预处理是非常关键的一步,它直接影响到后续模型的训练效果和性能。我们需要对医学影像、文本数据和音频数据分别进行预处理,以确保数
【Python】红旗超市线下缴电费用户数据分析及可视化(pandas+pyecharts)
风度78
百度 人工智能 python 机器学习 数据分析
场景分析:一部分用户习惯在红旗超市线下进行缴电费,电力公司希望了解哪些用户喜欢到线下缴费,具体分布在哪里,才能有针对性地宣传掌上电力app引导用户体验更高效的线上缴费方式,提升用户满意度。需求分析:首先要拿到红旗超市线下缴费清单数据,对所有数据进行隐私化处理,数据预览如图所示:可以看出台区名称为本项目的核心字段,通过台区匹配到经纬度信息,然后利用经纬度信息进行线下缴费热力图展示。同时可以提供分析报
Python之JSON数据结构
CL.LIANG
python基础 python json 数据结构
JSON数据结构介绍JSON(JavaScriptObjectNotation)优势:1.易于阅读和编写JSON的结构直观、简单,类似于键值对的形式,易于人类阅读和编写。与XML等数据格式相比,JSON的语法更简洁,没有复杂的标记符号。2.轻量化JSON格式相比其他数据格式(如XML),更简洁,没有多余的标记,数据体积较小,这使得数据传输更加高效,尤其是在网络应用中。3.与JavaScript天然
基于Python的天气数据可视化平台
q.q 1102255374
python 信息可视化 开发语言
摘要:随着社会多元化的不断发展,天气数据问题不可被简单的理解为是科学问题,更多的是环境问题,可以直接影响到人民的日常生活,甚至对一个国家的政治经济带来影响,由此可见,天气预测是一项非常重要的行业。基于此,我们就需要开发一个可视化的、综合的、方便人们查看的项目。基于Python的天气数据可视化设计与实现,通过使用基于Python的网络爬虫技术,能在短时内提取有价值的信息数据。然后根据数据的形式进行整
【SpringBoot 框架】- SpringBoot 配置文件
2401_84408404
程序员 spring boot java spring
【SpringBoot框架】-入门——环境搭建、工程热部署、idea快捷创建SpringBoot项目【SpringBoot框架】-SpringBoot原理分析【SpringBoot框架】-SpringBoot配置文件【SpringBoot框架】-SpringBoot整合Mybatis、Junit、Redis目录一、SpringBoot配置文件类型1.application.properties配置
华为OD机试E卷 --连续字母长度--24年OD统一考试(Java & JS & Python & C & C++)
飞码创造者
最新华为OD机试题库2024 java python 华为od javascript c语言
文章目录题目描述输入描述输出描述用例题目解析JS算法源码Java算法源码python算法源码c算法源码c++算法源码题目描述给定一个字符串,只包含大写字母,求在包含同一字母的子串中,长度第k长的子串的长度,相同字母只取最长的那个子串。输入描述第一行有一个子串(1<长度<=100),只包含大写字母。第二行为k的值输出描述输出连续出现次数第k多的字母的次数。用例输入AAAAHHHBBCDHHHH3输出
【Flask】以一种访问权限不允许的方式做了一个访问套接字的尝试。ERROR conda.cli.main_run:execute(49): `conda run python 1.py` fail
HEX9CF
Flask python flask conda
问题描述当尝试启动Flask程序时,出现了启动失败的情况。fromflaskimportFlaskapp=Flask(__name__)@app.route('index.php')defhello():return"Helloworld"if__name__=='__main__':app.run(host='127.0.0.1',port=80)并给出了如下错误提示:*ServingFlask
Python3 字典:解锁高效数据存储的钥匙
李智 - 重庆
Python 精讲精练 - 从入门到实战 python 经验分享 编程实战 趣味编程 编程技巧
Python3字典:解锁高效数据存储的钥匙内容简介本系列文章是为Python3学习者精心设计的一套全面、实用的学习指南,旨在帮助读者从基础入门到项目实战,全面提升编程能力。文章结构由5个版块组成,内容层层递进,逻辑清晰。基础速通:n个浓缩提炼的核心知识点,夯实编程基础;经典范例:10个贴近实际的应用场景,深入理解Python3的编程技巧和应用方法;避坑宝典:10个典型错误解析,提供解决方案,帮助读
Python 深度学习实战:生成对抗网络
AI天才研究院
深度学习实战 AI实战 AI大模型企业级应用开发实战 大数据 人工智能 语言模型 AI LLM Java Python 架构设计 Agent RPA
1.背景介绍生成对抗网络(GenerativeAdversarialNetwork,GAN)是近年来较火热的深度学习模型之一,其在图像合成、视频生成、文本数据生成等领域均取得了不俗的效果。与传统的机器学习模型不同,GAN可以生成真实有效的数据,无需人工标注数据。它由两部分组成:生成器(Generator)和判别器(Discriminator)。生成器通过学习,根据噪声或随机变量(latentvar
使用 Docker Compose 一键启动 Redis、MySQL 和 RabbitMQ
前端 贾公子
docker redis mysql
目录一、DockerCompose简介二、服务配置详解1.Redis配置2.MySQL配置3.RabbitMQ配置三、数据持久化与时间同步四、部署与管理五、总结目录挂载与卷映射的区别现代软件开发中,微服务架构因其灵活性和可扩展性而备受青睐。为了支持微服务的高效运行,我们需要构建一个强大且可靠的基础设施。本文将介绍如何使用DockerCompose部署Redis、MySQL和RabbitMQ,这些组
(c/c++)——C++和python的异常处理
想要躺平的一枚
C++ python c语言 c++
目录一、C++的异常处理二、python的异常处理——自定义异常一、C++的异常处理C++中选择用throw来抛出异常,catch来捕捉异常和处理try{//可能发生异常的语句//throw异常对象}catch(类型1){//发生类型1异常时的处理代码}catch(类型2){//发生类型2异常时的处理代码}catch(...){//不管什么异常,都在这里统一处理。}throw抛出异常对象,异常对象
jQuery 跨域访问的三种方式 No 'Access-Control-Allow-Origin' header is present on the reque
qiaolevip
每天进步一点点 学习永无止境 跨域 众观千象
XMLHttpRequest cannot load http://v.xxx.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access. test.html:1
mysql 分区查询优化
annan211
java 分区 优化 mysql
分区查询优化
引入分区可以给查询带来一定的优势,但同时也会引入一些bug.
分区最大的优点就是优化器可以根据分区函数来过滤掉一些分区,通过分区过滤可以让查询扫描更少的数据。
所以,对于访问分区表来说,很重要的一点是要在where 条件中带入分区,让优化器过滤掉无需访问的分区。
可以通过查看explain执行计划,是否携带 partitions
MYSQL存储过程中使用游标
chicony
Mysql存储过程
DELIMITER $$
DROP PROCEDURE IF EXISTS getUserInfo $$
CREATE PROCEDURE getUserInfo(in date_day datetime)-- -- 实例-- 存储过程名为:getUserInfo-- 参数为:date_day日期格式:2008-03-08-- BEGINdecla
mysql 和 sqlite 区别
Array_06
sqlite
转载:
http://www.cnblogs.com/ygm900/p/3460663.html
mysql 和 sqlite 区别
SQLITE是单机数据库。功能简约,小型化,追求最大磁盘效率
MYSQL是完善的服务器数据库。功能全面,综合化,追求最大并发效率
MYSQL、Sybase、Oracle等这些都是试用于服务器数据量大功能多需要安装,例如网站访问量比较大的。而sq
pinyin4j使用
oloz
pinyin4j
首先需要pinyin4j的jar包支持;jar包已上传至附件内
方法一:把汉字转换为拼音;例如:编程转换后则为biancheng
/**
* 将汉字转换为全拼
* @param src 你的需要转换的汉字
* @param isUPPERCASE 是否转换为大写的拼音; true:转换为大写;fal
微博发送私信
随意而生
微博
在前面文章中说了如和获取登陆时候所需要的cookie,现在只要拿到最后登陆所需要的cookie,然后抓包分析一下微博私信发送界面
http://weibo.com/message/history?uid=****&name=****
可以发现其发送提交的Post请求和其中的数据,
让后用程序模拟发送POST请求中的数据,带着cookie发送到私信的接入口,就可以实现发私信的功能了。
jsp
香水浓
jsp
JSP初始化
容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果您需要执行自定义的JSP初始化任务,复写jspInit()方法就行了
JSP执行
这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。
当JSP网页完成初始化后
在 Windows 上安装 SVN Subversion 服务端
AdyZhang
SVN
在 Windows 上安装 SVN Subversion 服务端2009-09-16高宏伟哈尔滨市道里区通达街291号
最佳阅读效果请访问原地址:http://blog.donews.com/dukejoe/archive/2009/09/16/1560917.aspx
现在的Subversion已经足够稳定,而且已经进入了它的黄金时段。我们看到大量的项目都在使
android开发中如何使用 alertDialog从listView中删除数据?
aijuans
android
我现在使用listView展示了很多的配置信息,我现在想在点击其中一条的时候填出 alertDialog,点击确认后就删除该条数据,( ArrayAdapter ,ArrayList,listView 全部删除),我知道在 下面的onItemLongClick 方法中 参数 arg2 是选中的序号,但是我不知道如何继续处理下去 1 2 3
jdk-6u26-linux-x64.bin 安装
baalwolf
linux
1.上传安装文件(jdk-6u26-linux-x64.bin)
2.修改权限
[root@localhost ~]# ls -l /usr/local/jdk-6u26-linux-x64.bin
3.执行安装文件
[root@localhost ~]# cd /usr/local
[root@localhost local]# ./jdk-6u26-linux-x64.bin&nbs
MongoDB经典面试题集锦
BigBird2012
mongodb
1.什么是NoSQL数据库?NoSQL和RDBMS有什么区别?在哪些情况下使用和不使用NoSQL数据库?
NoSQL是非关系型数据库,NoSQL = Not Only SQL。
关系型数据库采用的结构化的数据,NoSQL采用的是键值对的方式存储数据。
在处理非结构化/半结构化的大数据时;在水平方向上进行扩展时;随时应对动态增加的数据项时可以优先考虑使用NoSQL数据库。
在考虑数据库的成熟
JavaScript异步编程Promise模式的6个特性
bijian1013
JavaScript Promise
Promise是一个非常有价值的构造器,能够帮助你避免使用镶套匿名方法,而使用更具有可读性的方式组装异步代码。这里我们将介绍6个最简单的特性。
在我们开始正式介绍之前,我们想看看Javascript Promise的样子:
var p = new Promise(function(r
[Zookeeper学习笔记之八]Zookeeper源代码分析之Zookeeper.ZKWatchManager
bit1129
zookeeper
ClientWatchManager接口
//接口的唯一方法materialize用于确定那些Watcher需要被通知
//确定Watcher需要三方面的因素1.事件状态 2.事件类型 3.znode的path
public interface ClientWatchManager {
/**
* Return a set of watchers that should
【Scala十五】Scala核心九:隐式转换之二
bit1129
scala
隐式转换存在的必要性,
在Java Swing中,按钮点击事件的处理,转换为Scala的的写法如下:
val button = new JButton
button.addActionListener(
new ActionListener {
def actionPerformed(event: ActionEvent) {
Android JSON数据的解析与封装小Demo
ronin47
转自:http://www.open-open.com/lib/view/open1420529336406.html
package com.example.jsondemo;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
impor
[设计]字体创意设计方法谈
brotherlamp
UI ui自学 ui视频 ui教程 ui资料
从古至今,文字在我们的生活中是必不可少的事物,我们不能想象没有文字的世界将会是怎样。在平面设计中,UI设计师在文字上所花的心思和功夫最多,因为文字能直观地表达UI设计师所的意念。在文字上的创造设计,直接反映出平面作品的主题。
如设计一幅戴尔笔记本电脑的广告海报,假设海报上没有出现“戴尔”两个文字,即使放上所有戴尔笔记本电脑的图片都不能让人们得知这些电脑是什么品牌。只要写上“戴尔笔
单调队列-用一个长度为k的窗在整数数列上移动,求窗里面所包含的数的最大值
bylijinnan
java 算法 面试题
import java.util.LinkedList;
/*
单调队列 滑动窗口
单调队列是这样的一个队列:队列里面的元素是有序的,是递增或者递减
题目:给定一个长度为N的整数数列a(i),i=0,1,...,N-1和窗长度k.
要求:f(i) = max{a(i-k+1),a(i-k+2),..., a(i)},i = 0,1,...,N-1
问题的另一种描述就
struts2处理一个form多个submit
chiangfai
struts2
web应用中,为完成不同工作,一个jsp的form标签可能有多个submit。如下代码:
<s:form action="submit" method="post" namespace="/my">
<s:textfield name="msg" label="叙述:">
shell查找上个月,陷阱及野路子
chenchao051
shell
date -d "-1 month" +%F
以上这段代码,假如在2012/10/31执行,结果并不会出现你预计的9月份,而是会出现八月份,原因是10月份有31天,9月份30天,所以-1 month在10月份看来要减去31天,所以直接到了8月31日这天,这不靠谱。
野路子解决:假设当天日期大于15号
mysql导出数据中文乱码问题
daizj
mysql 中文乱码 导数据
解决mysql导入导出数据乱码问题方法:
1、进入mysql,通过如下命令查看数据库编码方式:
mysql> show variables like 'character_set_%';
+--------------------------+----------------------------------------+
| Variable_name&nbs
SAE部署Smarty出现:Uncaught exception 'SmartyException' with message 'unable to write
dcj3sjt126com
PHP smarty sae
对于SAE出现的问题:Uncaught exception 'SmartyException' with message 'unable to write file...。
官方给出了详细的FAQ:http://sae.sina.com.cn/?m=faqs&catId=11#show_213
解决方案为:
01
$path
《教父》系列台词
dcj3sjt126com
Your love is also your weak point.
你的所爱同时也是你的弱点。
If anything in this life is certain, if history has taught us anything, it is
that you can kill anyone.
不顾家的人永远不可能成为一个真正的男人。 &
mongodb安装与使用
dyy_gusi
mongo
一.MongoDB安装和启动,widndows和linux基本相同
1.下载数据库,
linux:mongodb-linux-x86_64-ubuntu1404-3.0.3.tgz
2.解压文件,并且放置到合适的位置
tar -vxf mongodb-linux-x86_64-ubun
Git排除目录
geeksun
git
在Git的版本控制中,可能有些文件是不需要加入控制的,那我们在提交代码时就需要忽略这些文件,下面讲讲应该怎么给Git配置一些忽略规则。
有三种方法可以忽略掉这些文件,这三种方法都能达到目的,只不过适用情景不一样。
1. 针对单一工程排除文件
这种方式会让这个工程的所有修改者在克隆代码的同时,也能克隆到过滤规则,而不用自己再写一份,这就能保证所有修改者应用的都是同一
Ubuntu 创建开机自启动脚本的方法
hongtoushizi
ubuntu
转载自: http://rongjih.blog.163.com/blog/static/33574461201111504843245/
Ubuntu 创建开机自启动脚本的步骤如下:
1) 将你的启动脚本复制到 /etc/init.d目录下 以下假设你的脚本文件名为 test。
2) 设置脚本文件的权限 $ sudo chmod 755
第八章 流量复制/AB测试/协程
jinnianshilongnian
nginx lua coroutine
流量复制
在实际开发中经常涉及到项目的升级,而该升级不能简单的上线就完事了,需要验证该升级是否兼容老的上线,因此可能需要并行运行两个项目一段时间进行数据比对和校验,待没问题后再进行上线。这其实就需要进行流量复制,把流量复制到其他服务器上,一种方式是使用如tcpcopy引流;另外我们还可以使用nginx的HttpLuaModule模块中的ngx.location.capture_multi进行并发
电商系统商品表设计
lkl
DROP TABLE IF EXISTS `category`; -- 类目表
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `category` (
`id` int(11) NOT NUL
修改phpMyAdmin导入SQL文件的大小限制
pda158
sql mysql
用phpMyAdmin导入mysql数据库时,我的10M的
数据库不能导入,提示mysql数据库最大只能导入2M。
phpMyAdmin数据库导入出错: You probably tried to upload too large file. Please refer to documentation for ways to workaround this limit.
Tomcat性能调优方案
Sobfist
apache jvm tomcat 应用服务器
一、操作系统调优
对于操作系统优化来说,是尽可能的增大可使用的内存容量、提高CPU的频率,保证文件系统的读写速率等。经过压力测试验证,在并发连接很多的情况下,CPU的处理能力越强,系统运行速度越快。。
【适用场景】 任何项目。
二、Java虚拟机调优
应该选择SUN的JVM,在满足项目需要的前提下,尽量选用版本较高的JVM,一般来说高版本产品在速度和效率上比低版本会有改进。
J
SQLServer学习笔记
vipbooks
数据结构 xml
1、create database school 创建数据库school
2、drop database school 删除数据库school
3、use school 连接到school数据库,使其成为当前数据库
4、create table class(classID int primary key identity not null)
创建一个名为class的表,其有一