nodejs操作redis总结

40 篇文章 0 订阅
本文介绍了如何使用Node.js操作Redis服务,包括启动Redis、设置和获取String、Hash、List、Set、SortedSet等数据结构的操作,以及事务处理和订阅发布模式的使用。示例代码详细展示了各种操作方法。
摘要由CSDN通过智能技术生成


本文总结常见的使⽤node操作redis服务,redis的key是唯一的,如果一个key所对应的存储类型是string,则不能再次覆盖式设置key为hash;
1. 启动redis
1. 这里我们使用docker方式搭建redis服务器
 docker run -d --name redis -p 6379:6379 redis:2.8
2. 初始化
1. node操作redis需要引⼊redis包;
 const redis = require('redis');
 const client = redis.createClient( 6379, '127.0.0.1');
 const util = require('util');
3. string(字符串)
1. ⼀个字符串类型的值最⼤长度为512 M。
2. 常见操作: get,set,mget,mset,incr(计器++),decr(--)等等;
 client.set('hello', 5, function(err, obj) {
     client.incr('hello', function(err,data) {
         client.get('hello', function(err,data) {
             console.log(data);         // 6
         })
     })
 })
4. hash(哈希)
1. hash可⽤来存储对象,⼀个Redis 列表中最多可存储232-1(40亿)个元素
var obj = {
     name:'sss',
     age:223
 }
 client.hset("test", obj, function(err, obj) {
     client.hgetall('test', (err, obj) => {
         console.log(`hgetall:${JSON.stringify(obj)}`);
         console.log(obj.age);
     })
     client.hget('test','name', function(err, name) {
         console.log('hget test name');
         console.log(name);
     })
 });
5. lists(列表)
1. 对于lists,使⽤send_command进⾏操作;
2. 队列操作
3. list,常⽤操作, list,常⽤操作, lpush(⾸位添加),rpush(末位添加),lset(修改⾸位值),lindex(删除⾸位元素),lpop(删除末位元素)
4. ⼀个Redis 列表中最多可存储232-1(40亿)个元素
  client.send_command('lset',['mylist',0,1], function(err,data) {
      console.log(data);          // OK
  })
  client.send_command('lpush',['mylist', 'one'], function(err, data) {
      console.log(dada);          //OK 
  })
  // 使⽤命令⾏获取对应的索引下的结果
  // lindex mylist 0    'one'
  // lindex mylist 1   '1'
  // lindex mylist 2   'xxx'
  // lindex mylist 3   'xxx'
6. sets(集合)
1. sets 集合处理; 业务中⽤lodash进⾏交并补也是⼀个不错的选择。
2. 常见操作: sadd、smembers、sinter(交)、sunion(并)、sdiff(补)、smove
3. 集合中不允许重复成员的存在。当多次添加⼀个元素时,其结果会设置单个成员多次。⼀个Redis 集合中最多可包含232-1(40亿)个元
素。
 let db1 = ['mysql','redis'];
 let db2 = ['mongo','redis'];
 client.sadd('db1',db1, function(err,data) {
     client.smembers('db1', function(err,data) {
         console.log(toString.call(data));               // [object Array]
         console.log('smemers:' + data);                 // 获取set中的成员, ['redis,mysql]  
     })
     client.sadd('db2', db2, function(err, data) {
         client.sinter('db1','db2', function(err,data) {
             console.log('sinter:' + data)                    //交集: sinter:redis
         });
         client.sunion('db1','db2', function(err,data) {
             console.log('sunion:' + data)                    // 并集: sunion:mongo,mysql,redis
         });
         client.sdiff('db1','db2', function(err,data) {
             console.log('SDIFF:' + data)                     // 补console.log('SDIFF:' + data)                     // 补集: SDIFF:mysql
         })
     })
 });
7. 有序集合(SortedSets)
1. 常⽤操作: zadd(设置元素), zrange(获取范围内的元素),zrank(获取指定元素的排名,从0开始), zscore(获取指定元素的score,⽤户指定
的score)
 client.zadd(['zdb',0,'mysql', 1,'mongo',2,'redis'], function(err, data) {
     console.log(data);           // 3
 })
8. 事务
1. 事务(multi命令): 批量执⾏所有的命令,并统⼀返回结果
 client.multi()
     .set('xiao','xing')
     .get('xiao')
     .exec(function(err,replies) {
         console.log(replies);         // [ 'OK', 'xing' ]
     })
9. 订阅发布模式
1. redis的订阅发布模式可⽤来做类似kafka的消息推送;
2. 使⽤list + redis的订阅发布模式可以构建⼀个不错的消息队列;
 let sub = redis.createClient(6379, '127.0.0.1');   // 监听消费者
 let pub = redis.createClient(6379, '127.0.0.1');   // ⽣产者
 // 在sub开始监听时允许触发subscribe事件进⾏操作,类似连接数据库的connect事件
 sub.on('subscribe', function(channel, count) {
     console.log(`${channel}:${count}`);               //  test channel:1
     pub.publish('test channel', 'channel message test')
 })
 sub.on('message', function(channel, message) {
     console.log(`${channel}-message:${JSON.stringify(message)}`)    // test channel-message:"channel message test"
 })
 sub.subscribe('test channel');
10. 对整个redis的所有客户端操作进⾏监听;
1. monitor事件可以监听到redis收到的所有客户端命令
 client.monitor(function(err, res) {
     console.log(res);   // ok
 })
 client.on("monitor", function (time, args) {
     console.log(time + ": " + util.inspect(args));             // 1556285641.395573: [ 'lindex', 'myset', '2' ]
 });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值