.NET 品质优化小技巧

Redis听到最多的一句话正是Redis的选拔难啊?简单,Redis用好简单啊?不便于,有时候觉得那句话说的挺好,但又是让读者挺心里咯噔一下的,还比不上不说!

在上一篇中牵线了质量优化的概念、内部存款和储蓄器泄漏和性质优化措施Android质量优化我们后续说说Android品质优化

一、Http协议

Intro

前边做了短信发送速度的升级换代,在济颠的携带下,发送短信的快慢有了庞然大物的进步,学到了壹部分升官
.NET 质量的一些小技巧

概述简介

Redis是2个开源(BSD许可)的内部存款和储蓄器数据结构存款和储蓄,用作数据库,缓存和消息代理。它援助数据结构,如字符串,哈希,列表,集合,具有限定查询的排序集,位图,一级日志和拥有半径查询的地理空间引得。Redis具有内置复制,Lua脚本,LRU逐出,交易和分歧级其他磁盘持久性,并透过Redis
Sentinel提供高可用性,并因此Redis Cluster自动分区。
往简单的讲正是:Redis是多个开源的Key-Value存款和储蓄,它拥有以下特征:

  • 速度特别快(各类人都知情)
  • 添加的数据结构,包涵String,List,Hash,Set,Sorted Set等
  • 单线程,免了线程切换和锁的质量消耗(搞不懂,整天切磋的现身编制程序在那边不适用?)
  • 原子操作(作为数据库都有)
  • 可持久化(奇骏DB与AOF)
  • 颁发/订阅
    (个人认为RabbitMQ那上边可比优越,在微服务KoleosPC调用那里,作服务的意识)
  • 支持Lua脚本
  • 分布式锁 (集群的基本点)
  • 事务 (作为数据库都有)
  • 主从复制与高可用(Redis Sentinel)
  • 集群(三.0版本以上)

索引

简言之的说,索引就好像书本的目录,目录能够高速找到所在页数,数据库中索引能够接济连忙找到数据,而不用全表扫描,合适的目录能够大大进步数据库查询的功效。

.
优点大大加快了数据库检索的速度,包罗对单表查询、连表查询、分组查询、排序查询。平常是1到三个数据级的属性进步,且随着数据数量级增加。.
缺点索引的开创和掩护存在消耗,索引会占用物理空间,且随着数据量的扩大而充实。在对数据库进行增加和删除改时供给保证索引,所以会对增加和删除改的质量存在影响。

A.当某字段数据更新频率较低,查询频率较高,平时有限定查询(>, <, =,
>=, <=)或order by、group
by发生时建议接纳索引。并且采取度越大,建索引越有优势,那里选拔度指1个字段中唯一值的多寡/总的数量。

B. 平日还要存取多列,且每列都包括重复值可思念创造复合索引

  • 一贯创立索引和直接创制索引直接开立:
    使用sql语句创制,Android中能够在SQLiteOpenHelper的onCreate或是onUpgrade中央直机关接excuSql成立语句,语句如CREATE
    INDEX mycolumn_index ON mytable 直接创立:
    定义主键约束还是唯一性键约束,能够直接创设索引,主键私下认可为唯一索引。
  • 通常索引和唯一性索引普通索引:CREATE INDEX mycolumn_index ON
    mytable
    唯一性索引:保险在索引列中的全体数码是绝无仅有的,对聚簇索引和非聚簇索引都能够接纳,语句为CREATE
    UNIQUE COUSTERED INDEX myclumn_cindex ON mytable
  • 单个索引和复合索引单个索引:索引建立语句中仅包蕴单个字段,如上边包车型地铁常见索引和唯一性索引创造示范。复合索引:又叫组合索引,在目录建立语句中还要富含四个字段,语句如:CREATE
    INDEX name_index ON username(firstname,
    lastname),个中firstname为前导列。
  • 聚簇索引和非聚簇索引(聚集索引,群集索引)聚簇索引:物理索引,与基表的物理顺序相同,数据值的相继总是依据顺序排列,语句为:CREATE
    CLUSTERED INDEX mycolumn_cindex ON mytable WITH
    ALLOW_DUP_ROW,其中WITH
    ALLOW_DUP_ROW表示同意有重复记录的聚簇索引非聚簇索引:CREATE
    UNCLUSTERED INDEX mycolumn_cindex ON mytable索引暗中认可为非聚簇索引

  • 对于复合索引,把利用最频仍的列做为前导列。要是查询时前导列不在查询条件中则该复合索引不会被选拔。如create
    unique index PK_GRADE_CLASS on student (grade, class)select *
    from student where class = 贰未采纳到索引select * from dept where
    grade = 3使用到了目录
  • 幸免对索引列进行测算,对where子句列的其余总计就算不能够被编写翻译优化,都会导致查询时索引失效select *
    from student where tochar=’2′
  • 正如值幸免使用NULL
  • 多表查询时要小心是选项万分的表做为内表。连接条件要充份考虑富含索引的表、行数多的表,内外表的取舍可由公式:外层表中的相配行数
  • 内层表中每叁回搜索的次数显著,乘积最小为最棒方案。实际多表操作在被实际执行前,查询优化器会依据一而再条件,列出几组也许的接连方案并从中找出种类开发相当小的最好方案。
  • 查询列与索引列次序一致
  • 用多表连接代替EXISTS子句
  • 把过滤记录数最多的规则放在最终面
  • 善用运用存储进度,它使sql变得尤为灵活和神速(Sqlite不协助存款和储蓄进度::>_<::
    )
  1. 网络协议:客户端与服务端之间的协议

  2. 主流协议:http、socket、ftp、pop三

  3. http协议

    1)多用与b/s架构

    2)问题

     短连接:每次客户端与服务端交互时,先建立连接,交互完毕后,关闭连接
    
     无状态:服务端只能记得住当次请求状态
    

    3)http:一.0 – 近日主流版本
    http:一.1 – 较新本子(向下包容)
    http:贰.0 – 最新版本

HttpClient 优化

有关利用 HttpClient ,大致很多少人都知晓尽量利用单例以升高 HttpClient
的性能。

由于 HttpClient
在出殡和埋葬请求时索要开始展览域名解析,使用的时候第3回壹般的话会慢一些,咱们在
HttpClient 起初化实现之后,向指标地方发送多少个 HEADNET质量优化小技巧,Redis应用及安装。
请求,那样会把域名解析结果有3个缓存,实际去央浼的时候所需用的域名解析的日子就会削减了,那样就可以升级第一回实际上发送请求的快慢。

HttpClient 的逾期时间设置尽量短以幸免超长等待提高响应时间

Redis数据结构

建议间接看Redis官网的数据结构,因为从没想看2手Redis数据结构,那里差不多介绍:

  • String
    那是最简便易行的Redis类型。假使只使用那类别型,Redis就好像一个可持久化的Memcached服务器。
  • List
    Redis的List是基于双向链表完成的,能够支撑反向寻找和遍历。
    常用案例:聊天系统、社交互连网中赢得用户最新刊登的帖子、不难的新闻队列、音讯的分页列表、博客的评论系统。
  • Hash
    Hash是叁个String类型的田野和value之间的映射表,请见下图,类似于.NET中的Hashtable和Dictionary。首要用来储存对象,能够制止种类化的支出和产出修改决定的难点。
  • Set
    Set也是三个列表,可是它的与众不相同之处在于它是能够活动排重的:当必要仓库储存贰个列表数据,而又不期望出现重复的时候,Set是1个很好的精选(比如ID的聚众)。并且Set提供了判断某些成员是或不是在三个Set集合内的接口,那也是List所未有的。
  • Sorted Set
    Sorted Set和Set的利用景况类似,差别是Sorted
    Set会基于提供的score参数来展开自动排序。当你供给一个静止的还要不另行的成团列表,那么就可以接纳Sorted
    Set数据结构。常用案例:游戏中的排行榜。

事务

选用工作的两大便宜是原子提交和更优质量。

原子提交代表同一业务内的拥有修改只怕都成功恐怕都不做,如若有个别修改战败,会自行回滚使得全部修改不奏效。

Sqlite暗许会为各类插入、更新操作创立多个作业,并且在每趟插入、更新后立刻付给。

如此那般即便老是插入九十九次数据实际上是成立工作->执行语句->提交这么些历程被重复执行了96回。要是大家显式的创建工作->执行100条语句->提交会使得那么些成立工作和交给那个进程只做三次,通过那种2回性事务能够使得品质小幅升级。尤其当数据库位于sd卡时,时间上能节省几个数据级左右。

Sqlte呈现接纳工作,示例代码如下:

public void insertWithOneTransaction() { SQLiteDatabase db = sqliteOpenHelper.getWritableDatabase(); //开始一个事务 db.beginTransaction(); try { for (int i = 0; i < 100; i++) { db.insert(yourTableName, null, value); } // 设置当前事务成功 db.setTransactionSuccessful(); } catch (Exception e) { e.printStackTrace(); } finally { //结束事务 db.endTransaction(); }}

其间sqliteOpenHelper.getWritableDatabase()表示收获写表权限。

贰、http请求协议

同步操作优化

原先的同步操作,能够改为异步处理的使用异步方法处理,

如查询数据库等操作大多能够改为异步操作,收缩线程阻塞,进一步升高 CPU
的利用率。

八个职分的调度,能够不须求关切1个职分调度的话就足以而且运转任务而且不用等待。

Redis首要特色

  • 管道
    Redis服务是一种C/S模型,提供请求-响应式协议的TCP服务,所以当客户端请求发出,服务端处理并回到结果到客户端,1般是以堵塞格局等待服务端的响应,但那在批量甩卖连接时延迟难点相比严重,所以Redis为了升高或弥补这一个难题,引进了管道技术:能够形成服务端未及时响应的时候,客户端也足以持续发送命令请求,做到客户端和服务端互不干涉影响,服务端并最后回到所有服务端的响应,那在促进原有C/S模型交互的响应速度上有了质的滋长。
    特征:在C/S交互中,客户端可发送任意数请求命令,不须求等服务端响应后再行发送请求;而服务端能够二次性实现并赶回全数客户端请求结果,也足以分批次回到请求结果,那关键看服务端处理结果的快慢而定。
  • 事务
    Redis事务是一组命令的集纳。2个工作中的命令要么都举行,要么都不实施。即职务令在运作时期出现错误,不会自动回滚。
    管道与事务的界别:管道首倘使互连网上的优化,客户端缓冲一组命令,2次性发送到服务器端执行,但是并无法保障命令是在同三个工作里面实践;而事情是原子性的,能够保障命令执行的时候不会有出自此外客户端的吩咐插入到命令系列中。

其他Sqlite的优化

  • 讲话的拼凑使用StringBuilder代替String简单的String相加会导致创建四个权且对象消耗品质。StringBuilder的空中预分配品质好得多。假诺你对字符串的尺寸有大体驾驭,如100字符左右,能够直接new
    StringBuilder钦点初阶大小,减弱空间不够时的重复分配。
  • 询问时重回越来越少的结果集及越来越少的字段。查询时只取须求的字段和结果集,越来越多的结果集会消耗越多的光阴及内部存款和储蓄器,越多的字段会造成更多的内部存款和储蓄器消耗。
  • 少用cursor.getColumnIndex依据品质调优进程中的观看cursor.getColumnIndex的时辰开销跟cursor.getInt相差无几。可以在建表的时候用static变量记住某列的index,间接调用相应index而不是每一次查询。

public static final String HTTP_RESPONSE_TABLE_ID = _ID;public static final String HTTP_RESPONSE_TABLE_RESPONSE = "response";public List<Object> getData() { …… cursor.getString(cursor.getColumnIndex(HTTP_RESPONSE_TABLE_RESPONSE)); ……}//优化为 public static final String HTTP_RESPONSE_TABLE_ID = _ID;public static final String HTTP_RESPONSE_TABLE_RESPONSE = "response";public static final int HTTP_RESPONSE_TABLE_ID_INDEX = 0;public static final int HTTP_RESPONSE_TABLE_URL_INDEX = 1;public List<Object> getData() { …… cursor.getString(HTTP_RESPONSE_TABLE_RESPONSE_INDEX); ……}
  1. 客户端发送八个伸手,应该有如下七个部分:

    请求行: 请求方法、请求url 状态码、(http协议版本)

    伸手底部: 表明服务器要动用的叠加音讯

    伸手主体: 提交给服务器的乞求数据

  2. HTTP客户端请求内容详解

    一)请求行 – 请求的新闻

     请求类型 - get、post、put等
    
     请求地址 
    
        如果是get请求,参数应该拼到url的后面url?key=value,但请求体为空
    
        如果是post请求,url后面不拼参数,参数放在请求体中
    

数据结构优化

在使用较多的 Model 处考虑 Model
中是不是有较多的无用字段,借使有能够设想用一个新的轻量级的 Model ,优化
Model 数据结构优化内部存款和储蓄器存储。

左近应用难点

  • 缓存穿透处理
    怎么是缓存穿透?当依照Redis
    key在缓存中查询后,不存在对应Value,就应该会在后端系统如DB中去摸索,该Key的出现请求量一旦变大,那么就会对DB造成相当大的压力。消除办法有:a.前端风险控制,将恶意穿透意况消除在外;b.对查询结果为空的景况仍旧举行缓存,但缓存时间会设置得非常的短,一般是几分钟。
  • 缓存雪崩处理
    哪些是缓存雪崩?当缓存服务重视启只怕多量缓存集中在某二个小时段失效,那样在失效的时候,也会给后端系统(比如DB)带来十分的大压力。化解办法有:后端连接数限制,错误阈值限制,超时处理,缓存失效时间均匀分布,前端永不失效及后端主动立异。
  • 缓存时间长度
    方针定位复杂,须求多维度的盘算。
  • 缓存失效
    限期失效,事件失效,后端主动立异。
  • 缓存Key
    Hash、规则、前缀+Hash,分外情形可人工干预。
  • Lua脚本
    服务端批量甩卖及业务能力,有条件逻辑的可扩展脚本。使用它的功利有:减弱网络支出、原子操作、可复用。
  • Limit
    可滑动时间窗口,如应用于Session,Memcached需每回传Key和Value。

异步线程

Sqlite是常用于嵌入式开发中的关系型数据库,完全开源。与Web常用的数据库Mysql、Oracle
db、sql
server分裂,Sqlite是1个内嵌式的数据库,数据库服务器就在你的次第中,无需互连网布局和管理,数据库服务器端和客户端运维在同等进度内,减弱了网络访问的开支,简化了数据库管理。不过Sqlite在出现、数据库大小、互联网方面存在局限性,并且为表级锁,所以也没要求多线程操作。

Android中数据不多时表查询恐怕源消耗费时间不多,不会造成ANPRADO,但是超越拾0ms时一样会让用户觉得到延时和卡顿,能够放在线程中运维,但Sqlite在出现方面存在局限,十二线程序控制制较辛劳,那时候可使用单线程池,在职务中实践db操作,通过Handler再次来到结果和UI线程交互,既不会影响UI线程,同时也能防备出现带来的老大。

可选择Android提供的AsyncQueryHandler或接近如下代码实现:

ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();singleThreadExecutor.execute(new Runnable() { @Override public void run() { db.insert("你的表名", null, value); handler.sendEmptyMessage;

贰个网络请求可以大约分为连接服务器 ->
获取数据八个部分。当中连接服务器前还包括DNS解析的进程;获取数据后也许会对数码开始展览缓存。

     状态码 - 服务器端的状态

2)请求头 - 反映给服务端的信息

     格式为 key:value,key:value,...

     accept - 表示浏览器可接受的MIME类型
     accept-Encoding - 浏览器能够进行解码的数据编码方式

     accept-language - 表示服务端接受的语言

       zh-cn:简体中文
       zh-tw:繁体中文
       zh - 中文
       us -英文

     connection - 表示当前链接状态

       keep-alive - 保持连接

     host - 请求的服务器网址;

     referer - 表示当前的请求来源

       实现防盗链接

     user-agent 获取到用户浏览器信息

     cache-control -缓存控制

       max-age 设置最大活动周期,设置缓存保存的最大时间的单位为秒,为0代表不缓存

     cookie - 将cookie自动携带到请求头

     content-type:互联网媒体类型;使用post请求必须设置这个属性

         也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。

         <form>元素提交时默认的类型
        一般文件上传时默认为application/x-www.form-urlencoded

     Content-Length:请求内容的长度

        对于POST请求来说Content-Length必须出现

3)请求体 - 存放请求参数

如果为post请求,有值,如果为get请求为空

缓存

重复使用的值缓存起来(依据数据需求接纳选拔缓存类型,变量缓存或内部存款和储蓄器缓存或redis等分布式缓存),减弱数据库查询次数

Redis简单介绍安装(Centos)

下载地址,提议生产条件使用稳定版
一、 确定保障已经安装有编译工具make

金沙注册送58 1

从未安装make可以行使:

yum install make -y

2、开首安装
RedisDesktopManage:页面效果:

金沙注册送58 2

RedisDesktopManage下载地址:https://redisdesktop.com/
Redis官网:https://redis.io/
Redis安装推荐博客:http://blog.csdn.net/lc1010078424/article/details/78295482
有的是别样博客写的是的确垃圾!

金沙注册送58,接二连三服务器优化策略

节约 DNS 解析进程,DNS 全名 Domain Name
System,解析意指依照域名获得其相应的 IP 地址。如:
的域名解析结果就是10肆.23陆.1四7.7陆。

第三遍域名解析一般须要几百阿秒,可由此间接向IP而非域名请求,节省掉那部分小时,同时能够预防域名威迫等推动的危机。

自然为了安全和扩张考虑,这么些IP可能是1个动态更新的IP列表,并在IP不可用境况下通过域名访问。

合营地方聊起的动态 IP
列表,补助优先级,每一回根据地区、互联网项目等选拔最优的服务器IP举行接二连三。对于服务器端还能调优服务器的TCP拥挤堵塞窗口大小、重传超时时间、最大传输单元等。

3、http响应协议

Sql 优化

  1. 倘使供给同时插入许多数额,尽也许选择 BulkCopy 操作以升级质量

  2. 革新/查询条件优化,使用更可相信的基准,尽也许采用主键查询和翻新

  3. 批量更新数据的累累操作能够联合为2遍操作的就集合为二次操作,不可能合为叁遍操作就三次提交,注意防
    Sql 注入

  4. 复杂 Sql 使用事务时,能在 Sql
    中央银行使工作就在Sql中央银行使不然在代码中动用。使用事务时仅在需求开启事务的地点开启事务,事务截止就提交业务,不要在工作中混杂不须要放在工作中处理的数据库操作

获取数据优化策略

节约连接建立时间,如开启keep-aliveHttp 一.一私下认可运营了keep-alive。对于Android来说暗中认可处境下HttpU昂CoraLConnection
和HttpClient都打开了keep-alive。

其余互连网请求框架也能够实行对应布置

即将多个请求合并为2个人作品展开呼吁,比较宽泛的就是网页中的CSS Image
Coca Colas。 若是某些页面内央求过多,也得以思量做一定的央求合并。

  • 对于 POST 请求,Body 可以做 Gzip 压缩,如日志。

  • 对请求头进行压缩那些http 1.一不援助,spdy及http 二.0支撑。http 壹.一能够透过服务端对前八个伸手的央求头实行缓存,前边同样请求头用md5之类的id来表示即可。

缓存常见的图纸、JS、CSS 等静态能源。

  • 调整和缩小一般API数据运用Gzip压缩
  • 简短数量格式如JSON代替 XML,WebP代替别的图片格式
  • 对此不相同的设备不相同互连网再次来到不一致的剧情 如不一致分辨率图片大小。
  • 增量更新必要多少更新时,可怀恋增量更新。如周围的服务端举行bsdiff,客户端进行bspatch。
  • 大文件下载协助断点续传,并缓存Http
    Resonse的ETag标识,下次呼吁时带上,从而显明是不是数据变动过,未改变则一贯重返30四。

缓存获取到的数量,在自然的灵光时间内再次请求能够向来从缓存读取数据。

当今的互联网请求框架都可进行相应的缓存配置

明日周末,就说这么多,祝大家周末Happy

  1. 服务端给客户端响应新闻,应该有如下三有的

    响应行:协议版本 状态码 原因短语

    响应底部:

    1呼百应核心: 再次回到给客户端的响应数据,大概是字符数据,也说不定是字节数据

  2. HTTP服务端响应内容详解

    1)响应行

      状态码
      协议版本
    

    2)响应头

      Allow:服务器支持哪些请求方法
    
         GET、POST
    
      Content-Encoding 文档的编码(Encode)
    
      Cache-Control: 告诉客户端,服务端的缓存配置
    
      Connection - 表示当前的连接状态
    
        keep-alive 表示保持连接
    
      content-length 响应数据的长度(大小)
    
      content-type - 响应数据的mime类型
    
         一般情况下:text/html
    
      Date - 当前响应的日期时间
    
      keep-alive 设置保持连接的超时和最大存活时间
         timeout=5 max=99
    
      server - 服务器端的信息
    

    3)响应体

      服务器返回给客户端的数据主体
    

End

感激大师,跟着法师展开3遍品质优化,确实学到好多,本身对有的概念也是明亮的愈发永不忘记了。

4、扩大内容

1. 请求类型

     get/post/head/put/delete/options/trace

2. 标准API - 标准的请求方式

      get - 获取数据
      post - 修改数据
      put - 新增数据
      delete - 删除数据

3. 状态码

      1XX - 服务器的信息
      2XX - 表示请求成功
        200:请求成功
        201:成功创建连接
        202:接受请求            
      3XX - 表示重定向
        302:表示重定向
        304:表示服务端资源没有变化,访问缓存
          问题 - 这次请求没有真正低访问服务器端
        305:使用代理
      4XX - 客户端错误
        400:错误的请求
        404:网页找不到
        403:拒绝访问
        405:请求类型不允许
      5XX - 服务端错误
        500:服务端错误
        502:路径错误
        504:请求超时
        505:http版本不支持

4. MIME类型 - 文件类型

     MIME类型是如何定义的

        //定义MIME类型
        <mime-mapping>
            //文件的扩展名
            <extension>jpg</extension>
            //对应的MIME类型
            <mime-type>image/jpeg</mime-type>
         </mime-mapping>

       常见的MIME类型

        html - text/html
        htm  - text/html
        css  - text/css
        js   - text/javascript
        json - application/json
        jpg  - image/jpeg
        text - text/plain

5. 请求参数

     1)get请求类型

         将请求数据 - url?key=value(浏览器地址)

         安全性低

         请求地址的长度是有限制的

         请求数据中包含中文的话,需要转码

     2)post请求类型

         浏览器地址栏url,不包含请求类型

         安全性相对比较高

         对请求数据的长度没有要求

         请求数据中包含中文的话,可以不转码,对中文的处理相对比较好

6. 控制HTTP头部方法

    可以配置每个HTML文件的HTTP-EQUIV标签控制缓存

      <meta http-equiv="Cache-Control" content="no-cache">


    在PHP页面中控制响应头

       header("Content-Type: image/jpeg");

5、缓存工作规律

  1. 客户端能够自行保存已经访问过的文书档案的副本,那么些副本就改成“文书档案缓存”

  2. 当客户端再一次发送针对同八个U奇骏L的请求时,假使地方有“已缓存的副本”,就能够直接从本地存款和储蓄设备而不是远程服务器提取该文书档案了。

  3. 数据缓存有下列优点

    削减了冗余的多少传输,节省客户端流量费用
    消除服务器带宽瓶颈的难点,服务器能够节省出越来越多的带宽
    降低了对服务器的财富消耗和平运动转须求
    降落了由于中远距离而致使的加载延时

  缓存原理:发送请求->是否有缓存->
  有缓存,判断是否过期,如果过期不用,如果不过期跟服务器进行验证,判断是否是最新的数据;如果不是,需要更新缓存,更新缓存后,从缓存中获取。

  没有缓存,从服务器中获取

六、http基本优化

网站质量优化最重大的正是要压缩HTTP请求及每一趟响应中内容的长度。能够从一而再进度中的下列方面加以记挂:

1、域名解析

尽可能减少域名解析次数——减少跨站外部资源的引用

二、成立连接

努力减少连接创建次数——使用Keep-Alive避免重复连接

三、发送请求
开足马力收缩请求次数——合理设置Expires时间、能源统壹

四、等待响应
增强制性劳动教育动器端运转速度——进步多少运算及查询速度

5、接收响应
尽心尽力减小响应数据长度——启用压缩

七、安全的HTTP协议

  1. HTTP协议本质上属于“明文字传递输”,也许被窃听和篡改,政坛、银行等秘密应用供给需求“安全版本的HTTP”:http协议暗中同意端口80

  2. HTTPS协议将消息发送给TCP层以前,先提交了1个安全层(由SSL或TLS协议落到实处),安全层负责对消息进行加密和平消除密操作。https协议暗中认可端口4四3

相关文章

网站地图xml地图