6

Node.js & Redis Caching

 1 year ago
source link: https://gist.github.com/bradtraversy/a9dedcdf4350fd417819ee6538482aae
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.

Node.js & Redis Caching · GitHub

Instantly share code, notes, and snippets.

Node.js & Redis Caching

I believe line 6 should be const REDIS_PORT = process.env.REDIS_PORT || 6379;
process.env.REDIS_PORT instead of process.env.PORT

I believe line 6 should be const REDIS_PORT = process.env.REDIS_PORT || 6379;
process.env.REDIS_PORT instead of process.env.PORT

That's true

You can also use console.time().

async function getRepos(req, res, next) {
  try {
    console.log('Fetching Data...');

    const { username } = req.params;
    console.time(`START time`);
    const response = await fetch(`https://api.github.com/users/${username}`);

    const data = await response.json();

    const repos = data.public_repos;

    // Set data to Redis
    client.setex(username, 3600, repos);

    res.send(setResponse(username, repos));

    console.timeEnd(`END time`);

  } catch (err) {
    console.error(err);
    res.status(500);
  }
}

And again:

console.time(`START GET time`);
    app.get('/repos/:username', cache, getRepos);
console.timeEnd(`END GET time`);

I believe line 6 should be const REDIS_PORT = process.env.REDIS_PORT || 6379;
process.env.REDIS_PORT instead of process.env.PORT

And also he should use the const PORT value instead of 5000 on line 57 to be like this app.listen(PORT, () => {

Copy link

Author

bradtraversy commented on Aug 21, 2019

edited

Yes, you are right. I pinned it as a comment on the video, I will change when I get the chance

Greetings! [thank you for everything so far, hopefully life makes all equal after all :D] how will this middleware deal with changes on the api data and so on? I mean, if the user creates a new repo.. what'd happen? At line 47, we're just checking if the cached data isn't null, not handling any comparison with api current data, right? Thanks in advance. [btw I'm getting my 2nd mern udemy course, thanks 4all again.]

Or, will try or/and async , await keywords handle this on the background? Thanks.

I believe line 6 should be const REDIS_PORT = process.env.REDIS_PORT || 6379;
process.env.REDIS_PORT instead of process.env.PORT

Correct, sorry about that

Do you have code samples accessing redis through aws elasticache ?

Copy link

Islam990 commented on Jan 12

Thanks sir

This code did not work for me idk why! this error comes out

ClientClosedError: The client is closed

I have a same problem. The terminal it shows ClientClosedError: The client is closed. If I use await client.connect(), the system hangs

I have the same problem as @MartynCastagno

Copy link

YiqiCodes commented 2 days ago

edited

Resolved: Keep await client.connect()

Put data in a variable and await the response. See function:

async function cache(req, res, next) {
  const { username } = req.params;
  const data = await client.get(username);
  if (data !== null) {
    res.send(setResponse(username, data));
  } else {
    next();
  }
}

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK