首页 > 网站 > WEB开发 > 正文

Nodejs学习笔记(九)--- 与Redis的交互(mranney/node_redis)入门

2024-04-27 14:13:08
字体:
来源:转载
供稿:网友

Nodejs学习笔记(九)--- 与Redis的交互(mranney/node_redis)入门

目录

  • 简介和安装
    • redis简介
    • redis安装
    • redis运行
    • node_redis安装
  • 连接到redis服务器redis.createClient()
  • 认证 client.auth(passWord, callback)
  • 单值set和get
    • client.set(key,value,[callback])
    • client.get(key,[callback])
    • client.set([key,value],callback)
  • 多值get和set
    • client.hmset(hash,obj,[callback])
    • client.hmset(hash,key1,val1, ... keyn,valn,[callback])
    • client.hgetall(hash,[callback])
  • 打包执行多个命令[事务]
  • 其它...

简介和安装

  • redis简介:
  1. 开源高性能key-value存储;采用内存中(in-memory)数据集的方式,也可以采用磁盘存储方式(前者性能高,但数据可能丢失,后者正好相反)
  2. 支持字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等;支持对复杂数据结构的高速操作。
  3. 特性多,支持主从同步、pub/sub等
  4. 支持多种客户端(http://redis.io/clients)
  5. ...

  注:应用场景没有提到,暂时没有太多实际体会,不瞎说,以免误导人,但是从它的简介和特性来说,起码缓存场景是不错的!

  Redis下载地址:https://github.com/dmajkic/redis/downloads

  node.js客户端:node_redishttps://github.com/mranney/node_redis/

  • redis安装(Windows平台)

  redis非常方便,直接下载解压就可以使用,因为开发环境是Win7 64位,直接下载(示例下载的安装包:redis-2.4.5-win32-win64.zip

  • redis运行

  解压到后运行"64bit"文件夹下的redis-server.exe即可,但是这样运行会出现一个如下警告提示:

  #Warning: no config file specified,using the default config. In order to specify a config file use ‘redis-server /path/to/redis.conf’

  提示也比较明显,没有明确的配置文件,使用的是默认配置,请使用‘redis-server /path/to/redis.conf’指定明确的配置文件

  根据提示运行redis成功(如下图)

  在redis-server.exe同级目录下可以看到一个redis.conf文件,这就是配置文件

  • node_redis安装
npm install redis或者npm install hiredis redis

  我这里采用npm install hiredis redis 安装

  注:两种都可用,区别在于性能,hiredis是非阻塞的,而且速度更快;如果安装了hiredis,node_redis则会默认以它为解析器,没安装就会用纯javascript解释器,对于学习或者开发环境,用哪个都无所谓

redis.createClient()连接到redis服务器

  环境都准备好了,就开始写一代简单的代码测试用nodejs连接一下服务器

var redis = require('redis'),    client = redis.createClient();client.on('ready',function(err){    console.log('ready');});
示例源码

  从上图中可以看到运行结果,输出ready,表示成功!  

  对代码还是讲一下:

  redis.createClient():返回的是一个RedisClient的对象,大家可以输出来看一下此对象的具体信息。

  ready:Redis的Connection事件之一,当与redis服务器连接成功后会触发这个事件,此时表示已经准备好接收命令,当这个事件触发之前client命令会存在队列中,当一切准备就绪后按顺序调用

  对于上面的几句代码就能连接成功redis服务器,原因是当前redis服务器在本地,如果不在本地,怎么连接呢?

var redis = require('redis'),    RDS_PORT = 6379,        //端口号    RDS_HOST = '127.0.1.1',    //服务器IP    RDS_OPTS = {},            //设置项    client = redis.createClient(RDS_PORT,RDS_HOST,RDS_OPTS);client.on('ready',function(res){    console.log('ready');    });
示例源码

  也是成功!这种方式和上一种在redis.createClient()时分别传入了端口号、服务器IP和设置项

  这样就可以用于连接远程的redis服务器,或者利用第三个参数进行一些配置!

  redis的默认端口:6379

认证 client.auth(password, callback)

  上面试过了,连接到redis服务器,可以看出我们并没有输入密码进行验证的过程就成功连接到了服务器,因为redis服务器默认不需要密码,不过这不太安全,我们肯定要设置一下密码

  打开redis.conf文件,找到requirepass,取消注释,设置密码为:porschev

requirepass porschev

  然后重启redis服务器;再次利用上面的代码连接到redis服务器,出现错误提示(如下图):ERR Operation not permitted

  那么如何连接到有密码的redis服务器呢?

  简单的试了一下,有两种方法(可能有更多,没试,其实一种完全就够了,多了也没用^_^!)

  方式一:通过设置redis.createClient()的第三个参数,也就是设置项来完成

var redis = require('redis'),    RDS_PORT = 6379,        //端口号    RDS_HOST = '127.0.1.1',    //服务器IP    RDS_PWD = 'porschev',    RDS_OPTS = {auth_pass:RDS_PWD},            //设置项    client = redis.createClient(RDS_PORT,RDS_HOST,RDS_OPTS);client.on('ready',function(res){    console.log('ready');    });
示例源码

  上图可以连接成功,通过设置连接设置项中的auth_pass来通过认证!

  auth_pass:默认值为null,默认情况下客户端将不通过auth命令连接,如果设置了此项,客户端将调用auth命令连接

  方式二:通过client.auth(password, callback)

var redis = require('redis'),    RDS_PORT = 6379,        //端口号    RDS_HOST = '127.0.1.1',    //服务器IP    RDS_PWD = 'porschev',    RDS_OPTS = {},            //设置项    client = redis.createClient(RDS_PORT,RDS_HOST,RDS_OPTS);client.auth(RDS_PWD,function(){    console.log('通过认证');});client.on('ready',function(res){    console.log('ready');    });
示例源码

  此方法也可以成功,第一个参数为密码,第二个为回调函数!

单值set和get

var redis = require('redis'),    RDS_PORT = 6379,        //端口号    RDS_HOST = '127.0.1.1',    //服务器IP    RDS_PWD = 'porschev',    //密码        RDS_OPTS = {},            //设置项    client = redis.createClient(RDS_PORT,RDS_HOST,RDS_OPTS);client.auth(RDS_PWD,function(){    console.log('通过认证');});client.on('connect',function(){    client.set('author', 'Wilson',redis.PRint);    client.get('author', redis.print);    console.log('connect');});client.on('ready',function(err){    console.log('ready');});
示例源码

  从输出结果可以看出,set一个值和获取这个值都成功!


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表