当前位置: 首页 > news >正文

本地网站可以做吗宣传片拍摄方案策划书

本地网站可以做吗,宣传片拍摄方案策划书,wordpress 显示评论数,md风格WordPress开发服务器系统的时候#xff0c;程序的性能是至关重要的。经过我们前面框架的学习#xff0c;得知一个请求的处理基本分为接受http请求、数据库处理、返回json数据#xff0c;而这3个部分中就属链接数据库请求的响应速度最慢#xff0c;因为数据库操作涉及到数据库服务处理…      开发服务器系统的时候程序的性能是至关重要的。经过我们前面框架的学习得知一个请求的处理基本分为接受http请求、数据库处理、返回json数据而这3个部分中就属链接数据库请求的响应速度最慢因为数据库操作涉及到数据库服务处理请求读写硬盘数据      而操作数据库的增、删、改、查中查询属于读取数据而删除、修改、增加属于写入数据我们做缓存也主要是给查询这块的数据做优化 一、缓存的原理 众所周知从内存中读写数据的速度要比去磁盘中读写的速度要快而缓存就是先将我们要查询的数据从mysql数据库中读取一份然后放到内存中因为避免了从硬盘读取表记录的操作程序访问内存的速度要比访问数据库快很多特别是当一个读操作要涉及到多张表的联合查询或者这些表比较大就会非常耗时       而做缓存可以使用多种方案最简单的直接通过python的字典做缓存但这种方法同时也具有很大的弊端比如不支持分布式当业务量大的时候部署到不同主机会造成严重的资源占用问题并且当有一台主机上的缓存数据需要更新时要通知其他节点一起更新比较麻烦 还要防止 数据同步前 可能不同节点给出的数据不一致的问题而Redis 和 Memcached 是目前两种主流的缓存服务方案我们这里使用redis做缓存 1、redis部署 网上装redis的教程很多我这里不在赘述为了省事直接用docker部署了 mkdir /apps/demo/redis/{conf,data} -p cd /apps/demo/redis#拉取镜像 docker pull redis:6.2.7 vi conf/redis.conf bind 0.0.0.0maxmemory 4GB maxmemory-policy allkeys-lru maxmemory-samples 10tcp-backlog 511aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes rdbcompression yes rdbchecksum yesaof-rewrite-incremental-fsync yesrequirepass 123456 rename-command FLUSHDB rename-command FLUSHALL rename-command CONFIG activerehashing yes dynamic-hz yes hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-entries 512 list-max-ziplist-value 64 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 配置说明 bind 0.0.0.0 #允许外部访问## 内存优化 maxmemory 4GB # 设置Redis实例的最大内存限制 maxmemory-policy allkeys-lru # 设置在达到最大内存限制时所采取的淘汰策略为LRU最近最少使用 maxmemory-samples 10 # 指定在key的过期删除策略中随机抽取的样本数目## 网络优化 tcp-backlog 511 # 设置内核中由Redis监听的TCP连接的最大长度## 持久化优化 aof-rewrite-incremental-fsync yes # 启用AOFAppend Only File增量式文件同步 rdb-save-incremental-fsync yes # 使用增量传输来持久化RDB文件 rdbcompression yes # 开启RDB文件的压缩 rdbchecksum yes # 启用RDB文件的校验和## AOF压缩 aof-rewrite-incremental-fsync yes # 启用AOFAppend Only File增量式文件同步## 安全 requirepass yourpassword # 设置Redis服务器连接密码 rename-command FLUSHDB # 重命名FLUSHDB命令 rename-command FLUSHALL # 重命名FLUSHALL命令 rename-command CONFIG # 重命名CONFIG命令## 性能优化 activerehashing yes # 启用集群环境的rehashing对已有的键表重新分布 dynamic-hz yes hash-max-ziplist-entries 512 # 设置hash结构的压缩阈值 hash-max-ziplist-value 64 # 设置hash结构的压缩阈值 list-max-ziplist-entries 512 # 设置list结构的压缩阈值 list-max-ziplist-value 64 # 设置list结构的压缩阈值 set-max-intset-entries 512 # 设置intset编码的集合的最大元素数量 zset-max-ziplist-entries 128 # 设置zset结构的压缩阈值 zset-max-ziplist-value 64 # 设置zset结构的压缩阈值 2、启动服务 vi ./run.sh docker run -p 36379:6379 --name redis \-v ./data:/data \-v ./conf/redis.conf:/etc/redis/redis.conf \-d redis:6.2.7 \redis-server /etc/redis/redis.conf 运行 sh run.sh 二、Redis使用 Redis是一个数据仓库服务这个仓库里面可以存储很多 数据对象 存储的每个数据对象都有一个key根据这个key可以找到这个对象。 要添加一个数据对象必须为这个数据对象指定一个key就像指定一个房间号 Redis key 对应的value支持多种数据对象可以是字符串、列表、哈希对象 查阅资料的时候发现有一篇同样讲缓存的帖子很不错这里留个档 https://blog.csdn.net/qq_43745578/article/details/128569060 1、登录redis #登录redis容器 docker exec -it redis bash#通过redis客户端登录数据库 redis-cli -h 127.0.0.1#认证用户 auth 123456 2、redis数据库切换 redis数据库和mysql一样都是包含很多个数据库的编号为0-15通过select 命令切换不同的数据库使用每个数据库我们可以看作是一个仓库用来存放货物默认编号为0 现在我们切换到1号数据库然后进行下面的仓库切换完后能看到端口后面跟着个1 select 1 3、添加数据 上面说了redis可以存放各种类型的数据字符串、列表、哈希对象等等而根据不同类型的数据redis也有想对应的命令比如我们要存入的数据是一个字符串那么新增的命令就是set而对应的查询命令为 get  key名 127.0.0.1:6379[1] set zhangsan:1 ynby OK127.0.0.1:6379[1] get zhangsan:1 ynby4、查询所有的key 很多时候我们是不记得key的名称就需要模糊查询一下key有那些 127.0.0.1:6379[1] keys zha* 1) zhangsan:1 127.0.0.1:6379[1] 5、删除数据 127.0.0.1:6379[1] del zhangsan:1 (integer) 1 127.0.0.1:6379[1] keys * (empty array)6、添加哈希值 如果我们要存入 Redis的对象比较复杂比如用户信息包括等级、金币、姓名等等 可以使用哈希Hash对象Redis 哈希对象的每个字段 术语称之为 field 存入Hashes就使用客户端命令 hmset 或者 hset #添加hash值 127.0.0.1:6379[1] hmset user:2001 level 10 coin 1977 name 你好 OK#获取单个字段的值hget 127.0.0.1:6379[1] hget user:2001 coin 1977#获取所有字段的值hgetall 127.0.0.1:6379[1] hgetall user:2001 1) level 2) 10 3) coin 4) 1977 5) name 6) \xe4\xbd\xa0\xe5\xa5\xbd上面案例中的name字段的值被utf8编码了客户端程序在使用时根据需要进行相应解码 7、定义哈希表 既然 Hash 本身就是一个字典我们通常还会把整个用户表都直接放入 一个hash里面 可以给这个hash对应的对象 起一个key名为 usertable #添加表数据 hmset usertable u2001 id:2001|level:10|coin:1977|name:张三 hmset usertable u2002 id:2002|level:13|coin:1927|name:李四#查询表数据 127.0.0.1:6379[1] hget usertable u2002 id:2002|level:13|coin:1927|name:\xe6\x9d\x8e\xe5\x9b\x9b 步骤6、7保存的方法各有个的缺点方案6是方便修改单个field的值但是容易出现大量的key方案7虽然全局查看key较为方便但没办法修改单个field的值只能一起修改 三、Django项目缓存配置 1、安装redis库 pip install django-redis 2、配置django全局缓存 Django_demo/Django_demo/settings.py CACHES {default: {BACKEND: django_redis.cache.RedisCache,LOCATION: redis://101.43.156.78:36379/1,OPTIONS: {CLIENT_CLASS: django_redis.client.DefaultClient,# 密码PASSWORD: 123456, #没有密码就去掉这行}} } 上面的这段配置可以放在数据库 DATABASES 配置项的下方。LOCATION 配置项最后的数字1 是 DB number指定redis的数据库号 3、使用缓存配置 不是任何数据库的数据都应该使用缓存至少满足两个要求频繁读取的数据 、较少变动的数据 如果这个数据写入后基本就不会在修改了但是需要经常性的读取那么他就是一个值得缓存的数据 举个例子 在前面编写的案例中属于药品的信息就符合上面的两点要求我们可以在处理列出药品 的API接口 的代码中把数据库读出的内容进行缓存这里我们采用上面的缓存方案二(redis使用-7把所有的 列出药品都放在一个哈希对象中       首先我们需要为 列出药品的缓存 创建一个key名字为 medicinelist因为我们将来会有很多种类型的数据要缓存它们有不同的key所以建议统一放在配置文件 settings.py 中 Django_demo/Django_demo/settings.py # 记录全局的缓存key防止重复 class CK:# 列出药品 的 缓存 keyMedineList list_medicine# 列出客户 的 缓存 keyCustomerList list_customer 这样的好处是放在一起如果有重复的key名比较容易发现 4、修改查询数据的缓存配置 我们将原先的查询数据库返回的数据交给redis Django_demo/mgr/medicine.py #添加 from Django_demo import settings import json import traceback from django.core.paginator import Paginator, EmptyPage from django.db.models import Q from django_redis import get_redis_connection# 获取一个和Redis服务的连接 rconn get_redis_connection(default)def listmedicine(request):try:# 查看是否有 关键字 搜索 参数keywords request.params.get(keywords,None)# 要获取的第几页pagenum request.params[pagenum]# 每页要显示多少条记录pagesize request.params[pagesize]# 先看看缓存中是否有cacheField f{pagesize}|{pagenum}|{keywords} # 缓存 fieldcacheObj rconn.hget(settings.CK.MedineList,cacheField)# 缓存中有需要反序列化if cacheObj:print(缓存命中)retObj json.loads(cacheObj)# 如果缓存中没有再去数据库中查询else:print(缓存中没有)# 返回一个 QuerySet 对象 包含所有的表记录qs Medicine.objects.values().order_by(-id)if keywords:conditions [Q(name__containsone) for one in keywords.split( ) if one]query Q()for condition in conditions:query conditionqs qs.filter(query)# 使用分页对象设定每页多少条记录pgnt Paginator(qs, pagesize)# 从数据库中读取数据指定读取其中第几页page pgnt.page(pagenum)# 将 QuerySet 对象 转化为 list 类型retlist list(page)retObj {ret: 0, retlist: retlist,total: pgnt.count}# 存入缓存rconn.hset(settings.CK.MedineList,cacheField,json.dumps(retObj))# total指定了 一共有多少数据return JsonResponse(retObj)except EmptyPage:return JsonResponse({ret: 0, retlist: [], total: 0})except:print(traceback.format_exc())return JsonResponse({ret: 2, msg: f未知错误\n{traceback.format_exc()}}) 这样我们就确保了处理列出药品的请求时优先从缓存中读取如果没有再从数据库读取。 并且数据库读取到数据后存入缓存这样下次同样的请求就可以从缓存中获取数据了 5、添加缓存数据更新 使用缓存一定要注意缓存数据的更新我们前面做完了缓存如果我们后面对药品数据做出了添加、修改、删除的操作那么缓存里面的数据就和数据库不一致了如果我们每次都更新缓存是很麻烦的简单的方法就是直接删除对应的缓存数据这样下次请求时缓存中没了数据还是会去数据库中读取的这样就能拿到最新的数据到缓存中 def addmedicine(request):info request.params[data]# 从请求消息中 获取要添加客户的信息# 并且插入到数据库中medicine Medicine.objects.create(nameinfo[name] ,sninfo[sn] ,descinfo[desc])# 同时删除整个 medicine 缓存数据# 因为不知道这个添加的药品会影响到哪些列出的结果# 只能全部删除rconn.delete(settings.CK.MedineList)return JsonResponse({ret: 0, id:medicine.id})def modifymedicine(request):# 从请求消息中 获取修改客户的信息# 找到该客户并且进行修改操作medicineid request.params[id]newdata request.params[newdata]try:# 根据 id 从数据库中找到相应的客户记录medicine Medicine.objects.get(idmedicineid)except Medicine.DoesNotExist:return {ret: 1,msg: fid 为{medicineid}的药品不存在}if name in newdata:medicine.name newdata[name]if sn in newdata:medicine.sn newdata[sn]if desc in newdata:medicine.desc newdata[desc]# 注意一定要执行save才能将修改信息保存到数据库medicine.save()# 同时删除整个 medicine 缓存数据# 因为不知道这个修改的药品会影响到哪些列出的结果# 只能全部删除rconn.delete(settings.CK.MedineList)return JsonResponse({ret: 0})def deletemedicine(request):medicineid request.params[id]try:# 根据 id 从数据库中找到相应的药品记录medicine Medicine.objects.get(idmedicineid)except Medicine.DoesNotExist:return {ret: 1,msg: fid 为{medicineid}的客户不存在}# delete 方法就将该记录从数据库中删除了medicine.delete()# 同时删除整个 medicine 缓存数据# 因为不知道这个删除的药品会影响到哪些列出的结果# 只能全部删除rconn.delete(settings.CK.MedineList)return JsonResponse({ret: 0}) 6、测试访问药品表 下面测试一下查询药品表后redis是否缓存成功 vi main.py import requests,pprint#添加认证 payload {username: root,password: 12345678 } #发送登录请求 response requests.post(http://127.0.0.1:8000/api/mgr/signin,datapayload) #拿到请求中的认证信息进行访问 set_cookie response.headers.get(Set-Cookie)# 构建添加 客户信息的 消息体是json格式 payload {action: list_medicine,pagenum: 1,pagesize : 3 }urlhttp://127.0.0.1:8000/api/mgr/medicines/if set_cookie:# 将Set-Cookie字段的值添加到请求头中headers {Cookie: set_cookie}# 发送请求给web服务response requests.post(url,jsonpayload,headersheaders)pprint.pprint(response.json())返回 {ret: 0,retlist: [{desc: gmkl, id: 6, name: gmkl, sn: 111}],total: 1} 然后我们登录redis查看有没有我们写入的数据 127.0.0.1:6379[1] hgetall list_medicine 1) 3|1|None 2) {\ret\: 0, \retlist\: [{\id\: 6, \name\: \gmkl\, \sn\: \111\, \desc\: \gmkl\}], \total\: 1}7、测试添加药品表 vi main1.py import requests,pprint#添加认证 payload {username: root,password: 12345678 } #发送登录请求 response requests.post(http://127.0.0.1:8000/api/mgr/signin,datapayload) #拿到请求中的认证信息进行访问 set_cookie response.headers.get(Set-Cookie)# 构建添加 客户信息的 消息体是json格式 payload {action:add_medicine,data:{name:lhms,sn:test,desc:test,} }urlhttp://127.0.0.1:8000/api/mgr/medicines/if set_cookie:# 将Set-Cookie字段的值添加到请求头中headers {Cookie: set_cookie}# 发送请求给web服务response requests.post(url,jsonpayload,headersheaders)pprint.pprint(response.json())返回 {id: 7, ret: 0} 我们增加、删除、修改都会将原先redis中的缓存清理掉 我们在用第6步的访问在查询下查看redis缓存数据数据 127.0.0.1:6379[1] hgetall list_medicine 1) 3|1|None 2) {\ret\: 0, \retlist\: [{\id\: 7, \name\: \lhms\, \sn\: \test\, \desc\: \test\}, {\id\: 6, \name\: \gmkl\, \sn\: \111\, \desc\: \gmkl\}], \total\: 2}缓存成功~
http://www.zqtcl.cn/news/668861/

相关文章:

  • 北京正规制作网站公司wordpress 获取图片地址
  • 大学路网站建设推广图片素材
  • wordpress 创建网站搜索引擎优化代理
  • 设计网站用什么软件盈江城乡建设局网站
  • 网站建设模式有哪些内容seo品牌
  • 衡水做网站服务商济南如何挑选网站建设公司
  • 全屏的网站制作企业网站欢迎界面素材
  • 视频网站切片怎么做网站建设可自学吗
  • 本地推广平台网站seo优化如何做
  • 网站建设费算费用还是固定资产百度秒收录
  • 企业建站系统营销吧tt团队韩国企业网站设计
  • 上海嘉定网站建设公司有没有知道网址的
  • 电商网站的银行支付接入该怎么做杭州微信小程序外包
  • 余姚网站推广策划案门户网站做等保需要备案哪些
  • 网站关键字优化公司wordpress制作百度地图xml
  • 网站建设进度总结网站文件权限设置
  • 织梦网站如何做地区分站厦门网站代理
  • 模板做网站优缺点网络营销推广公司获客
  • 如何做网站充值用flash做网站超链接
  • 网站图片管理系统临沂百度推广多少钱
  • 渭南建设用地规划查询网站教育局两学一做网站
  • 无锡专业网站制作的公司长春seo技术
  • 东莞做网站哪家最好电商网站支付接口
  • 西安火车站网站建设深圳做百度网站
  • asp网站助手金融学类就业方向及就业前景
  • 用点心做点心官方网站现在手机网站用什么做的好
  • 唐山市路桥建设有限公司网站专门写文章的网站
  • 东莞食品网站建设湖南企业竞价优化
  • 吉林网站建设找哪家湛江大型网站模板建设
  • 中国建设监理业协会网站国产cms