使用Redis为数据库添加保护(缓存)

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是保护数据库的一个防护层,可以有效减少数据库的请求数,提升性能,而且本身缓存是存在内存中,读取速度也会提升,所以增加缓存是一个明智的选择,当然还可以设置缓存失效的时间,具体实现后续补上。

原文地址:https://www.cnblogs.com/yzyh/p/7699789.html