美文网首页web前端
redis实现缓存

redis实现缓存

作者: 姜治宇 | 来源:发表于2022-05-27 18:22 被阅读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;
    
    

    相关文章

      网友评论

        本文标题:redis实现缓存

        本文链接:https://www.haomeiwen.com/subject/spxvprtx.html