node.js中 redis 的安装和基本操作示例
本文实例讲述了node.js中redis的安装和基本操作。分享给大家供大家参考,具体如下:
一、win下安装redis
https://github.com/MicrosoftArchive/redis/releases
下载Redis-x64-3.2.100.zip,然后解压,放到自定义目录。
然后打开命令行工具,进入到该目录下,运行安装redis服务。
redis-server.exe--service-installredis.windows-service.conf--loglevelverbose
然后就可以启动redis服务了
redis-server--service-start
二、redis可视化工具RedisDesktopManager
https://github.com/uglide/RedisDesktopManager/releases
现在已经不免费了,可以下载早期版本。
三、redis的数据类型
1、字符串,最基本的类型,一个key对应一个value。
//设置值 setnamexiaoxu //获取值 getname //获取子字符串,包含开始和结束索引的字符 getrangename0-1 getrangename13 //自增加1 setage1 incrage //指定增加的数量 incrbyage5 //递减1 decrage //指定递减的数量 decrbyage3 //删除指定的键 delage //判断键是否存在 existsname //设置过期时间,单位秒 expirename10 //查看剩余生存时间 ttlname //获取键的值类型 typename
2、哈希值,是一个键值对的集合,一个字符串类型的field和value的映射表,适合存储对象
//设置单个值 hsetpersonnamexiao //设置多个值 hmsetpersonage24height172 //获取单个值 hgetpersonname //获取多个值 hmgetpersonageheight //获取所有值 hgetallperson //删除键 hdelpersonname //获取所有的键 hkeysperson
3、列表,简单的字符串列表,按插入顺序排序。
//往列表左边插入 lpushlist1 lpushlist2 //往列表右边插入 rpushlist3 rpushlist4 //查看列表元素 lrangelist0-1 //弹出元素 lpoplist rpoplist //通过索引获取元素 lindexlist1 //获取列表的长度 llenlist //删除列表的元素 //lremkeycountvalue //count>0时,从表头开始搜索,删除与value相等的元素,数量为count //count<0时,从表尾开始搜索,删除与value相等的元素,数量为count绝对值 //count=0时,删除列表中所有与value相等的元素 lremlist11 lremlist-12
4、集合,是字符串类型的无序集合
//添加元素 saddlabel123 //查看集合 smemberslabel //获取集合个数 scardlabel //删除元素 sremlabel2 //交集 sadda123 saddb234 sinterab //差集 sdiffab //并集 sunionab
5、有序集合,跟集合一样也是字符串的集合,不过每个元素会关联一个double类型的分数,redis通过该分数给集合中的元素进行从小到大的排序。
//添加有序成员 zaddxiaoxu60math77english80chinaese //获取有序成员数量 zcardxiaoxu //查看有序集合 zrangexiaoxu0-1 //查看有序集合,显示分数 zrangexiaoxu0-1withscores //删除有序集合中的成员 zremxiaoxumath
四、node.js中使用redis
安装redis库
npminstallredis--save
操作redis的方法与我们在命令行中输入的命令基本一致
constredis=require('redis'); //创建一个redis客户端 letclient=redis.createClient(6379,'127.0.0.1'); //操作redis基本跟在命令行操作一致 client.set('name','xiaoxu',function(err,result){ if(err){ console.log(err); } console.log(result); }); client.hmset('person','name','xiaoxu','age','25',function(err,result){ if(err){ console.log(err); } console.log(result); }); client.hmget('person','name','age',function(err,result){ if(err){ console.log(err); } console.log(result); }); client.hkeys('person',function(err,result){ if(err){ console.log(err); } result.forEach(function(value){ client.hget('person',value,function(err,result){ console.log(value,result); }); }); //退出 client.quit(); });
通过bluebird来包装redis,让它支持async,await的方式,解决多层嵌套问题。
constredis=require('redis'); constbluebird=require('bluebird'); //通过bluebird包装 bluebird.promisifyAll(redis.RedisClient.prototype); bluebird.promisifyAll(redis.Multi.prototype); //创建一个redis客户端 letclient=redis.createClient(6379,'127.0.0.1'); (asyncfunction(){ //方法名后面都加上Async letresult=awaitclient.setAsync('name','hehe'); console.log(result); result=awaitclient.hmsetAsync('person','name','xiaoxu','age','25'); console.log(result); result=awaitclient.hkeysAsync('person'); console.log(result); result.forEach(asyncfunction(value){ letv=awaitclient.hgetAsync('person',value); console.log(value,v); }); client.quit(); })();
五、redis发布与订阅
redis发布订阅是一种消息通信模式,发送者发送消息,订阅者接收消息。
constredis=require('redis'); letclientA=redis.createClient(6379,'127.0.0.1'); letclientB=redis.createClient(6379,'127.0.0.1'); //客户端A订阅频道 clientA.subscribe('news'); clientA.subscribe('sports'); //客户端A监听消息 clientA.on('message',function(channel,message){ console.log('客户端A收到',channel,message); //客户端A在10秒后取消订阅 setTimeout(function(){ clientA.unsubscribe('news'); },10000); }); setInterval(function(){ clientB.publish('news','这是一条新闻'+newDate().toLocaleString()); clientB.publish('sports','这是一条体育'+newDate().toLocaleString()); },1000);
六、redis事务
redis事务可以一次性执行多个命令,multi命令之后,exec命令之前,命令都会放到队列中,直到执行exec,将会执行队列中的命令。
discard可以取消事务,放弃执行事务块内的所有命令。
constredis=require('redis'); letclient=redis.createClient(6379,'127.0.0.1'); client.multi() .hset('person','name','haohao') .hset('person','age','34') .exec(function(err,result){ if(err){ console.log(err); } console.log(result); client.quit(); });
注意redis中的事务跟mysql中的事务是有区别的。
希望本文所述对大家node.js程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。