缓存服务器

Django之中间件、缓存以及信号

若如初见. 提交于 2019-12-16 17:43:11
Django之中间件 中间件执行流程 我们从浏览器发出一个请求 Request,得到一个响应后的内容 HttpResponse ,这个请求传递到 Django的过程如下: 也就是说,每一个请求都是先通过中间件中的 process_request 函数,这个函数返回 None 或者 HttpResponse 对象,如果返回前者,继续处理其它中间件,如果返回一个 HttpResponse,就处理中止,返回到网页上。 中间件中可以定义4个方法,分别是: process_request(self,request) 发送请求 process_view(self, request, callback, callback_args, callback_kwargs) 执行完 request 预处理函数并确定待执行的 view 之后,但在 view 函数实际执行之前。 process_template_response(self,request,response) process_exception(self, request, exception) 收集错误信息 process_response(self, request, response) 必须返回 HttpResponse 对象. 这个 response 对象可以是传入函数的那一个原始对象(通常已被修改),也可以是全新生成的。

spring项目中监听器作用-ContextLoaderListener

送分小仙女□ 提交于 2019-12-16 17:29:44
spring项目中监听器作用-ContextLo 1 spring框架的启动入口 ContextLoaderListener < context-param > < param-name >contextConfigLocation </ param-name > < param-value >contextConfigLocationValue > </ param-value > </ context-param > 作用:该元素用来声明应用范围(整个WEB项目)内的上下文初始化参数。 param-name 设定上下文的参数名称。必须是唯一名称 param-value 设定的参数名称的值 初始化过程: 在启动Web项目时,容器(比如Tomcat)会读web.xml配置文件中的两个节点<listener>和<contex-param>。 接着容器会创建一个ServletContext(上下文),应用范围内即整个WEB项目都能使用这个上下文。 接着容器会将读取到<context-param>转化为键值对,并交给ServletContext。 容器创建<listener></listener>中的类实例,即创建监听(备注:listener定义的类可以是自定义的类但必须需要继承ServletContextListener)。 在监听的类中会有一个contextInitialized

Nginx配置文件nginx.conf中文详解,供自己看

此生再无相见时 提交于 2019-12-16 17:23:58
######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数。 worker_processes 8; #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ] error_log /usr/local/nginx/logs/error.log info; #进程pid文件 pid /usr/local/nginx/logs/nginx.pid; #指定进程可以打开的最大描述符:数目 #工作模式与连接数上限 #这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。 #现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。 #这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。 worker_rlimit_nofile 65535; events { #参考事件模型,use [

缓存

隐身守侯 提交于 2019-12-16 15:42:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 主要分:强缓存和协商缓存(Expires、cache-control、last-modified、ETag) 强缓存字段标识: 1、Expires(响应头中的过期时间点),问题: 服务器的时间和浏览器的时间可能并不一致 2、 Cache-Control(max-age:响应头中的过期时长) a、 public : 客户端和代理服务器都可以缓存 b、private : 这种情况就是只有浏览器能缓存了,中间的代理服务器不能缓存。 c、no-cache : 跳过当前的强缓存,发送HTTP请求,即直接进入 协商缓存阶段 。 d、no-store :非常粗暴,不进行任何形式的缓存。 e、 s-maxage:代理服务器缓存时间 协商缓存 强缓存失效之后,服务器根据这个tag( Last-Modified 和 ETag ),来决定是否使用缓存 last-Modified:最后修改时间===》如果请求头中的这个值(If-Modified-Since)小于最后修改时间,说明是时候更新了。返回新的资源,跟常规的HTTP请求响应的流程一样。 ETag:服务器根据当前文件的内容,给文件生成的唯一标识==》客户端的值( f-None-Match )会和服务器端ETag对比,不同时更新 来源: oschina 链接: https://my

redis缓存策略

烈酒焚心 提交于 2019-12-16 14:44:56
常用策略有“求留余数法”和“一致性HASH算法” redis存储的是key,value键值对 一、求留余数法 使用HASH表数据长度对HASHCODE求余数,余数作为索引,使用该余数,直接设置或访问缓存。 计算key的HashCode 缺点:增加服务器,由于除数不一样了,之前缓存的数据都没办法访问了,即不支持热部署【扩展】 二、一致性HASH算法 一致性HASH算法通过一个叫做一致性HASH环的数据结构,实现KEY到缓存服务器的HASH映射。 算法过程如下: 先构造一个0到 2 32 的整数环,然后将服务器节点的Hash值,放在该环上(可以理解为将你的ip做hash,将ip的HashCode放在环上)。然后根据需要缓存的数据的Key,计算Key的HashCode,然后在环上,顺时针查找距离这个Key的Hash值最近的缓存服务器的节点,然后将Value,存储到该服务器节点上。 这是当缓存服务器集群需要扩容的时候,只需要将新加入的节点的HashCode,放入一致性Hash环中,由于Key是顺时针查找距离最近的节点,因此,新加入的节点只影响整个环中的一小段。 请参见上图,如果我们新加入的服务器节点Node3,在Node1和Node2之间,如下图: 那么受影响的区域,只是Node2到Node3之间(顺时针)的缓存,此区间的缓存数据,加入节点之前是缓存在Node1上的

redis常见问题和解决方案

不想你离开。 提交于 2019-12-16 03:14:41
redis常见问题和解决方案 预热问题 在启动redis的时候,因为热点数据未加载,导致服务器压力大,cpu增高,甚至崩溃 问题解析 缓存预热就是系统启动前,提前将相关的缓存数据直接加载到缓存系统,毕淼在用户请求的时候,先查询数据库,再将数据缓存的问题,用户直接查询事先被预热的缓存数据 解决方案 前置准备工作 日常例行统计数据访问记录,统计访问频度较高的热点数据 利用LRU数据删除策略,构件数据留存队列 准备工作 将统计结果中的数据分类,根据级别,redis优先加载级别较高的热点数据 利用分布式多服务器同时进行数据读取,提速数据加载过程 实施 使用脚本程序固定触发数据预热过程 如果条件允许,使用CDN,效果会更好 雪崩 问题排查 在一个较短的时间内,缓存中较多的key集中过期 这周期内,请求访问过期的数据,redis未命中,redis向数据库获取数据 数据库同时接受到大量的请求,无法及时处理 redis大量请求被积压.开始出现超时现象 数据库流程激增,数据库崩溃 重启后仍然面对缓存中无数据可用 reids服务器资源被严重占用,redis服务器崩溃 应用服务器无法及时得到数据响应请求,来自客户端的请求数量越来越多,应用服务器崩溃 应用服务器,redis,数据库全部重启,效果不理想 问题分析 短时间范围内 大量key集中过期 解决方案(外部优化) 更多页面静态化处理 构件多级缓存结构

iOS面试题:简述性能优化

雨燕双飞 提交于 2019-12-16 03:06:20
在性能优化中一个最具参考价值的属性是FPS:Frames Per Second,其实就是屏幕刷新率,苹果的iphone推荐的刷新率是60Hz,也就是说GPU每秒钟刷新屏幕60次,这每刷新一次就是一帧frame,FPS也就是每秒钟刷新多少帧画面。静止不变的页面FPS值是0,这个值是没有参考意义的,只有当页面在执行动画或者滑动的时候,FPS值才具有参考价值,FPS值的大小体现了页面的流畅程度高低,当低于45的时候卡顿会比较明显。 图层混合: 每一个layer是一个纹理,所有的纹理都以某种方式堆叠在彼此的顶部。对于屏幕上的每一个像素,GPU需要算出怎么混合这些纹理来得到像素RGB的值。 当Sa = 0.5时,RGB值为(0.5, 0, 0),可以看出,当两个不是完全不透明的CALayer覆盖在一起时,GPU大量做这种复合操作,随着这中操作的越多,GPU越忙碌,性能肯定会受到影响。 公式: R = S + D * ( 1 – Sa ) 结果的颜色是源色彩(顶端纹理)+目标颜色(低一层的纹理)*(1-源颜色的透明度)。 当Sa = 1时,R = S,GPU将不会做任何合成,而是简单从这个层拷贝,不需要考虑它下方的任何东西(因为都被它遮挡住了),这节省了GPU相当大的工作量。 一、入门级 1、用ARC管理内存 2、在正确的地方使用 reuseIdentifier 3、尽量把views设置为透明

Redis常见问题和知识点汇总

白昼怎懂夜的黑 提交于 2019-12-15 14:41:35
Redis 相关的问题有很多需要注意,本文就大多数问题做了解答。 目录 1.什么是redis? 2.Reids的特点   3.使用redis有哪些好处?    4.redis相比memcached有哪些优势?    5.Memcache与Redis的区别都有哪些? 6.redis适用于的场景? 7、redis的缓存失效策略和主键失效机制 8.为什么redis需要把所有数据放到内存中?  9.Redis是单进程单线程的 10.redis的并发竞争问题如何解决? 11、redis常见性能问题和解决方案:    12.redis事物的了解CAS(check-and-set 操作实现乐观锁 )? 13.WATCH命令和基于CAS的乐观锁? 14.使用过Redis分布式锁么,它是什么回事? 15.假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如果将它们全部找出来? 16.使用过Redis做异步队列么,你是怎么用的? 17.如果有大量的key需要设置同一时间过期,一般需要注意什么? 18.Redis如何做持久化的? 19.Pipeline有什么好处,为什么要用pipeline? 20.Redis的同步机制了解么? 21.是否使用过Redis集群,集群的原理是什么? 1.什么是redis?    Redis 是一个基于内存的高性能key-value数据库。

mysql基础架构

自闭症网瘾萝莉.ら 提交于 2019-12-15 09:40:27
基础架构 平时我们使用数据库,看到的通常都是一个整体, 例如下面: mysql> select * from t where id=1; 我们看到的只是输入一条语句,返回一个结果,那么这条语句在MySQL内部的执行过程是如何的呢? 下面是 mysql 的经典架构图 大致可以分为4层: 连接层 最上层是一些客户端和连接服务,包含本地socket和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信,主要完成一些类似连接处理,授权认证,及相关的安全方案,在该层引入线程池的概念,为通过认证安全接入的客户端提供线程,同样在该层上可以实现基于SSL的安全链接,服务器也会为安全接入的每个客户端验证它所具备的操作权限。 服务层 第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存查询,SQL的分析和优化及部分内置函数的执行,所有跨存储引擎的功能也在这一层实现,如过程,函数等,在该层,服务层会解析查询并创建相应的内部解析树,并对其完成响应的优化确认查询表的顺序,是否利用索引等,最后生成相应的执行操作,如果是select语句,服务器还会查询内部的缓存,如果缓存空间足够大,这样就解决大量读操作的环境中能够很好的提供系统性能。 存储引擎层 存储引擎层,存储引擎真正负责了MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信,不同的存储引擎具有的功能不同

Redis基础知识入门

…衆ロ難τιáo~ 提交于 2019-12-15 09:13:49
参考 Redis【入门】就这一篇! Redis概述 平常做Web小项目时都是直接使用mysql等数据库,在磁盘上进行数据的存取,由于一般的系统任务中通常不会存在高并发的情况,所以没什么问题,但是一旦涉及大数据量的需求,比如商品抢购使得主页访问量瞬间极大的时候,如果仅仅使用数据库来保存数据,会因为磁盘读/写速度太慢而造成数据库系统瘫痪。 NoSQL 技术 **MySQL(关系型数据库)**需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当查询量非常大的时候就很耗费时间和资源,尤其是数据是需要从磁盘里去检索。 NoSQL(非关系型的数据库) 存储原理非常简单(典型的数据类型为k-v),不存在繁杂的关系链,不需要像mysql那样需要找到对应的库、表(通常是多个表)以及字段。 NoSQL数据可以存储在内存里,查询速度非常快。 NoSQL在性能表现上虽然能优于关系型数据库,但是它并不能完全替代关系型数据库。 NoSQL因为没有复杂的数据结构,扩展非常容易,支持分布式 Redis 和 MongoDB 是当前使用最广泛的NoSQL,而就Redis技术而言,它的性能十分优越,可以支持每秒十几万此的读/写操作。 Redis值的五种类型 String 整数,浮点数或者字符串 Set 集合 Zset 有序集合 Hash 散列表 List 列表 Redis在Web开发中的应用