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 }));