代码之家  ›  专栏  ›  技术社区  ›  ChrisRich

设计模式:将http请求与可插入的Redis缓存机制相结合

  •  0
  • ChrisRich  · 技术社区  · 7 年前

    get / set 功能,例如:

    import http from 'request-promise-native';
    import redis from 'redis';
    import bluebird from 'bluebird';
    
    bluebird.promisifyAll(redis.RedisClient.prototype);
    bluebird.promisifyAll(redis.Multi.prototype);
    
    const redisClient = redis.createClient();
    
    const getData = async id => {
      const cacheKey = `some-key-${id}`;
      const cached = await redisClient.getAsync(cacheKey);
    
      if (cached) {
        return JSON.parse(cached);
      }
    
      const response = await http({
        method: 'GET',
        url: `https://example.com/${id}`,
        json: true,
      });
    
     redisClient.set(cacheKey, JSON.stringify(response), 'EX', 3600);
     return response;
    }
    

    这对于一些API调用很有效,但是当您有一个包含数十个或数百个调用的复杂API时,这种方法很难维护和切换。

    request-promise-native ).

    你能推荐一个更好的解决方案吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Mazki516    7 年前

    您提到的设计模式是Decorator函数,您还可以通过使用自定义函数包装api调用来实现它,该函数在每次访问api之前都调用redis。

    当构建高负载/高并发应用程序时,您应该考虑 未在热路径上执行大量cpu消耗任务/长时间阻塞任务/分配(创建大量新对象)

    Redis性能受限于cpu(1代码)&记忆与记忆;一个简单的虚拟机(2核、4gb、1gbit网络)可以同时处理数十个K。

    在redis出现问题之前,你的nodejs应用程序将耗尽cpu/内存。

    推荐文章