使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值