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

  • 相关阅读:
    Linux0.12内存寻址
    Linux0.12任务调度与进程切换
    Mapreduce实例——倒排索引
    解决echart警告:Can't get dom width or height
    Mapreduce实例——MapReduce自定义输入格式
    Mapreduce实例——ChainMapReduce
    Mapreduce实例——二次排序
    设计模式中介者模式
    设计模式七大原则
    Mapreduce实例——MapReduce自定义输出格式
  • 原文地址:https://www.cnblogs.com/yzyh/p/7699789.html
Copyright © 2011-2022 走看看