3

RediQLess:基于Redis与GraphQL的API缓存工具

 2 years ago
source link: https://www.jdon.com/57423
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
RediQLess:基于Redis与GraphQL的API缓存工具

RediQLess 将GraphQL的强类型模式和查询的精度与Redis的动态缓存和延迟监控相结合。复杂的缓存变得简单。

RediQLess 缓存对第三方 API 的独特调用,以实现最终的可移植性和最大的可重用性。RediQLess 的缓存用作 API 的替代品。

为开发人员提供尽可能轻量级的数据库,运行速度平均比对 API 的标准调用快 80% 到 90%。同时避免过多地调用第三方 API。

作为中间件的 RediQLess 由两个类对象提供支持,即 RediQL 和 RediCache:如果 RediCache 发现传入的查询信息存储在 Redis 中,则 RediCache 能够在不到 15 毫秒的时间内返回请求的数据。如果 RediCache 在 Redis Store 中找不到传入的查询,则该查询将通过 RediQL 发回,以通过 GraphQL 获取请求的 API 模式中的信息。

这个包是为了与 redis 一起工作。

RediQLess是为Node.js/Express服务器构建的,具有极其简单的实施过程,因此开发人员可以轻松地掌握流程并开始缓存。

代码案例如下:

// Require in Express and app
const express = require('express');
const app = express();// Require/Config dotenv for access to your PORT
const dotenv = require('dotenv').config();
const PORT = process.env.PORT;// Require GraphQL and Schema
const graphql  = require('express-graphql');
const schema = require('./schema/schema');// Initialize up Redis Client
const redis = require('redis');
const redisClient = redis.createClient({
  host: 'localhost',
  port: 6379,
});// Require in RediQLess middleware
const { RediQLess } = require('rediqless');
// Pass redisClient into RediqLess Constructor
const RediQL = new RediQLess(redisClient);
// Implement RediQLess' query capability
const RediQLQuery = RediQL.query;
// Implement RediqLess' cache clearing capability
const RediQLClear = RediQL.clearCache;// Leverage RediQLess Queries
// ** Assign queries on the front-end to 'req.body.data.query'
app.use('/rediql', RediQLQuery, (req, res) => {
  return res.status(202).send(res.locals.query))
});// Leverage RediQLess Cache Clearing
app.use('/clearcache', RediQLClear, (req, res) => {
  return res.status(202).send('Cache Cleared')
});// RediQLess query will forward request to this Middleware if information is not yet cached
app.use('/graphql', graphqlHTTP.graphqlHTTP({ schema, graphiql: true }));

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK