1. 下载Redis Windows安装包
下载地址
2. 解压安装包,打开该文件夹,在此文件按住shifit 键 并点击鼠标右键
在此处打开命令行,输入命令 redis-server.exe即可启用服务
也可以选择开机自动启动,输入命令 redis-server --service-install redis.windows.conf
3. 此步骤的窗口不关闭,重新打开一个命令窗口
输入redis-cli.exe即可操作(增删改查)缓存,常见命令,直接百度输入 redis 常见命令即可找到
4.redis实用命令
根据不同的id 来存缓存,根据不同的id来找缓存(登录+修改信息需要存入和更新或删除缓存,其余都没必要)
增加一个集合方法
HMSET id1 name lisi age 22 hoby zuqiu(分别是代表 操作指令 -- 主键 -- 副键 值 -- 副键 值...)
这里结果为id1{name:'lisi',age:22,hoby:'zuqiu'}
获取一个集合某个属性的方法
HGET id1 name(获取主键名为 id1 的name属性的值 )
这里结果为lisi
HDEL id1 name(删除主键名为 id1 的name属性的值)
这里结果为id1{age:22,hoby:'zuqiu'}
HGETALL key:获取对象的所有信息
目前能实现通过key 把一个集合查询出来
del key:删除某个集合
增加缓存--修改缓存--删除缓存--实现思路:
1.登录时在判断账号密码均正确的条件下储存缓存
2.登陆后修改时按照修改的值全部覆盖原来的缓存(相当于重新设置了缓存)
3.查询时可根据数据库中查询到的账号密码存入缓存,由于查询时发请求未发送密码,所以需要根据用户名查询到的数据把密码查询出来,
再储存缓存
4.注意点:
1.如果有缓存,返回的是一个对象,可以直接点出来属性和属性值
2.如果没有缓存,返回的是一个需要data[0]的对象,需要处理才能点出属性和属性值
3.所以,这里需要进行一个判断,当有缓存时data.length是为undefied,而当没有缓存时,data.length等于1,所以根据不同的值设置不
同的取值方法
4.有缓存取值:data.user(假如我的data里面有user属性)
5.没缓存取值:data[0].user
6.删除缓存:前端发送id 和 user到后台,后台根据user进行删除缓存
推荐redis命令文章
nodejs 操作缓存方法
1. node根目录输入:
npm i redis --save
2. node app.js文件输入:
var redis = require("redis")
, client = redis.createClient()
,session = require('express-session')
,RedisStore = require('connect-redis')(session);
client.on("error", function (err) {
console.log("Error " + err);
});
client.on("connect", runSample);
function runSample() {
// Set a value
client.set("string key", "Hello World", function (err, reply) {
console.log(reply.toString());
});
// Get a value
client.get("string key", function (err, reply) {
console.log(reply.toString());
});
}
3. 当连接到 Redis 后会调用 runSample 函数并设置一个值,紧接着便读出该值,运行的结果如下:
OK
Hello World
如何保护数据库?具体操作办法?
思路:
1. 前端发送请求到后台
2. 后台拿到请求后查询缓存是否有该数据
3. 如果有,那么直接将缓存区查询到的数据返回到前端
4. 如果没有,那么按照正常方式请求数据库,得到结果返回到前端
具体实现代码:
app.get('/findnew',function(req,res){
console.log('正在查询表2的信息,admin!!!')
//存数据缓存
client.set("name", "123", function (err, reply) {
console.log('11111:',reply);
});
//取缓存数据
client.get("name", function (err, reply) {
console.log(reply)
//如果查询到缓存中没有name的数据,那么发起请求查询数据库,返回数据
if(reply.length == 0){
newslist.find({name:req.query.name},function(err,docs){
console.log('长度:',docs.length)
/**设置响应头允许ajax跨域访问**/
res.setHeader("Access-Control-Allow-Origin","*");
/*星号表示所有的异域请求都可以接受,*/
res.setHeader("Access-Control-Allow-Methods","GET,POST");
if(docs == ''){
res.send('1');
}else{
res.send(docs);
}
})
//如果查询到缓存中有name的数据,那么直接返回该缓存的数据
}else{
res.send(reply);
}
});
})
总结: redis是保护数据库的一个防护层,可以有效减少数据库的请求数,提升性能,而且本身缓存是存在内存中,读取速度也会提升,所以增加缓存是一个明智的选择,当然还可以设置缓存失效的时间,具体实现后续补上。