简介
Deno 是一个新生的 JavaScript 和 TypeScript 运行时环境,与 Node.js 相比,它支持 Promise 和 async/await,并且带有内置的模块加载器。此外,Deno 还有一个强大的标准库,可以大大减少开发者的工作量。和 Node.js 一样,Deno 也可以使用第三方模块,比如 Redis 模块,来扩展其功能。
Redis 是一种高效的内存缓存数据库,可以快速存储和查询键值对。在 Deno 应用程序中,使用 Redis 缓存可以提高应用程序的性能和响应速度。
本文将分享如何在 Deno 应用程序中使用 Redis 缓存技巧,包括安装 Redis 模块、参与互动、进行测试和优化代码。
安装 Redis 模块
在 Deno 应用程序中使用 Redis 缓存,首先需要安装 Redis 模块。目前,Deno 社区支持两个 Redis 模块:redis
和 redis-deno
。这两个模块都提供了一组 API,用于连接和通信 Redis 服务器。
以下是安装 redis
模块的命令:
deno install --allow-net --name=redis https://deno.land/x/redis/mod.ts
使用此命令后,您可以在 Deno 应用程序中通过以下语句导入 redis
模块:
import { Redis } from "https://deno.land/x/redis/mod.ts";
以下是安装 redis-deno
模块的命令:
deno install --allow-net --name=redis https://deno.land/x/redis_deno/mod.ts
使用此命令后,您可以在 Deno 应用程序中通过以下语句导入 redis-deno
模块:
import { createRedis } from "https://deno.land/x/redis_deno/mod.ts";
参与互动
连接 Redis 并在 Deno 应用程序中使用缓存,您需要了解 Redis 的一些基本概念。
连接 Redis
在使用 Redis 之前,首先需要连接 Redis 服务器,可以使用 redis
模块提供的 connect
方法和 redis-deno
模块提供的 createRedis
方法,创建 Redis 连接。例如:
-- -------------------- ---- ------- -- -- ----- -- ----- ----- - ----- --------------- --------- ------------ ----- ----- --- -- -- ---------- -- ----- ----- - ----- ------------- --------- ------------ ----- ----- ---
数据类型
Redis 提供了多种数据类型,常用的有字符串、哈希、列表、集合和有序集合。您可以使用 redis
模块提供的 set
、hset
、lpush
、sadd
和 zadd
方法,使用 redis-deno
模块提供的 set
、hset
、lpush
、sadd
和 zadd
方法,向 Redis 中存储数据,例如:
-- -------------------- ---- ------- -- -- ----- -- ----- ---------------- --------- ----- ------------------ -------- --------- ----- ------------------- --------- ----- ----------------- --------- ----- ------------------ ---------- ----- -- -- ---------- -- ----- ---------------- --------- ----- ------------------ -------- --------- ----- ------------------- --------- ----- ----------------- --------- ----- ------------------ ---------- -----
缓存过期
为了避免缓存一直存在,您可以使用 redis
模块提供的 setex
方法和 redis-deno
模块提供的 setex
方法,设置存活时间,例如:
// 使用 redis 模块 await redis.setex("key", 60, "value"); // 使用 redis-deno 模块 await redis.setex("key", 60, "value");
获取缓存
一旦 Redis 连接建立,您可以使用 redis
模块提供的 get
、hget
、lrange
、smembers
和 zrange
方法,使用 redis-deno
模块提供的 get
、hget
、lrange
、smembers
和 zrange
方法,从 Redis 中检索数据。例如:
-- -------------------- ---- ------- -- -- ----- -- ----- ----- - ----- ----------------- ----- --------- - ----- ------------------ --------- ----- ---------- - ----- -------------------- -- ---- ----- --------- - ----- ---------------------- ----- ---------- - ----- -------------------- -- ---- -- -- ---------- -- ----- ----- - ----- ----------------- ----- --------- - ----- ------------------ --------- ----- ---------- - ----- -------------------- -- ---- ----- --------- - ----- ---------------------- ----- ---------- - ----- -------------------- -- ----
删除缓存
如果您想从 Redis 中删除记录,可以使用 redis
模块提供的 del
方法和 redis-deno
模块提供的 del
方法,例如:
// 使用 redis 模块 await redis.del("key"); // 使用 redis-deno 模块 await redis.del("key");
进行测试
为了测试您的 Deno 应用程序是否成功使用 Redis 缓存,可以编写一个简单的测试脚本。以下是一个使用 redis
模块的示例:
-- -------------------- ---- ------- ------ - ----- - ---- ----------------------------------- ----- ----- - ----- --------------- --------- ------------ ----- ----- --- ----- --- - -------- ----- ----- - -------- -- -- --- - ----- -- ----- --- ---------- - ----- --------------- -- ------------- - ------------------- ---------------------- -------- ----- -------------- ------- ------------------- ---------------------- ----- -- ------------------ ---------- - ------ - ---- - ------------------- ---------------------- ------- - ------------------- ---------------------- ------------------ -- - ----- ---- ----- --------------- ----- -------------
以下是使用 redis-deno
模块的相同示例:
-- -------------------- ---- ------- ------ - ----------- - ---- ---------------------------------------- ----- ----- - ----- ------------- --------- ------------ ----- ----- --- ----- --- - -------- ----- ----- - -------- -- -- --- - ----- -- ----- --- ---------- - ----- --------------- -- ------------- - ------------------- ---------------------- -------- ----- -------------- ------- ------------------- ---------------------- ----- -- ------------------ ---------- - ------ - ---- - ------------------- ---------------------- ------- - ------------------- ---------------------- ------------------ -- - ----- ---- ----- --------------- ----- -------------
测试应该返回类似以下内容的结果:
[2022-06-25T16:49:56.969Z] 缓存未命中 [2022-06-25T16:49:56.970Z] Redis 写入 hello=world [2022-06-25T16:49:56.976Z] 值:world
优化代码
当您开始在 Deno 应用程序中使用 Redis 缓存时,可能需要为缓存添加一些逻辑,以便确保缓存数据的完整性和有效性。以下是一些提示:
键
Redis 缓存键应该具有唯一性,以确保缓存不会发生冲突。为了避免键的重复,您可以使用应用程序数据的散列值作为 Redis 缓存键。
const data = { id: 1, name: "John Smith" }; const key = `user:${JSON.stringify(data).hashCode()}`;
过期
缓存的时间越长,可能越容易失效。为了避免这种情况,您可以使用 setex
方法在 Redis 缓存中设置过期时间。
await redis.setex(key, 600, JSON.stringify({ id: 1, name: "John Smith" }));
在此示例中,数据将在 10 分钟后过期。
缓存策略
您应该考虑使用不同的缓存策略,以满足不同的应用程序需求。例如:
- 热门数据缓存策略: 缓存最常使用的数据(比如用户信息、商品信息等等)。
- 动态数据缓存策略: 缓存频繁变化的数据(比如存储在内存中的用户认证数据)。
- 链接信息缓存策略: 缓存频繁使用和连接的数据(比如 Redis 的连接信息)。
软性过期
在某些情况下,数据的过期时间已过期,但是您可能仍然希望使用该数据,而不希望从新进行计算。可以使用软性过期,提供一个 "最大使用时间",以确保缓存值不会太旧。
例如:
-- -------------------- ---- ------- ----- --- - --------- ----- ------ - ------ -- -- --- ---------- - ----- --------------- -- ------------- - -- -------- ----- --- -- -- ----- ------------- - ----- ------------ ----- ---------------- ------- ------------------------------- ---------- - -------------- - -- ---------------------- - ----- - -------------------- -- ------- - -- ------ - ---- - -- -------- ----- --- -- -- ----- ------------- - ----- ------------ ----- ---------------- ------- ------------------------------- ---------- - -------------- - -- ------
这样,当数据过期时,您可以先使用旧的数据,然后异步获取新的数据,并进行更新。
总结
通过使用 Redis 缓存,您可以显着提高 Deno 应用程序的性能和响应速度。使用 redis
模块或 redis-deno
模块,从 Redis 中检索数据并将数据写入 Redis 缓存非常容易。同时,您还应该注意缓存键的唯一性、缓存的过期时间和缓存策略,以确保缓存数据的完整性和有效性。
最后,如果您需要更深入地了解 Redis 的应用,建议查阅 Redis 的官方文档。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6539e0547d4982a6eb37d27c