No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Conectar la API al caché

27/29
Recursos

Aportes 17

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Excelente profesor, todo es muy claro y rápido con él.
Odio los profesores que se tiran 1 hora explicando algo que podemos leer en las documentaciones de cada tecnología.

el mejor profesor de platzi, a que si

El profe Carlos debería dar todos los cursos de Node, una chulada todos los cursos que he tomando con el.

Es increible la cantidad de cosas que aprendimos en un solo curso

Este deberia ser el ultimo video de la seccion de cache.

esto estara alojado en el cache del navegador///???

Les comparto un método que sirve para implementar el cache de forma general a cualquier función que lea datos del store.

// store/addOns/cacheUtils.js
const cacheUtils = (cacheApi) => {
  const apply = async (cache_id, {fn, args}) => {
    let data = await cacheApi.get(cache_id);

    if (!data) {
      data = await fn(...args);
      await cacheApi.upsert(cache_id, data);
    }
    return data;
  }

  cacheApi.apply = apply;
  return cacheApi;
}

module.exports = cacheUtils;
// store/remote-redis.js
const RemoteDBMethods = require('./remote')
const cacheUtils = require('./addOns/cacheUtils')
const config = require('../config')
const {host, port} = config.redis

module.exports = cacheUtils(RemoteDBMethods(host, port));
// api/components/users/controller.js
module.exports = (store, cache) => {
  async function list() {
    const cache_id = TABLA;
    return cache.apply(
      cache_id,
      {
        fn: store.list,
        args: [
          TABLA
        ]
      }
    );
  }

  async function get(user_id) {
    const cache_id = `${TABLA}_${user_id}`;
    return cache.apply(
      cache_id,
      {
        fn: store.get,
        args: [
          TABLA,
          user_id
        ]
      }
    );
  }

  function followingUsers(userId) {
    const cache_id = `${TABLA}_user_follow_from_user_${userId}`;
    return cache.apply(
      cache_id,
      {
        fn: store.query,
        args: [
          'user_follow',
          {from_user: userId},
          'JOIN users ON user_follow.to_user = users.id'
        ]
      }
    );
  }

  async function userFollowers(userId) {
    const cache_id = `${TABLA}_user_follow_to_user_${userId}`;
    return cache.apply(
      cache_id,
      {
        fn: store.query,
        args: [
          'user_follow',
          {to_user: userId},
          'JOIN users ON user_follow.from_user = users.id'
        ]
      }
    );
  }
}

Bien, entendido. Muy claro el ejemplo y la práctica.

Cache del microservicio de post hecho:

Así me quedó el controller de posts

async function list(){
        let posts = await cache.list(TABLE)

        if(!posts) {
            console.info(`${TABLE} were not in cache, bringing from DB`)
            posts = await store.list(TABLE)
            cache.upsert(TABLE, posts)
        } else {
            console.log(`Bringing ${TABLE} from cache`)
        }

        return posts
    }

Cuanto tiempo seria el óptimo para dejar en cache?

Todo muy lindo pero deberia enseñar correctamente como nombrar archivos y variables. Super desprolijo.

De los mejores profesores de platzi! 🎉😎

se está usando redis para chache es porque node corre en el server. Es correcto?

esta clase esta genial

excelente gracias

hace tiempo completé el curso pero… Ahora tengo un error que no entiendo, he visto miles de veces los archivos del curso y videos pero lo tengo tal cual en la logica de microservicios y es que hay un microservicio de muchos que he hecho que cuando lo ejecuto con nodemon, con node o con pm2 sale com dependente del main del package.json y sale un mensaje como esto

<code><code>nodemon MSV_events/event.js
[nodemon] 2.0.7
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node MSV_events/event.js index.js`
internal/modules/cjs/loader.js:818
  throw err;
  ^

Error: Cannot find module '/var/www/ConfirmAppNodeJS/index.js'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:815:15)
    at Function.Module._load (internal/modules/cjs/loader.js:667:27)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
    at internal/main/run_main_module.js:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

luego veo el package.json y colico en el “main” la outa de mi index principal (api) y luego ejecuto nuevamente nodemon o node y me dice que pue el Puerto 3000 (donde tengo mi servicio principal y que si está andando) anda ocupado. miro el config.js y normal este microservicio en problema está haciendo un app.listend hacia un Puerto 3002 asi que no comprendo… igual en el script dice “executing nodemon MSV_event/event.js. api/index.js” pero yo no coloco e n el command el “api/index”… Cierro entonces el proceso principal, el index donde está mi carpet api y luego eject entonces este proceso y sale como que se ejecutan los dos a la vez “api escuchando en el Puerto 3000, microservicio de eventos escuchando en el Puerto 3002”

Excelente los consejos que el profesor brinda al final de la clase