web前端

redis实现缓存

2022-05-27  本文已影响0人  姜治宇

商品信息缓存

redis一个主要用途就是做缓存,有了缓存可以极大减少数据库的压力。
我们今天试着用redis做一个商品信息的缓存。具体实现思路为:
1、根据商品id,去redis查询;
2、如果redis中存在key,就直接返回;
3、如果redis没有,就连库查询;
4、将数据库返回的结果记入redis;
5、设置key的过期时间;
6、将结果返回客户端。
index.js:

var express = require('express');
var router = express.Router();
var redis = require('redis');
var promiseRedis = require('../tools/redisTool');
const client = redis.createClient({
  host: 'localhost',
  port: 6379
});

client.on('error', (err) => {
  console.log('redis error>>>', err);
});
/* GET home page. */
router.get('/shop', async (req, res, next) => {


  //获取参数信息
  let id = req.query.id;

  let redisObj = promiseRedis(client);

  let goodsInfo = await redisObj.get(`cache:shop:${id}`);
  if (goodsInfo) { //如果redis有商品信息,直接返回客户端
    console.log('走缓存');
    res.send(JSON.parse(goodsInfo));
  } else {
    //查库...
    console.log('穿透redis,连库查询');
    let goods = {
      status: 0,
      msg: 'success',
      info: {
        id: 100,
        name: '古越龙山绍兴花雕酒',
        price: '25.00',
        desc: '好喝的不得了~~'
      }
    }

    await redisObj.set(`cache:shop:${id}`, JSON.stringify(goods));//存入redis

    await redisObj.expire(`cache:shop:${id}`,5); //设置key的过期时间,单位是秒
    res.send(goods);
  }

});

module.exports = router;

redisTool.js:

const { promisify } = require('util');
function promiseRedis(client) {

    return {
        expire: promisify(client.expire).bind(client),
        set: promisify(client.set).bind(client),
        get: promisify(client.get).bind(client),
        del: promisify(client.del).bind(client),

    }

}
module.exports = promiseRedis;

上一篇下一篇

猜你喜欢

热点阅读