《Redis实战》一2.3 网页缓存
本节书摘来异步社区《Redis实战》一书中的第2章,第2.1节,作者: 【美】Josiah L. Carlson(约西亚 L.卡尔森)译者: 黄健宏 责编: 杨海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.3 网页缓存在动态生成网页的时候,通常会使用模板语言(templating language)来简化网页的生成操作。需要手写每个页面的日子已经一去不复返——现在的Web页面通常由包含首部、尾部、侧栏菜单、工具条、内容域的模板生成,有时候模板还用于生成JavaScript。
尽管Fake Web Retailer也能够动态地生成内容,但这个网站上的多数页面实际上并不会经常发生大的变化:虽然会向分类中添加新商品、移除旧商品、有时有特价促销、有时甚至还有“热卖商品”页面,但是在一般情况下,网站只有账号设置、以往订单、购物车(结账信息)以及其他少数几个页面才包含需要每次载入都要动态生成的内容。
通过对浏览数据进行分析,Fake Web Retailer发现自己所处理的95%的Web页面每天最多只会改变一次,这些页面的内容实际上并不需要动态地生成,而我们的工作就是想办法不再生成这些页面。减少网站在动态生成内容上面所花的时间,可以降低网站处理相同负载所需的服务器数量,并让网站的速度变得更快。(研究表明,减少用户等待页面载入的时间,可以增加用户使用网站的欲望,并改善用户对网站的印象。)
所有标准的Python应用框架都提供了在处理请求之前或者之后添加层(layer)的能力,这些层通常被称为中间件(middleware)或者插件(plugin)。我们将创建一个这样的层来调用Redis缓存函数:对于一个不能被缓存的请求,函数将直接生成并返回页面;而对于可以被缓存的请求,函数首先会尝试从缓存里面取出并返回被缓存的页面,如果缓存页面不存在,那么函数会生成页面并将其缓存在Redis里面5分钟,最后再将页面返回给函数调用者。代码清单2-6展示了这个缓存函数。
代码清单2-6 cache_request()函数
对于Fake Web Retailer网站上面95%的可被缓存并且频繁被载入的内容来说,代码清单2-6展示的缓存函数可以让网站在5分钟之内无需再为它们动态地生成视图页面。取决于网页的内容有多复杂,这一改动可以将包含大量数据的页面的延迟值从20~50毫秒降低至查询一次Redis所需的时间:查询本地Redis的延迟值通常低于1毫秒,而查询位于同一个数据中心的Redis的延迟值通常低于5毫秒。对于那些需要访问数据库的页面来说,这个缓存函数对于减少页面载入时间和降低数据库负载的作用会更加显著。
在这一节中,我们学习了如何使用Redis来减少载入不常改变页面所需的时间,那么对于那些经常发生变化的页面,我们是否也能够使用Redis来减少它们的载入时间呢?答案是肯定的,接下来的一节将介绍实现这一目标的具体做法。
一次springboot和redis缓存的实践 性能缓慢是开发人员经常面临的一个反复出现且复杂的问题。解决此类问题的最常见方法之一是通过缓存。实际上,这种机制允许在任何类型的应用程序的性能方面实现显着改进。问题是处理缓存并不是一件容易的事。幸运的是,Spring Boot 透明地提供了缓存,这要归功于 Spring Boot 缓存抽象,这是一种允许一致使用各种缓存方法而对代码影响最小的机制。让我们看看开始处理它应该知道的一切。
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
相关文章
- redis实战笔记(10)-第10章 扩展Redis
- redis实战笔记(5)-第5章 使用 Redis构建支持程序
- redis实战笔记(2)-第2章 使用 Redis构建Web应用
- Redis Cluster 原理与实战- 图解- 秒懂
- 《Netty Redis Zookeeper 高并发实战》 勘误
- 解决Redis编译错误zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory
- Redis——maven、spring、jedis快速搭建redis工程
- redis-(error)-MISCONF。Redis。is。configuredto。save。RDBsnapshots
- 【Redis】RedisObject 对象
- springboot(三):Spring boot中Redis的使用
- Shiro Redis注入失败,shiro导致redis不能注入
- Redis数据过期策略详解
- redis缓存在项目中的使用
- Golang 实现 Redis(6): 实现 pipeline 模式的 redis 客户端
- Redis 缓存雪崩、缓存穿透、缓存击穿
- 【Redis】01-如何在Linux下安装Reids保姆级教程
- Redis持久化
- Mac OS X 启动和终止Redis, Mac常用命令,ssh免密
- Redis(1.18)redis阻塞分析
- Redis(1.17)redis客户端管理
- 深入redis内部--字典实现
- redis High Availability---Redis Sentinel翻译
- 曹工说Redis源码(6)-- redis server 主循环大体流程解析
- 曹工说Redis源码(5)-- redis server 启动过程解析,以及EventLoop每次处理事件前的前置工作解析(下)
- Redis 命令
- 【Redis】SpringBoot+MyBatis集成Redis二级缓存
- 【docker】启动redis 的时候报错 :Error response from daemon: Container xxx is not running
- Redis性能指标监控
- redis实现mysql的数据缓存
- 【Redis】 - Redis 6.0 新特性之客户端缓存