当前位置: 首页 > news >正文

建设培训学校网站网站设计与开发培训

建设培训学校网站,网站设计与开发培训,建站模板源码,网站编辑属于什么行业介绍 通过API获取数据时#xff0c;会向服务器发出网络请求#xff0c;收到响应数据。但是#xff0c;此过程可能非常耗时#xff0c;并且可能会导致程序响应时间变慢。 我们使用缓存来解决这个问题#xff0c;客户端程序首先向API发送请求#xff0c;将返回的数据存储…介绍 通过API获取数据时会向服务器发出网络请求收到响应数据。但是此过程可能非常耗时并且可能会导致程序响应时间变慢。 我们使用缓存来解决这个问题客户端程序首先向API发送请求将返回的数据存储在缓存中之后的请求都从缓存中查找数据而不是向API发送请求。 在本文中使用 Redis做为缓存 在 Node.js 的程序中通过4步实现数据缓存的机制。 第 1 步 — 设置项目 在此步骤中我们将安装该项目所需的依赖项并启动 Express 服务器。 首先为项目创建目录mkdir mkdir app进入目录 cd app初始化项目 npm init -y它将创建package.json包含以下内容的文件 {name: app,version: 1.0.0,description: ,main: index.js,scripts: {test: },keywords: [],author: ,license:ISC }接下来使用以下命令安装expressredisaxios库 npm install express redis axios完成后app目录结构如下 app --node_modules --package-lock.json --package.json创建index.js文件并输入以下代码 const express require(express); const app express(); const port process.env.PORT || 3000; app.listen(port, () { console.log(App listening on port ${port}); });保存并运行以下命令 node index.js输出如下 步骤 2 — 通过API获取数据 在刚才的index.js中增加从API获取数据的部分 const express require(express); const app express(); const port process.env.PORT || 3000; async function fetchDataFromApi(userId) {let apiUrl https://xxxx/api;if (characterId) {apiUrl ${apiUrl}/user/${userId};} else {apiUrl ${apiUrl}/user;}const apiResponse await axios.get(apiUrl);console.log(发送API请求);return apiResponse.data; }app.get(/user/:id, async (req, res) {try {const character await fetchDataFromApi(req.params.id);if (!character.length) {throw new Error(请求异常);}return res.status(200).send({fromCache: false,data: character,});} catch (error) {console.log(error);res.status(404).send(请求异常);} });app.get(/user, async (req, res) {try {const characters await fetchDataFromApi();if (!characters.length) {throw new Error(请求异常);}return res.status(200).send({fromCache: false,data: characters,});} catch (error) {console.log(error);res.status(404).send(请求异常);} });app.listen(port, () { console.log(App listening on port ${port}); });运行 node index.js启动服务器之后打开 Postman 发送请求/user, 请求耗时 885 毫秒。为了加快请求速度我们增加 Redis 缓存。 第 3 步 — 增加 Redis 缓存 增加缓存只有初始访问才会从API请求数据所有后续请求都从缓存中获取数据。 在项目中导入redis模块 const redis require ( redis );添加以下代码连接到Redis let redisClient;(async () {redisClient redis.createClient();redisClient.on(error, (error) console.error(Error : ${error}));await redisClient.connect(); })();使用redisClient.get()从缓存中获取数据。如果数据存在我们将isCached设置为 true 并分配cachedResult给result如果cachedResult为空则我们调用API获取数据然后使用redisClient.set()设置到缓存中。 const redisKey user; let results; let isCached false; const cachedResult await redisClient.get(redisKey); if (cachedResult) { isCached true; results JSON.parse(cachedResult); } else { results await fetchDataFromApi(); if (!results.length) { throw new Error(请求异常); } await redisClient.set(redisKey, JSON.stringify(results)); }完整的文件如下 const express require(express); const app express(); const port process.env.PORT || 3000; let redisClient;(async () {redisClient redis.createClient();redisClient.on(error, (error) console.error(Error : ${error}));await redisClient.connect(); })();async function fetchDataFromApi(userId) {let apiUrl https://xxxx/api;if (characterId) {apiUrl ${apiUrl}/user/${userId};} else {apiUrl ${apiUrl}/user;}const apiResponse await axios.get(apiUrl);console.log(发送API请求);return apiResponse.data; }app.get(/user/:id, async (req, res) {try {const redisKey user-${req.params.id}; let results;let isCached false;const cachedResult await redisClient.get(redisKey);if (cachedResult) {isCached true;results JSON.parse(cachedResult);} else {results await fetchDataFromApi(req.params.id);if (!results.length) {throw new Error(请求异常);}await redisClient.set(redisKey, JSON.stringify(results));}return res.status(200).send({fromCache: isCached,data: results,});} catch (error) {console.log(error);res.status(404).send(请求异常);} });app.get(/user, async (req, res) {try {const redisKey user;let results;let isCached false;const cachedResult await redisClient.get(redisKey);if (cachedResult) {isCached true;results JSON.parse(cachedResult);} else {results await fetchDataFromApi();if (!results.length) {throw new Error(请求异常);}await redisClient.set(redisKey, JSON.stringify(results));}return res.status(200).send({fromCache: isCached,data: results,});} catch (error) {console.log(error);res.status(404).send(请求异常);} });app.listen(port, () { console.log(App listening on port ${port}); });保存并运行以下命令 node index.js服务启动后我们通过Postman发送请求发现第一次请求比较慢后边的请求速度都变快了从868毫秒缩短到14毫秒。 到目前为止我们可以从 API 获取数据并把数据设置到到缓存中后续请求从缓存中取数据。 为了防止API端数据变化但是缓存数据没变的情况还需要设置缓存有效性。 第 4 步 — 设置缓存有效性 当缓存数据时要设置合适的过期时间具体时间可以根据业务情况决定。 在本文中将缓存持续时间设置为120秒。 在index.js中增加以下内容 await redisClient.set(redisKey, JSON.stringify(results), { EX: 120, NX: true, });EX缓存有效时间单位秒。NX当设置为时trueset()方法只设置 Redis 中不存在的键。 把以上代码添加到API接口中 app.get(/user/:id, async (req, res) {try {const redisKey user-${req.params.id}; results await fetchDataFromApi(req.params.id);if (!results.length) {throw new Error(请求异常);}await redisClient.set(redisKey, JSON.stringify(results), { EX: 120, NX: true, });return res.status(200).send({fromCache: isCached,data: results,});} catch (error) {console.log(error);res.status(404).send(请求异常);} });app.get(/user, async (req, res) {try {const redisKey user;results await fetchDataFromApi(); if (!results.length) {throw new Error(请求异常);}await redisClient.set(redisKey, JSON.stringify(results), { EX: 120, NX: true, });return res.status(200).send({fromCache: isCached,data: results,});} catch (error) {console.log(error);res.status(404).send(请求异常);} });app.listen(port, () { console.log(App listening on port ${port}); });现在创建一个中间件从缓存中获取数据 async function cacheData(req, res, next) {try {const characterId req.params.id;let redisKey user;if (characterId) {redisKey user-${req.params.id};}const cacheResults await redisClient.get(redisKey);if (cacheResults) {res.send({fromCache: true,data: JSON.parse(cacheResults),});} else {next();}} catch (error) {console.error(error);res.status(404);} }把cacheData加入到API调用中 app.get(/user/:id, cacheData, async (req, res) { try { const redisKey hogwarts-character-${req.params.id}; results await fetchDataFromApi(req.params.id); if (!results.length) { throw new Error(请求异常); } await redisClient.set(redisKey, JSON.stringify(results), { EX: 120, NX: true, }); return res.status(200).send({ fromCache: false, data: results, }); } catch (error) { console.log(error); res.status(404).send(请求异常); } }); app.get(/user, cacheData, async (req, res) { try { const redisKey user; results await fetchDataFromApi(); if (!results.length) { throw new Error(请求异常); } await redisClient.set(redisKey, JSON.stringify(results), { EX: 120, NX: true, }); return res.status(200).send({ fromCache: false, data: results, }); } catch (error) { console.log(error); res.status(404).send(请求异常); } });当访问API时/usercacheData()首先执行。如果数据被缓存它将返回响应。如果在缓存中没有找到数据则会从API请求数据将其存储在缓存中并返回响应。 再次利用Postman来验证接口发现响应时间只有15毫秒左右。 总结 在本文中我们构建了一个 Node.js 程序该程序 API 获取数据并使用Redis进行缓存只有初次请求和缓存过期后才从API获取数据之后的请求都从缓存中获取数据大大缩短请求所用的时间。
http://www.yutouwan.com/news/6089/

相关文章:

  • 佛山大型网站建设免费设计签名在线生成
  • 做app推广上哪些网站吗wordpress贴代码
  • 深圳营销型网站建设案例在网站后台做网页
  • wordpress 网站备案号seo免费软件
  • 网站建设 服饰鞋帽顺电网上商城app
  • python node 网站开发农业网站怎么做
  • 嘉峪关建设路小学网站wordpress整站
  • 有了网站的域名下一步怎么做有域名如何建网站
  • 最佳线上网站制作模板网站建设 通知
  • 雄安专业网站建设电话用cms做网站怎么样
  • 一级a做爰片手机电影网站英文wordpress自动更新
  • 印刷报价网站源码下载wordpress 内容编辑
  • php网站文件下载怎么做深圳市住房和建设
  • 网上商城是什么软件杭州网站seo推广软件
  • 我男同同性做视频网站织梦网站后台网址
  • 网站做302重定向会怎么样网店美工招聘信息
  • 三线建设学兵连网站西安地区联系人自己建网站卖东西怎么样
  • 光纤做网站 移动不能访问电信湖北省住房建设厅网站
  • 南宁网站制作定制成都网站制作芜湖厂商
  • 如何建立一个网站来卖东西注册一个网站域名一年需要多少钱
  • 可以写代码的网站有哪些问题网站备案的幕布是什么
  • Ext做网站担保公司网站建设方案
  • 单位做网站福建建设工程招投标信息网
  • wordpress建站详细教程什么是网站制作app
  • 怎么提升网站的排名成品网站1688入门网
  • 沈阳科技网站首页it外包服务公司排名
  • 有全部公司的网站在线ps照片处理手机版
  • 有趣的网站官网口碑营销成功案例
  • 做网站和编程序黑龙江网站建设
  • 德州网站开发培训怎么编辑wordpress主题代码