Redis安装
下载地址:https://github.com/tporadowski/redis/releases
下载后解压到文件夹,将文件夹重命名为redis
打开cmd窗口,进入redis目录,执行启动命令
redis-server.exe redis.windows.conf
至此redis安装并启动完成,默认端口为6379
Node添加Redis数据库及用户数据操作
连接Redis数据库
node使用ioredis工具
npm install ioredis --save
// utils/redis.js
const Redis = require("ioredis")
const redis = {
port : 6379, //redis默认端口
host : '127.0.0.1',
db:0,
family:4 // 4 (IPv4) or 6 (IPv6)
}
module.exports = new Redis(redis)
用户数据增删改查
示例用户数据格式:
{ id: 5, name: "小明",address: "魔仙堡", phone: "124" }
在一般数据库中,可以直接存储这样的数据,但是redis是key-value形式,也不分表,建立表之间的关联也很麻烦。
我这里选择用redis的hash存储,将用户数据对象转换为JSON数据存入redis
新增用户数据
redis.incr(_id)
实现id自增
用hash存储用户数据,key是users,以id为字段,以用户数据为value
注意:用户数据需转成JSON格式存储(不要直接放对象进去,否则只能拿到[Object,Object])
再建一个name2id存储用户名和id的映射关系,方便查找用户名的id
//data : { name: "小孩",address: "白云", phone: "123" }
const redis = require("../utils/redis")
//设置id初始值
let _id = 0
const setUsers = async (data) => {
//给data数据添加id
let id = await redis.incr(_id)
data["id"] = id
//用name2id存储用户名和id的映射,方便根据用户名查询用户id
await redis.hset('name2id',data.name,id)
//users存储用户数据
data = JSON.stringify(data)
//存储成功返回“OK”
let status = await redis.hset('users',id,data)
return status
}
获取用户数据
//获取某key全部数据
let usersData = await redis.hgetall("users")
let name2idData = await redis.hgetall("name2id")
//获取key中某字段数据
let getData = await redis.hget("users","33")
打印结果如下图
redis.hgetall("users") 获取users中全部数据,格式如下
redis.hgetall("name2id") 获取全部数据,格式如下
redis.hget("users","33") 获取id为33的用户数据
修改用户数据
依然使用hset方法,如果哈希表不存在,一个新的哈希表被创建并进行 hset 操作。如果字段已经存在于哈希表中,旧值将被覆盖,返回0
//data : { id: 33, name: "小李",address: "修改一下", phone: "232" }
const editUsers = async (data)=>{
let id = data.id
data = JSON.stringify(data)
let status = await redis.hset("users",id,data)
return status //0
}
删除用户数据
//data : { id: 33, name: "小李",address: "修改一下", phone: "232" }
const delUsers = async (data)=>{
//删除name2id的映射
await redis.hdel("name2id",data.name)
//删除users中的用户数据
let status = await redis.hdel("users",data.id)
//返回被删除的数量
return status
}
根据用户名查找用户数据
查找成功返回用户数据,查找失败返回NULL
const searUsers = async (name)=>{
//先找用户名对应的id
let id = await redis.hget("name2id",name)
//根据id去users里拿用户数据
let data = await redis.hget("user2",id)
//返回用户数据的字符串 {"name":"小李","address":"123","phone":"232","id":33}
//用JSON.parse(data)转为对象传回前端
return data
}