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;