Redis安裝
下載地址:https://github.com/tporadowski/redis/releases
下載后解壓到文件夾贱勃,將文件夾重命名為redis
打開cmd窗口,進(jìn)入redis目錄谤逼,執(zhí)行啟動(dòng)命令
redis-server.exe redis.windows.conf
至此redis安裝并啟動(dòng)完成贵扰,默認(rèn)端口為6379
Node添加Redis數(shù)據(jù)庫及用戶數(shù)據(jù)操作
連接Redis數(shù)據(jù)庫
node使用ioredis工具
npm install ioredis --save
// utils/redis.js
const Redis = require("ioredis")
const redis = {
port : 6379, //redis默認(rèn)端口
host : '127.0.0.1',
db:0,
family:4 // 4 (IPv4) or 6 (IPv6)
}
module.exports = new Redis(redis)
用戶數(shù)據(jù)增刪改查
示例用戶數(shù)據(jù)格式:
{ id: 5, name: "小明",address: "魔仙堡", phone: "124" }
在一般數(shù)據(jù)庫中,可以直接存儲(chǔ)這樣的數(shù)據(jù)流部,但是redis是key-value形式戚绕,也不分表,建立表之間的關(guān)聯(lián)也很麻煩枝冀。
我這里選擇用redis的hash存儲(chǔ)舞丛,將用戶數(shù)據(jù)對(duì)象轉(zhuǎn)換為JSON數(shù)據(jù)存入redis
新增用戶數(shù)據(jù)
redis.incr(_id)
實(shí)現(xiàn)id自增
用hash存儲(chǔ)用戶數(shù)據(jù),key是users果漾,以id為字段球切,以用戶數(shù)據(jù)為value
注意:用戶數(shù)據(jù)需轉(zhuǎn)成JSON格式存儲(chǔ)(不要直接放對(duì)象進(jìn)去,否則只能拿到[Object,Object])
再建一個(gè)name2id存儲(chǔ)用戶名和id的映射關(guān)系绒障,方便查找用戶名的id
//data : { name: "小孩",address: "白云", phone: "123" }
const redis = require("../utils/redis")
//設(shè)置id初始值
let _id = 0
const setUsers = async (data) => {
//給data數(shù)據(jù)添加id
let id = await redis.incr(_id)
data["id"] = id
//用name2id存儲(chǔ)用戶名和id的映射吨凑,方便根據(jù)用戶名查詢用戶id
await redis.hset('name2id',data.name,id)
//users存儲(chǔ)用戶數(shù)據(jù)
data = JSON.stringify(data)
//存儲(chǔ)成功返回“OK”
let status = await redis.hset('users',id,data)
return status
}
獲取用戶數(shù)據(jù)
//獲取某key全部數(shù)據(jù)
let usersData = await redis.hgetall("users")
let name2idData = await redis.hgetall("name2id")
//獲取key中某字段數(shù)據(jù)
let getData = await redis.hget("users","33")
打印結(jié)果如下圖
redis.hgetall("users") 獲取users中全部數(shù)據(jù),格式如下
redis.hgetall("name2id") 獲取全部數(shù)據(jù)户辱,格式如下
redis.hget("users","33") 獲取id為33的用戶數(shù)據(jù)
修改用戶數(shù)據(jù)
依然使用hset方法鸵钝,如果哈希表不存在,一個(gè)新的哈希表被創(chuàng)建并進(jìn)行 hset 操作庐镐。如果字段已經(jīng)存在于哈希表中恩商,舊值將被覆蓋,返回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
}
刪除用戶數(shù)據(jù)
//data : { id: 33, name: "小李",address: "修改一下", phone: "232" }
const delUsers = async (data)=>{
//刪除name2id的映射
await redis.hdel("name2id",data.name)
//刪除users中的用戶數(shù)據(jù)
let status = await redis.hdel("users",data.id)
//返回被刪除的數(shù)量
return status
}
根據(jù)用戶名查找用戶數(shù)據(jù)
查找成功返回用戶數(shù)據(jù)焚鹊,查找失敗返回NULL
const searUsers = async (name)=>{
//先找用戶名對(duì)應(yīng)的id
let id = await redis.hget("name2id",name)
//根據(jù)id去users里拿用戶數(shù)據(jù)
let data = await redis.hget("user2",id)
//返回用戶數(shù)據(jù)的字符串 {"name":"小李","address":"123","phone":"232","id":33}
//用JSON.parse(data)轉(zhuǎn)為對(duì)象傳回前端
return data
}