使用Redis做动态页面缓存,提高网页访问速度

目的

本关目的:实现使用Redis缓存网页。

相关知识

本文将教会你掌握:1SETEX命令,2hash()方法。

在动态生成网页的时候,通常会使用模板(template)来简化网页的生成,现在已经不再需要我们手写一整个页面。通常,一个网页包括头部,尾部,侧边栏,工具栏和内容域等部分组成,每个部分都会独立使用一个模板来编写。

尽管都是动态的生成网页了,但大多数网站的内容都不会经常变化(大的变化),大多数网页的内容也是在一定周期内保持不变,这些网页就不需要动态生成。

本关卡中,我们会通过缓存的方式避免生成这些页面,减少动态生成页面所花费的时间,降低服务器的负载,提高网页访问速度。

我们需要在请求被响应之前,通过一个缓存函数判断:

  • 尝试从缓存中取出该请求的响应页面并返回
  • 若上述缓存不存在(失效),则:
    • 响应该请求,生成页面
    • 缓存至 Redis,生存时间为10分钟
    • 将该页面返回

我们可以使用字符串键来存储缓存页面,所以你可以使用 GET 命令尝试取出缓存页面,但当我们想要缓存页面时,则应该使用 SETEX 命令,该命令和 SET 命令的区别是,它是一个原子性(atomic)操作,关联值和设置生存时间两个动作会在同一时间内完成,所以它在 Redis 用作缓存时很常用。它的语法如下:

conn.setex(key, value, seconds)

其中:seconds 是键的生存时间,单位为秒。

我们将真实的请求响应简化一下,变为返回一个字符串 "content for http://xxx",这样我们整个缓存方法就是:

def cache_request(request_url):
page_key = 'cache:' + str(hash(request_url))
content = conn.get(page_key)if not content:
content = "content for " + request_url
conn.setex(page_key, content, 600)return content

其中,我们使用了 hash() 方法将一个请求的 URL 地址通过哈希编码转化成为一个字符串,该字符串和 URL 一一对应,所以我们可以使用这个哈希值作为缓存的键。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/198676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

公募REITs交易规则详解

普通投资者是否可以参与基础设施公募REITs交易? 基础设施公募 REITs 采取封闭式运作,符合法定条件并经交易所依法审核同意后,可以上市交易。基础设施公募 REITs 的认购和交易实施适当性管理制度。尽管对普通投资者参与基础设施公募 REITs 的认购和交易没…

SpringBoot整合MongoDB

一、环境准备 1、添加 SpringData 依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>2、配置 yml 文件 方式一&#xff1a; sprin…

新手安装Anaconda与Miniconda怎么选?

Python使用者的一大挑战是库的管理和环境的隔离&#xff0c; 常使用分布式管理系统&#xff0c;如Anaconda或Miniconda。接下来将探讨一下这两者的相似之处、差异和应用场景。 1、Anaconda和Miniconda的基本情况 Anaconda和Miniconda都是Continuum Analytics的开源项目&#x…

boost::throw_exception错误:修改VS代码生成异常选项为/EHsc

VS2013添加boost头文件和库文件路径后&#xff0c;代码编译报错&#xff1a; 错误 LNK2019 无法解析的外部符号 “void __cdecl boost::throw_exception(class std::exception const &)” (?throw_exceptionboostYAXAEBVexceptionstdZ)&#xff0c;该符号在函数 “public:…

uniapp打包的h5项目多了接口调用https://api.next.bspapp.com/client

产生跨域问题。 这个实际上是因为该项目在manifest.json文件中勾选了‘uni统计配置’导致的&#xff0c;取消勾选就可以了。 如果是小程序项目&#xff0c;在小程序开发者工具中添加可信任域名就可以了。 可以看看下面这个链接内容 uni-app H5跨域问题解决方案&#xff08;…

Python实现股票回测框架搭建,回测交易策略可行性。

文章目录 什么是回测框架?回测框架交易历史数据回测报告回测示例关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道…

建设纺织企业安全生产风险管控平台,降低生产风险

纺织行业是一个传统的行业&#xff0c;近年来面临着市场竞争加剧、成本压力上升、环保要求提高等挑战。纺织行业未来的发展需要紧跟市场需求和行业趋势&#xff0c;通过技术创新、消费升级、智能化生产、绿色环保和多元化市场等策略&#xff0c;提高产品附加值和市场竞争力&…

Footprint Analytics x Future3 万字研报:AI 与 Web3 数据行业融合的现状、竞争格局与未来机遇探析(上)

GPT的横空出世将全球的目光吸引至大语言模型&#xff0c;各行各业都尝试着利用这个“黑科技”提高工作效率&#xff0c;加速行业发展。Future3 Campus携手Footprint Analytics共同深入研究AI与Web3结合的无限可能&#xff0c;联合发布了《AI与Web3数据行业融合现状、竞争格局与…

写给初学者的 HarmonyOS 教程 -- 页面路由(router)

页面路由&#xff08;router&#xff09;是指在应用程序中实现不同页面之间的跳转和数据传递。 HarmonyOS 提供了 Router 模块&#xff0c;通过不同的 url 地址&#xff0c;可以方便地进行页面路由&#xff0c;轻松地访问不同的页面。 类似这样的效果&#xff1a; 页面跳转是…

香港服务器时间不准,差8小时

解决方案1 1、timedatectl查看系统时间 2、查看系统时区 ls /usr/share/zoneinfo 3、删除当前系统所处时区 rm /etc/localtime 4、创建软链接&#xff0c;以替换当前的时区信息 ln -s /usr/share/zoneinfo/Universal /etc/localtime 解决方案2 手动设置硬件时钟 1、设置系…

Hadoop学习笔记(HDP)-Part.15 安装HIVE

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

【MODBUS】libmodbus库从Modbus从站读取值

libmodbus库提供了许多示例代码&#xff0c;用于演示如何使用该库进行Modbus通信。以下是一个简单的libmodbus库示例&#xff0c;用于从Modbus从站读取保持寄存器&#xff08;holding registers&#xff09;的值&#xff1a; #include <stdio.h> #include <stdlib.…

11.Java Spring

11.1Spring基础(核心概念,创建和使用,简单读取) 11.2SpringBoot 11.3SpringMVC 11.4MyBatis(基础) 11.5MyBatis(进阶) 11.6AOP 11.7统一功能处理 11.8事务 11.9密码加密,加盐算法(手动实现) 11.10Redis基础​​​​​​​

uniapp中wx.getSystemInfoSync() 或 wx.getSystemInfo() 踩坑

可以通过 wx.getSystemInfoSync() 或 wx.getSystemInfo() 方法获取设备的信息&#xff0c;其中包括 User-Agent。wx.getSystemInfoSync() 方法是同步获取设备信息&#xff0c;返回值是一个对象&#xff0c;包含了设备的详细信息&#xff0c;如系统版本、屏幕宽高等。wx.getSyst…

今日实施|解读新国标对数据库审计的能力要求

数据库审计是数据安全建设不可或缺的技术工具之一&#xff0c;无论是国家级的法律或标准&#xff0c;还是等保以及行业级的安全标准均对使用数据库审计有明确要求。据相关数据统计显示&#xff0c;数据库审计产品的市场需求已占据中国数据库安全市场容量的6成以上。 12月1日&am…

黑豹程序员-java发邮件,发送内容支持html,带多附件的案例

介绍 发邮件mail是常见的软件功能&#xff0c;下面利于spring和java的mail库实现发送内容支持html&#xff0c;带多附件的案例 开启SMTP邮件发送协议 谁提供的SMTP邮件服务&#xff0c;就找谁开启。QQ邮箱类似。 依赖 <!--Java MAil 发送邮件API--><dependency&g…

Linux 进程优先级

什么是进程的优先级 优先级&#xff1a;对资源的访问顺序&#xff01;注意优先级与权限的区别&#xff0c;优先级决定的是访问资源的顺序&#xff0c;这意味着无论是谁都可以访问到资源&#xff1b;但是如果你没有权限&#xff0c;你是不能访问资源的&#xff01; 这个应该比较…

el-date-picker时间控制范围为过去时间不可选

<el-date-picker :picker-options"startPickerOptions()" value-format"yyyy-MM-dd HH:mm:ss" v-model"form.applyFixPlan" type"datetime" placeholder"选择日期时间"> </el-date-picker> 在method中定义star…

c++ 三目运算符在类中的使用

简介 在类比较方面&#xff0c;三目运算符可以用于重载比较运算符。 代码示例1 #include <iostream> #include <cstring>class Person { public:Person(const char* name, int age) : m_age(age) {m_name new char[strlen(name) 1];strcpy(m_name, name);}~Pe…