nodejs操作redis总结
本文总结常见的使用node操作redis服务,redis的key是唯一的,如果一个key所对应的存储类型是string,则不能再次覆盖式设置key为hash;
1. 启动redis
这里我们使用docker方式搭建redis服务器
docker run -d --name redis -p 6379:6379 redis:2.8
2. 初始化
node操作redis需要引入redis包;
const redis = require('redis');
const client = redis.createClient( 6379, '127.0.0.1');
const util = require('util');
3. string(字符串)
一个字符串类型的值最大长度为512 M。
常见操作: 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(哈希)
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(列表)
对于lists,使用send_command进行操作;
队列操作
list,常用操作, list,常用操作, lpush(首位添加),rpush(末位添加),lset(修改首位值),lindex(删除首位元素),lpop(删除末位元素)
一个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(集合)
sets 集合处理; 业务中用lodash进行交并补也是一个不错的选择。
常见操作: sadd、smembers、sinter(交)、sunion(并)、sdiff(补)、smove
集合中不允许重复成员的存在。当多次添加一个元素时,其结果会设置单个成员多次。一个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)
常用操作: zadd(设置元素), zrange(获取范围内的元素),zrank(获取指定元素的排名,从0开始), zscore(获取指定元素的score,用户指定的score)
client.zadd(['zdb',0,'mysql', 1,'mongo',2,'redis'], function(err, data) {
console.log(data); // 3
})
8. 事务
事务(multi命令): 批量执行所有的命令,并统一返回结果
client.multi()
.set('xiao','xing')
.get('xiao')
.exec(function(err,replies) {
console.log(replies); // [ 'OK', 'xing' ]
})
9. 订阅发布模式
redis的订阅发布模式可用来做类似kafka的消息推送;
使用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的所有客户端操作进行监听;
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总结的更多相关文章
- Nodejs操作redis
//npm install redis //首先加载node_redis模块 var redis = require('redis'); // 创建redis连接 var client = redis ...
- NodeJS操作Redis实现消息的发布与订阅
首先先说一下流程: 1.保存数据到Redis,然后将member值publish到 chat频道(publish.js功能) 2.readRedis.js文件此前一直在监听chat频道,readRed ...
- 架构设计之NodeJS操作消息队列RabbitMQ
一. 什么是消息队列? 消息(Message)是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象. 消息队列(Message Queue)是一种应用间的通信 ...
- 在centos7中安装redis,并通过node.js操作redis
引言 最近在学习node.js 连接redis的模块,所以尝试了一下在虚拟机中安装cent OS7,并安装redis,并使用node.js 操作redis.所以顺便做个笔记. 如有不对的地方,欢迎大家 ...
- [Intel Edison开发板] 04、Edison开发基于nodejs和redis的服务器搭建
一.前言 intel-iot-examples-datastore 是Intel提供用于所有Edison开发板联网存储DEMO所需要的服务器工程.该工程是基于nodejs和redis写成的一个简单的工 ...
- Java Spring mvc 操作 Redis 及 Redis 集群
本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5941953.html 关于 Redis 集群搭建可以参考我的另一篇文章 Redis集群搭建与简单使用 R ...
- Java中使用Jedis操作Redis(转载)
整理 1.字符串 添加:set keyname value 查询:get keyname 拼接:append keyname value 删除:del keyname 添加多个: mset keyna ...
- (转)Java中使用Jedis操作Redis
转自http://www.cnblogs.com/liuling/p/2014-4-19-04.html 使用Java操作Redis需要jedis-2.1.0.jar,下载地址:http://file ...
- Python—操作redis
Python操作redis 连接方式:点击 1.String 操作 redis中的String在在内存中按照一个name对应一个value来存储 set() #在Redis中设置值,默认不存在则创建, ...
随机推荐
- NewLife.Net——构建可靠的网络服务
网络程序应该注册成为系统服务,以保证其自启动以及稳定可靠运行! 这一场,讲讲怎么建立一个生产级别的网络服务. 老规矩,先上源码:https://github.com/nnhy/NewLife.Net. ...
- Unity3d Mecanim动画系统Animator学习笔记
1. unity3d Mecanim学习 Unity3d新版动画系统网上的介绍很多,但多是流水笔记,外人很难看明白,后来我 终于找到介绍的比较明白的两个作者,特别感谢.一个是58开发网的乐天老师,课 ...
- 3D Lut 电影级调色算法 附完整C代码
在前面的文章,我提到过VSCO Cam 的胶片滤镜算法实现是3d lut. 那么3d lut 到底是个什么东西呢? 或者说它是用来做什么的? 长话短说,3d lut(全称 : 3D Lookup t ...
- python!!!!惊了,这世上居然还有这么神奇的东西存在
第一次接触到python的时候实在看学习3Blue1Brown的视频线性代数的本质的时候.惊奇的是里面的视频操作,例如向量的变化,线性变换等都是由python用代码打出来的.那时的我只是以为pytho ...
- 单片机开发——02工欲善其事必先利其器(Proteus软件安装破解)
在单片机开发工程中,博主经常通过模拟软件Proteus进行模拟仿真,将编译生成的"HEX"文件下载在单片机芯片中,然后进行后期的debug工作,当模拟仿真完成之后,进行硬件测试部分 ...
- 5月2日——iOS11定位失效问题
所存在的问题: (1)定位不能正常使用 (2)首次安装APP 时 "是否允许使用定位信息" 系统提示框不显示 iOS定位失效原因: 因为苹果现在增加了一项新的隐私保护功能 NSL ...
- PAT1052:Linked List Sorting
1052. Linked List Sorting (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A ...
- 项目在tomcat里运行一段时间总是自动崩掉的问题排查与解决
最近的检验系统上线一段时间后,发现系统访问不了,tomcat总是会自动崩掉,一般遇到这种问题,程序员的第一反应都肯定是内存溢出. 确实是,但是java里内存分好几种,堆内存.栈内存.静态内存区等等,下 ...
- 【手记】小心在where中使用NEWID()的大坑
这个表达式: --把GUID弄成正整数,然后取模 是随机返回0.1.2这三个数,不可能返回其它东西,但是如果把它用在where里面,就会发生很神奇的事情,比如这个查询: --创建一个只有1列3行的表, ...
- html5中viewport与meta详解
网上解释手机浏览器是把页面放在一个虚拟的"窗口"(viewport)中,通常这个虚拟的"窗口"(viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中 ...