本文实例讲述了node.js中 redis 的安装和基本操作。分享给大家供大家参考,具体如下:
一、win下安装redis
https://github.com/MicrosoftArchive/redis/releases
下载Redis-x64-3.2.100.zip,然后解压,放到自定义目录。
然后打开命令行工具,进入到该目录下,运行安装redis服务。
redis-server.exe --service-install redis.windows-service.conf --loglevel verbose
然后就可以启动redis服务了
redis-server --service-start
二、redis可视化工具RedisDesktopManager
https://github.com/uglide/RedisDesktopManager/releases
现在已经不免费了,可以下载早期版本。
三、redis的数据类型
1、字符串,最基本的类型,一个key对应一个value。
//设置值 set name xiaoxu //获取值 get name //获取子字符串,包含开始和结束索引的字符 getrange name 0 -1 getrange name 1 3 //自增加1 set age 1 incr age //指定增加的数量 incrby age 5 //递减1 decr age //指定递减的数量 decrby age 3 //删除指定的键 del age //判断键是否存在 exists name //设置过期时间,单位秒 expire name 10 //查看剩余生存时间 ttl name //获取键的值类型 type name
2、哈希值,是一个键值对的集合,一个字符串类型的field和value的映射表,适合存储对象
//设置单个值 hset person name xiao //设置多个值 hmset person age 24 height 172 //获取单个值 hget person name //获取多个值 hmget person age height //获取所有值 hgetall person //删除键 hdel person name //获取所有的键 hkeys person
3、列表,简单的字符串列表,按插入顺序排序。
//往列表左边插入 lpush list 1 lpush list 2 //往列表右边插入 rpush list 3 rpush list 4 //查看列表元素 lrange list 0 -1 //弹出元素 lpop list rpop list //通过索引获取元素 lindex list 1 //获取列表的长度 llen list //删除列表的元素 //lrem key count value // count > 0时,从表头开始搜索,删除与value相等的元素,数量为count // count < 0时,从表尾开始搜索,删除与value相等的元素,数量为count绝对值 // count = 0时,删除列表中所有与value相等的元素 lrem list 1 1 lrem list -1 2
4、集合,是字符串类型的无序集合
//添加元素 sadd label 1 2 3 //查看集合 smembers label //获取集合个数 scard label //删除元素 srem label 2 //交集 sadd a 1 2 3 sadd b 2 3 4 sinter a b //差集 sdiff a b //并集 sunion a b
5、有序集合,跟集合一样也是字符串的集合,不过每个元素会关联一个double类型的分数,redis通过该分数给集合中的元素进行从小到大的排序。
//添加有序成员 zadd xiaoxu 60 math 77 english 80 chinaese //获取有序成员数量 zcard xiaoxu //查看有序集合 zrange xiaoxu 0 -1 //查看有序集合,显示分数 zrange xiaoxu 0 -1 withscores //删除有序集合中的成员 zrem xiaoxu math
四、node.js中使用redis
安装redis库
npm install redis --save
操作redis的方法与我们在命令行中输入的命令基本一致
const redis = require('redis'); //创建一个redis客户端 let client = 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的方式,解决多层嵌套问题。
const redis = require('redis'); const bluebird = require('bluebird'); //通过bluebird包装 bluebird.promisifyAll(redis.RedisClient.prototype); bluebird.promisifyAll(redis.Multi.prototype); //创建一个redis客户端 let client = redis.createClient(6379, '127.0.0.1'); (async function () { //方法名后面都加上Async let result = await client.setAsync('name', 'hehe'); console.log(result); result = await client.hmsetAsync('person', 'name', 'xiaoxu', 'age', '25'); console.log(result); result = await client.hkeysAsync('person'); console.log(result); result.forEach(async function (value) { let v = await client.hgetAsync('person', value); console.log(value, v); }); client.quit(); })();
五、redis发布与订阅
redis发布订阅是一种消息通信模式,发送者发送消息,订阅者接收消息。
const redis = require('redis'); let clientA = redis.createClient(6379, '127.0.0.1'); let clientB = 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', '这是一条新闻' + new Date().toLocaleString()); clientB.publish('sports', '这是一条体育' + new Date().toLocaleString()); }, 1000);
六、redis事务
redis事务可以一次性执行多个命令,multi 命令之后,exec命令之前,命令都会放到队列中,直到执行exec,将会执行队列中的命令。
discard可以取消事务,放弃执行事务块内的所有命令。
const redis = require('redis'); let client = 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程序设计有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]