• 浅谈如何提高网站的并发量(性能)


    前端处理

        前端的静态文件处理:买cdn

     cdn

        cdn:接收到的前端网页静态资源放到cdn上

     前端缓存

        控制图片的缓存事件(HTTP响应中max-age)

     精灵图

    后台处理

      在后台:请求来了之后后台承受的并发量是有限的

      解决办法:

      百度:累加服务器

     集群化部署

      集群化部署(Nginx、lvs)----->用缓存(Redis)/不从数据库里拿数据,直接从缓存里面拿

     用缓存

      用缓存(Redis)---->如果缓存里面没有然后进视图函数里拿(涉及到同步异步的问题)

     同步,异步

      同步异步:同步的话一直链接着,特别耗费时间和资源,可以用celery框架处理

     数据库读写分离、分库分表

      然后到数据库这一层----->涉及到读写分离,分库分表

      读写分离:  

      本质上就是多数据库,比如两个数据库,一个用来读取,一个用来写

      数据库同步做好主从,一个指定用来读,一个指定用来写

      逻辑:DATABASES字典的default里面配置两个数据库(default,db1),一个项目依赖两个数据库,链接到服务器,两个数据库好数据同步

      手动方式来实现数据库的读写分离:

      settings.py 

      DATABASES = {
    
          'default':{
        
                  'ENGINE':'django.db.backends.sqlite3',
                  'KAME':os.path.join(BASE_DIR, 'db.sqlite3'),
                 },   
    'db1':{       'ENGINE':'django.db.backends.sqlite3',    'KAME':os.path.join(BASE_DIR, 'db2.sqlite3'),    }   }


    在urls.py
    from django.conf.urls import uel
       from django.contrib import admin
       from app01 import views
      
       urlpatterns = [
        url(r'^admin/',admin.site.urls),
        url(r'^test1/',views.test),
        url(r'^test2/',views.test2),
      ]

       在views.py 

       from django.shortcuts import render,Httpserponse

       from app01 import models

       def test(request):
         #默认写数据,写到default中
         models.User.objects.using('db1').create(name='wxb',pwd='123')
         return HttpResponse('新增成功')

       def test2(request):
         #using('default'),是queryset对象的方法
         res = models.User.objects.all().using('defult')
         print(res)     
         return HttpResponse('查询成功')
           

       在models.py里创建两个表,然后把两张表同步到数据库中:

      class User(models.Model):
          name = models.CharField(max_length = 32)
          pwd = models.CharField(max_length = 32)

         然后做数据库迁移(makemigrations),在执行migrate--database = db1可以指定把哪张表同步到哪个数据库里

        python manage.py makemigrations   #在migrations文件夹下 生成记录,迁移前检查

        python manage.py migrate   #真正执行数据库迁移命令,该命令执行之后创建表

      在models里面

      通过配置文件实现数据库的读写分离,通过django官网提供的class Routerl

        新建myrouter.py脚本,定义Router类:   

        class Router:

          def db_for_read(self, model, **hints):

            return default'

          def db_for_write(self, model, **hints):

            return 'db1'

        然后配置Router

        在settings.py中指定DATABASE_ROUTERS

        DATABASE_ROUTER = ['myrouter.Router',]

     数据库做集群

      同样数据库也可以做集群

     用Redis或者MongoDB

      mysql数据性能低,可以用Redis来存储数据,以及MongoDB存储

     代码逻辑优化

      代码逻辑的优化

     SQL语句的优化

        建索引

        orm(default与only)

      

  • 相关阅读:
    LibreOJ 6003. 「网络流 24 题」魔术球 贪心或者最小路径覆盖
    LibreOJ #6002. 「网络流 24 题」最小路径覆盖
    LibreOJ #6000. 「网络流 24 题」搭配飞行员 最大匹配
    LibreOJ 2003. 「SDOI2017」新生舞会 基础01分数规划 最大权匹配
    hdu 1011 Starship Troopers 树形背包dp
    Codeforces Round #135 (Div. 2) D. Choosing Capital for Treeland dfs
    hdu 6199 gems gems gems dp
    hdu 5212 Code 筛法或者莫比乌斯
    hdu 3208 Integer’s Power 筛法
    hdu 5120 Intersection 两个圆的面积交
  • 原文地址:https://www.cnblogs.com/Rglin/p/10963643.html
Copyright © 2020-2023  润新知