node操作redis
2022-05-26 本文已影响0人
姜治宇
redis是干啥的
redis其实就是一种nosql数据库,用来存储数据的。
nosql并没有表结构这类东西,数据都是以键值对的方式存储。
redis最大特点就是速度快,因为数据都是保存在内存中。
因此,我们可以将用户频繁查询的数据存入redis中,以提高查询性能。
安装
推荐大家用docker进行安装。先拉取镜像,然后启动redis,默认端口号是6379。
docker pull redis
docker run -d -p 6379:6379 --name myRedis redis
我们还可以安装一个redis图形化界面,这样可以比较形象的看到数据存储结构。
下载链接:https://pan.baidu.com/s/1PTf0VALc3Qp8Oa78cvBzcA
提取码:epsk
node连接redis
首先需要安装redis插件,然后再装个util插件,可以很方便的将redis的方法封装成promise调用。
npm install redis -S
npm install util -S
以express为例。
index.js:
var express = require('express');
var router = express.Router();
var redis = require('redis');
const { promisify } = require('util');
const client = redis.createClient({
host: 'localhost',
port: 6379
});
client.on('error', (err) => {
console.log('redis error>>>', err);
});
/* GET home page. */
router.get('/', async (req, res, next) => {
let redisObj = promiseRedis(client);
let user = {
status: 0,
info: {
username: 'jack',
password: '123456',
age: 16
}
};
await redisObj.set('userInfo', JSON.stringify(user));
let userInfo = await redisObj.get('userInfo');
res.send(userInfo);
// res.render('index', { title: 'Express' });
});
function promiseRedis(client) {
return {
exists: promisify(client.exists).bind(client),
keys: promisify(client.keys).bind(client),
set: promisify(client.set).bind(client),
get: promisify(client.get).bind(client),
del: promisify(client.del).bind(client),
incr: promisify(client.incr).bind(client),
decr: promisify(client.decr).bind(client),
lpush: promisify(client.lpush).bind(client),
hexists: promisify(client.hexists).bind(client),
hgetall: promisify(client.hgetall).bind(client),
hset: promisify(client.hset).bind(client),
hmset: promisify(client.hmset).bind(client),
hget: promisify(client.hget).bind(client),
hincrby: promisify(client.hincrby).bind(client),
hdel: promisify(client.hdel).bind(client),
hvals: promisify(client.hvals).bind(client),
hscan: promisify(client.hscan).bind(client),
sadd: promisify(client.sadd).bind(client),
smembers: promisify(client.smembers).bind(client),
scard: promisify(client.scard).bind(client),
srem: promisify(client.srem).bind(client)
}
}
module.exports = router;
运行结果:
1.png
看一下redis的图形化界面:
3.png