本文总结常见的使用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) // 补集: 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' ]
    });

nodejs操作redis总结的更多相关文章

  1. Nodejs操作redis

    //npm install redis //首先加载node_redis模块 var redis = require('redis'); // 创建redis连接 var client = redis ...

  2. NodeJS操作Redis实现消息的发布与订阅

    首先先说一下流程: 1.保存数据到Redis,然后将member值publish到 chat频道(publish.js功能) 2.readRedis.js文件此前一直在监听chat频道,readRed ...

  3. 架构设计之NodeJS操作消息队列RabbitMQ

    一. 什么是消息队列? 消息(Message)是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象. 消息队列(Message Queue)是一种应用间的通信 ...

  4. 在centos7中安装redis,并通过node.js操作redis

    引言 最近在学习node.js 连接redis的模块,所以尝试了一下在虚拟机中安装cent OS7,并安装redis,并使用node.js 操作redis.所以顺便做个笔记. 如有不对的地方,欢迎大家 ...

  5. [Intel Edison开发板] 04、Edison开发基于nodejs和redis的服务器搭建

    一.前言 intel-iot-examples-datastore 是Intel提供用于所有Edison开发板联网存储DEMO所需要的服务器工程.该工程是基于nodejs和redis写成的一个简单的工 ...

  6. Java Spring mvc 操作 Redis 及 Redis 集群

    本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5941953.html 关于 Redis 集群搭建可以参考我的另一篇文章 Redis集群搭建与简单使用 R ...

  7. Java中使用Jedis操作Redis(转载)

    整理 1.字符串 添加:set keyname value 查询:get keyname 拼接:append keyname value 删除:del keyname 添加多个: mset keyna ...

  8. (转)Java中使用Jedis操作Redis

    转自http://www.cnblogs.com/liuling/p/2014-4-19-04.html 使用Java操作Redis需要jedis-2.1.0.jar,下载地址:http://file ...

  9. Python—操作redis

    Python操作redis 连接方式:点击 1.String 操作 redis中的String在在内存中按照一个name对应一个value来存储 set() #在Redis中设置值,默认不存在则创建, ...

随机推荐

  1. C#高级编程笔记之第一章:.NET体系结构

    1.1 C#与.NET的关系 C#不能孤立地使用,必须与.NET Framework一起使用一起考虑. (1)C#的体系结构和方法论反映了.NET基础方法论. (2)多数情况下,C#的特定语言功能取决 ...

  2. 从一个微型例子看“C/C++的内存分配机制”和“数组变量名与指针变量名”(转)

    C++的内存有五大分区:堆区.栈区.自由存储区.全局/静态存储区.常量存储区. 五个数据段:数据段.代码段.BSS段.堆.栈 内存分配方式有三种: 从静态存储区域分配.内存在程序编译的时候就已经分配好 ...

  3. iOS xcode9 framework静态库的创建以及xib和图片的使用记录

    来到了新公司,要开发的第一个项目据说可能要封成framework,可是我从来没自己做过framework呀!顿时开始发愤图强,赶紧恶补了起来.但是还是遇到了一些乱七八糟的情况,所以写个随笔记下来. 1 ...

  4. python_重写数组

    class MyArray: '''All the elements in this array must be numbers''' def __IsNumber(self,n): if not i ...

  5. python_方法说明

    方法用来描述对象所具有的行为,例如,列表对象的追加元素.插入元素.删除原宿.排序,字符串对象的分隔.连接.排版.替换.烤箱的温度设置.烘烤,等等 在类中定义的方法可以粗略分为四大类:公有方法.私有方法 ...

  6. 并发库应用之五 & ReadWriteLock场景应用

    Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象.两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象. 读写锁:分为读 ...

  7. PAT1093: Count PAT's

    1093. Count PAT's (25) 时间限制 120 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CAO, Peng The strin ...

  8. mysql数据库的权限体系介绍

    一.权限体系简介: MySQL的权限体系在实现上比较简单,相关权限信息主要存储在mysql.User.mysql.db.mysql.Host.mysql_table_priv和mysql.column ...

  9. 关于内核转储(core dump)的设置方法

    原作者:http://blog.csdn.net/wj_j2ee/article/details/7161586 1. 内核转储作用 (1) 内核转储的最大好处是能够保存问题发生时的状态. (2) 只 ...

  10. SSM-MyBatis-10:Mybatis中SqlSession的getMapper()和简单的工具类MyBatisUtils

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- getMapper的作用,获取到接口,直接通过点的方式调用方法,以免直接手打的方式写错方法名,(强类型的方式) ...