一、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 的安装和基本操作的更多相关文章

  1. 提升node.js中使用redis的性能

    问题初现 某基于node.js开发的业务系统向外提供了一个dubbo服务,提供向第三方缓存查询.设置多项业务数据并聚合操作结果.在QPS达到800时(两台虚拟机,每台机器4Core8G4node进程) ...

  2. node.js中使用Redis

    服务端: 启动Redis服务: redis-server 客户端: 1.安装Redis        npm install redis --save 2.redisTest.js文件 //引入red ...

  3. Node.js中的Session,不要觉得简单哦。

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博客地址为http://www.cnblogs.com/jasonnode/ .学习网站上有对应 ...

  4. Node.js 教程 01 - 简介、安装及配置

    系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...

  5. 在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查

    Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect),.它当前支持M ...

  6. Node.js 中MongoDB的基本接口操作

    Node.js 中MongoDB的基本接口操作 连接数据库 安装mongodb模块 导入mongodb模块 调用connect方法 文档的增删改查操作 插入文档 方法: db.collection(& ...

  7. Node.js 学习(一) 安装配置

    Windowv 上安装Node.js Windows 安装包(.msi) : 32 位安装包下载地址 : http://nodejs.org/dist/v0.10.26/node-v0.10.26-x ...

  8. [转]在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查

    本文转自:https://www.cnblogs.com/kongxianghai/p/5582661.html Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用Ja ...

  9. Node.js中流程控制

    Node.js中的流程控制可以使用async,在使用之前需要先安装,使用npm安装 npm install async --g 下面主要介绍4种流程控制的方式: 1.串行无关联:async.serie ...

随机推荐

  1. spring事务[转]

    https://www.cnblogs.com/cnmenglang/p/6410848.html 先了解事务的7种传播属性: PROPAGATION_REQUIRED -- 支持当前事务,如果当前没 ...

  2. [STM31F103]独立看门狗

    独立看门狗步骤: l 取消寄存器写保护: n IWDG_WriteAccessCmd(); l 设置独立看门狗的预分频系数,确定时钟: n IWDG_SetPrescaler(); l 设置看门狗重装 ...

  3. java+Selenium+TestNg搭建自动化测试架构(2)实现跨浏览器功能

    1.切换浏览器类:其中包含了切换浏览器的方法,以及关闭浏览器,设置等待时间,以及重写的断言方法 package com.rrx.framework; import java.io.IOExceptio ...

  4. Java单例模式之懒汉模式线程安全

    单例模式是设计模式中用得比较多的一种设计模式,它的主要优点有: 1.访问受控,保证访问的是唯一的实例. 2.由于只有一个实例,所以节省资源. 缺点: 灵活性低,如果对象的应用场景多变,则不适用单例模式 ...

  5. java内存问题排查及分析

    最近了解了一下jdk对于jvm分析工具的使用,下面通过一个简单的列子介绍一下,以下内容部分来自其他帖子. 下面这段代码明显有问题(从网上抄的) import java.util.HashMap; im ...

  6. maltab-图像拼接(左右两幅图)

    图像拼接 参考自 https://blog.csdn.net/m0_37565736/article/details/79865990 并修改了其中错误的地方,添加自己的讲解或者看法. 我要拼接的是一 ...

  7. gflags 学习

    一.下载 https://github.com/gflags/gflags 二.可以将gflags编译成lib 三.在需要的工程的workspace下面引入编译好的gflags动态库,在库里面写好BU ...

  8. React State(状态)

    function FormattedDate(props){ return ( <h1>现在是{props.date}</h1> ) } class Clock extends ...

  9. HTTP和HTTPS协议,看一篇就够了

    https://blog.csdn.net/xiaoming100001/article/details/81109617 因为http请求是无状态的,所以需要三次握手.四次挥手来确定状态. 大纲 这 ...

  10. 云栖大会day2总结 上午

    第二天上午主要是参与了开发者专场 上 09:00-09:40 线上线下融合时代的工程师成长 李佩 饿了么高级算法总监 09:40-10:20 如何统一阿里巴巴代码规范:探寻工程师文化之路 玄坛 阿里巴 ...