缓存服务器

Cache缓存

ぃ、小莉子 提交于 2020-03-29 07:05:27
1 、 如果每次进入页面的时候都查询数据库生成页面内容的话,如果访问量非常大,则网站性能会非常差。而如果只有第一次访问的时候才查询数据库生成页面内容,以后都直接输出内容,则能提高系统性能。这样无论有多少人访问都只访问一次数据库,数据库压力不变。 2 、为了保证从缓存中读取数据和数据库中数据一致,则需要在数据库中对应的数据发生变化的时候,清除缓存中相应的数据( 缓存依赖 )。 3 、缓存是改进网站性能的第一个手段, Asp.Net 缓存主要分为: 页面缓存 ( 中庸 ) 、 数据源缓存 ( 最不灵活的 ) 、 数据缓存 ( 灵活 ) 这三种主要类型。 页面缓存 给 aspx 页面添加 <%@ OutputCache Duration=“15” VaryByParam=“none”%> 标签就可以启用页面缓存,这样整个页面的内容都会被缓存,页面中的 ASP.Net 代码、数据源在缓存期间都不会被运行,而是直接输出缓存的页面内容。 Duration 表示缓存时间,以秒为单位,超过这个时间则缓存失效,再次生成以后会再缓存 15 秒,以此类推。 注 : 这个缓存是在服务器缓存的,不是在客户端,因为用 HttpWatch 还是能看到向服务器提交的请求,只不过服务器看到有缓存就没有再执行页面类。 页面缓存是针对所有这个页面的访问者。这样 1 个访问者和 1 万个访问者、一次访问和 100

2.ASP.NET HttpRuntime.Cache缓存类使用总结

我的未来我决定 提交于 2020-03-28 23:27:36
   1.高性能文件缓存key-value存储—Redis    2.ASP.NET HttpRuntime.Cache缓存类使用总结   备注:三篇博文结合阅读,简单理解并且使用,如果想深入学习,请多参考文章中给出的博文地址。 1.前言    a.Memcached是一个高性能的分布式缓存系统,用于Web应用减轻数据库负载,它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高网站的访问速度。   b.Memcached是一个给予存储键/值对的HashMap,底层使用C语言完成,但是客户端可以使用任何语言来编写(Java,.NET,PHP).   c.Memcached中的数据都是存储在memcached内置的内存存储空间中,由于数据仅存在于内存中,因此当某个服务器停止运行或者出现问题之后,所有存放在服务器上的键/值对都会丢失。   d.下面这幅图可以说明Memcached的工作过程,当首次访问系统的时候,系统从数据库中取得数据保存到Memcached中,在第二次访问的时候则直接从Memcached中读取出来需要的值信息。        e.Memcached的特征      Memcached作为高速运行的分布式缓存服务器,具有以下的特点:      e.1:协议简单(客户端通信并不是使用复杂的XML格式,而是使用简单的基于文本行的协议)     e.2

如何保证缓存与数据库的双写一致性

删除回忆录丶 提交于 2020-03-28 18:57:07
Cache Aside Pattern 最初级的缓存不一致问题及解决方案 比较复杂的数据不一致问题分析 分布式缓存是现在很多分布式应用中必不可少的组件,但是用到了分布式缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题? Cache Aside Pattern 最经典的缓存+数据库读写的模式,就是 Cache Aside Pattern。 读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。 更新的时候,先更新数据库,然后再删除缓存。 为什么是删除缓存,而不是更新缓存? 原因很简单,很多时候,在复杂点的缓存场景,缓存不单单是数据库中直接取出来的值。 比如可能更新了某个表的一个字段,然后其对应的缓存,是需要查询另外两个表的数据并进行运算,才能计算出缓存最新的值的。 另外更新缓存的代价有时候是很高的。是不是说,每次修改数据库的时候,都一定要将其对应的缓存更新一份? 也许有的场景是这样,但是对于比较复杂的缓存数据计算的场景,就不是这样了。 如果你频繁修改一个缓存涉及的多个表,缓存也频繁更新。但是问题在于,这个缓存到底会不会被频繁访问到? 举个栗子,一个缓存涉及的表的字段,在 1 分钟内就修改了 20 次,或者是 100 次,那么缓存更新 20 次、100 次;但是这个缓存在 1 分钟内只被读取了

国内图片网站Yupoo的架构

冷暖自知 提交于 2020-03-28 09:50:21
之前向大家介绍过全球最大在线图片服务网站 Flickr网站架构 ,Yupoo(又拍网)作为国内最大的图片服务提供商,我们也一起来看看它的架构,同样是提供图片服务,看看他与Flickr的差别在哪里,大家看完本文可以思考一下。 一、先来看看Yupoo网站的基本信息: 带宽:4000M/S ( 参考 ) 服务器数量:60 台左右 Web服务器:Lighttpd, Apache, nginx 应用服务器:Tomcat 其他:Python, Java, MogileFS 、ImageMagick 等 其架构图如下: 原图链接 二、关于 Squid 与 Tomcat Squid 与 Tomcat 似乎在 Web 2.0 站点的架构中较少看到。我首先是对 Squid 有点疑问,对此阿华的解释是"目前暂时还没找到效率比 Squid 高的缓存系统,原来命中率的确很差,后来在 Squid 前又装了层 Lighttpd, 基于 url 做 hash, 同一个图片始终会到同一台 squid 去,所以命中率彻底提高了" 对于应用服务器层的 Tomcat,现在 Yupoo! 技术人员也在逐渐用其他轻量级的东西替代,而 YPWS/YPFS 现在已经用 Python 进行开发了。 名次解释: YPWS--Yupoo Web Server YPWS 是用 Python开发的一个小型 Web 服务器,提供基本的

Volley源码分析

痞子三分冷 提交于 2020-03-28 05:13:10
取消请求的源码分析: public void cancelAll(RequestFilter filter) { synchronized (mCurrentRequests) { for (Request<?> request : mCurrentRequests) { if (filter.apply(request)) { request.cancel(); } } } } /** * Cancels all requests in this queue with the given tag. Tag must be non-null * and equality is by identity. */ public void cancelAll(final Object tag) { if (tag == null) { throw new IllegalArgumentException("Cannot cancelAll with a null tag"); } cancelAll(new RequestFilter() { @Override public boolean apply(Request<?> request) { return request.getTag() == tag; } }); } 使用Volley的第一步,首先要调用 Volley

Redis存储方式及缓存淘汰策略

故事扮演 提交于 2020-03-27 20:44:54
一. Redis Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件 。 中文官方地址: http://www.redis.cn/ Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合) String (字符串) string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value 。 string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化的对象。 string 类型是 Redis 最基本的数据类型, string 类型的值最大能存储 512MB 。 Hash (哈希) Redis hash 是一个键值 (key=>value) 对集合。 Redis hash 是一个 string 类型的 field 和 value 的映射表, hash 特别适合用于存储对象。 List (列表) Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边) Set (集合) Redis 的 Set 是 string 类型的无序集合。 集合是通过哈希表实现的,所以添加,删除

Java面试之Redis

跟風遠走 提交于 2020-03-27 15:30:15
179. Redis 是什么?都有哪些使用场景? Redis 是一个使用 C 语言开发的高速缓存数据库。 Redis 使用场景: 记录帖子点赞数、点击数、评论数; 缓存近期热帖; 缓存文章详情信息; 记录用户会话信息。 数据缓存功能 分布式锁的功能 支持数据持久化 支持事务 支持消息队列 存储方式不同:memcache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小;Redis 有部份存在硬盘上,这样能保证数据的持久性。 数据支持类型:memcache 对数据类型支持相对简单;Redis 有复杂的数据类型。 使用底层模型不同:它们之间底层实现方式,以及与客户端之间通信的应用协议不一样,Redis 自己构建了 vm 机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。 value 值大小不同:Redis 最大可以达到 512mb;memcache 只有 1mb。 180. Redis 有哪些功能? 181. Redis 和 memcache 有什么区别? 182. Redis 为什么是单线程的? 因为 cpu 不是 Redis 的瓶颈,Redis 的瓶颈最有可能是机器内存或者网络带宽。既然单线程容易实现,而且 cpu 又不会成为瓶颈,那就顺理成章地采用单线程的方案了。 关于 Redis 的性能,官方网站也有,普通笔记本轻松处理每秒几十万的请求。

Django 会话session

只谈情不闲聊 提交于 2020-03-26 19:26:55
因为因特网HTTP协议的特性,每一次来自于用户浏览器的请求(request)都是无状态的、独立的。通俗地说,就是无法保存用户状态,后台服务器根本就不知道当前请求和以前及以后请求是否来自同一用户。对于静态网站,这可能不是个问题,而对于动态网站,尤其是京东、天猫、银行等购物或金融网站,无法识别用户并保持用户状态是致命的,根本就无法提供服务。可以尝试将浏览器的cookie功能关闭,会发现将无法在京东登录和购物。 为了保持连接状态,网站会通过用户的浏览器在用户机器内被限定的硬盘位置中写入一些数据,也就是所谓的Cookie。通过Cookie可以保存一些诸如用户名、浏览记录、表单记录、登录和注销等各种数据。但是这种方式非常不安全,因为Cookie保存在用户的机器上,如果Cookie被伪造、篡改或删除,就会造成极大的安全威胁,因此,现代网站设计通常将Cookie用来保存一些不重要的内容,实际的用户数据和状态还是以Session会话的方式保存在服务器端。 Session就是在服务器端的‘Cookie’,将用户数据保存在服务器端,远比保存在用户端要安全、方便和快捷得多。 Session依赖Cookie!但与Cookie不同的地方在于Session将所有的数据都放在服务器端,用户浏览器的Cookie中只会保存一个非明文的识别信息,比如哈希值。 Session是大多数网站都需要具备的功能

走进缓存的世界(一) - 开篇

孤街醉人 提交于 2020-03-26 11:55:29
系列文章 走进缓存的世界(一) - 开篇 走进缓存的世界(二) - 缓存设计 走进缓存的世界(三) - Memcache 概述 对于程序员来说多多少少都懂一点算法,算法是什么?算法是“时间”与“空间”的互换策略。 我们常常研究一个算法的时间复杂度和空间复杂度,如果我们有绝对足够的时间和空间,那么算法就不需要了,可惜这种条件是不存在的,只是在某些情况下我们会协调两者从而达到性能上的平衡。 缓存是一种“用空间换时间”的策略,通俗的讲,缓存就是把一些数据暂时存储起来,避免了某些重复的耗时操作,减少时间开销的一种方法。 商业世界中常说的一句话是“现金为王”。在技术世界里,与之相近的一个说法是“缓存为王”。 从底层到上层主要涉及:数据库模型设计,SQL优化,使用缓存等。从图中的优化模式来看,其中数据库模型设计的合理程度奠定了应用系统优化的基石,如果模型设计得不合理,随着业务发展,后续的优化将会变得很困难。另一方SQL优化也是数据库优化的一个重要方面,慢SQL和top SQL往往是系统性能杀手,它们是导致系统故障的重要潜在危险。 缓存在构建高性能服务器中有着举足轻重的作用,很多时候sql优化, 算法优化所带来的效果可能远远不如缓存带来的优化效果。但是缓存的使用并不是零成本的,任何缓存的增加,都会带来两大问题: 数据不一致 系统复杂度大幅度增加 如何解决呢?首先考虑去掉缓存。不要为了缓存而缓存

Redis在Java web中的应用

删除回忆录丶 提交于 2020-03-26 10:56:05
一般而言Redis在Javaweb应用中存在两个主要的场景,一个是缓存常用的数据,另一个是在需要高速读/写的场合使用它快速读/写,比如一些需要进行商品抢购和抢红包的场合. 一,缓存 在对数据库的读/写操作中,现实的情况是读操作的次数远超写操作, 一般是1 : 9 到3 : 7 的比例,所以需要读的可能性是比写的可能性多得多。当发送S QL 去数据库进行读取时,数据库就会去磁盘把对应的数据索引回来, 而索引磁盘是一个相对缓慢的过程。如果把数据直接放在运行在内存中的Redis 服务器上,那么不需要去读/写磁盘了,而是直接读取内存,显然速度会快得多,并且会极大减轻数据库的压力。 而使用内存进行存储数据开销也是比较大的,因为磁盘可以是TGB 级别,而且十分廉价,内存一般是几百个GB 就相当了不起了,所以内存虽然高效但空间有限,价格也比磁盘高许多,因此使用内存代价较高,并不是想存什么就存什么,因此我们应该考虑有条件的存储数据。一般而言,存储一些常用的数据,比如用户登录的信息: 一些主要的业务信息,比如银行会存储一些客户基础信息、银行卡信息、最近交易信息等。一般而言在使用 Red is 存储的时候,需要从3 个方面进行考虑。 ·业务数据常用吗?命中率如何?如果命中率很低,就没有必要写入缓存。 · 该业务数据是读操作多,还是写操作多,如果写操作多,频繁需要写入数据库,也没有必要使用缓存。