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中对 redis 的安装和基本操作的更多相关文章
- 提升node.js中使用redis的性能
问题初现 某基于node.js开发的业务系统向外提供了一个dubbo服务,提供向第三方缓存查询.设置多项业务数据并聚合操作结果.在QPS达到800时(两台虚拟机,每台机器4Core8G4node进程) ...
- node.js中使用Redis
服务端: 启动Redis服务: redis-server 客户端: 1.安装Redis npm install redis --save 2.redisTest.js文件 //引入red ...
- Node.js中的Session,不要觉得简单哦。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博客地址为http://www.cnblogs.com/jasonnode/ .学习网站上有对应 ...
- Node.js 教程 01 - 简介、安装及配置
系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...
- 在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查
Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect),.它当前支持M ...
- Node.js 中MongoDB的基本接口操作
Node.js 中MongoDB的基本接口操作 连接数据库 安装mongodb模块 导入mongodb模块 调用connect方法 文档的增删改查操作 插入文档 方法: db.collection(& ...
- Node.js 学习(一) 安装配置
Windowv 上安装Node.js Windows 安装包(.msi) : 32 位安装包下载地址 : http://nodejs.org/dist/v0.10.26/node-v0.10.26-x ...
- [转]在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查
本文转自:https://www.cnblogs.com/kongxianghai/p/5582661.html Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用Ja ...
- Node.js中流程控制
Node.js中的流程控制可以使用async,在使用之前需要先安装,使用npm安装 npm install async --g 下面主要介绍4种流程控制的方式: 1.串行无关联:async.serie ...
随机推荐
- n2n网络穿透内网
目录 前言 配置 网络拓扑: 公网服务器的配置 公司电脑的配置 家里笔记本的配置 注意事项 使用n2n网络 n2n的各edge之间传输数据 补充:NAT类型 后记 前言 在家里的时候比较经常需要对公司 ...
- Python数据类型的内置函数之list(列表)
Python数据类型内置函数 - str(字符串) - list(列表) - tuple(元组) - dict(字典) - set(收集) list(列表)的操作 - (append)在列表最后追加指 ...
- @Override is not allowed when implementing interface method
使用idea导入maven项目时 会出现如下报错 @Override从jdk1.5开始出现的,是用来标注方法重写:通常方法重写发生在继承父类,重写父类方法,或者实现接口,实现接口方法: @Overri ...
- leetcode每日刷题计划-简单篇day12
Num 125 验证回文串 Valid Palindrome 非常有收货的一道题嘻嘻嘻,本来是考试期间划水挑的题,坑点有点多 第一个是注意对temp1和temp2中途更新的判断 第二个是字符串频繁的作 ...
- 【学习】数据的加载、存储与文件格式【pandas】
输入输出通常可以划分为几个大类:读取文本文件和其他更高效的磁盘存储格式,加载数据库中的数据,利用web API操作网络资源 1.读写文本格式的数据 pandas提供了一些用于将表格型数据读取为Data ...
- Excel组合图表快速制作小功能
1. 选中数据区域,插入推荐的图表 2. 然后可以选择快速布局小工具进行布局微调 选中图表 -> 设计(菜单) -> 快速布局(左边) 个人特别喜欢带表格的那个组合图布局,清晰好看
- 常见java日志系统的搭配详解:关于slf4j log4j log4j2 logback jul jcl commons-logging jdk-logging
先看一张图: 是不是有点晕, 晕就对了.这个仅仅是 slf4j 的情况,实际上, 我们不仅要接触到 slf4j ,有时候还会接触其他的日志系统.且看下文分解. 1 直接使用各个日志系统 1.1 直接使 ...
- python远程执行dos命令
https://blog.csdn.net/huaihuaidexiao/article/details/5543240 https://blog.csdn.net/bcbobo21cn/articl ...
- app常见性能测试点
转载自 https://blog.csdn.net/xiaomaoxiao336368/article/details/83547318 1.响应 冷启动 首次启动APP的时间间隔 adb shell ...
- mysql查询正在执行的sql
mysql> SHOW VARIABLES LIKE "general_log%"; +------------------+------------------------ ...