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','age','25',result) {
    if (err) {
        console.log(err);
    }
    console.log(result);
});

client.hmget('person',result) {
    if (err) {
        console.log(err);
    }
    console.log(result);
});

client.hkeys('person',result) {
    if (err) {
        console.log(err);
    }
    result.forEach(function (value) {
        client.hget('person',value,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','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','haohao')
.hset('person','34')
.exec(function (err,result) {
    if (err) {
        console.log(err);
    }
    console.log(result);
    client.quit();
});

注意redis中的事务跟mysql中的事务是有区别的。

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于nodejs...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建”,内容详细,步骤清晰,细节处理妥当,希望这篇“nodejs怎么实现目录不存在自动创建”文章能帮助大...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内容详细,步骤清晰,细节处理妥当,希望这篇“nodejs如何实现定时删除文件”文章能帮助大家解决疑惑...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文...
本篇内容主要讲解“怎么安装Node.js的旧版本”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎...
这篇“node中的Express框架怎么安装使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家...
这篇文章主要介绍“nodejs如何实现搜索引擎”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“nodejs如何实现搜索引擎...
这篇文章主要介绍“nodejs中间层如何设置”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“nodejs中间层如何设置”文...
这篇文章主要介绍“nodejs多线程怎么实现”,在日常操作中,相信很多人在nodejs多线程怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
这篇文章主要讲解了“nodejs怎么分布式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“nodejs怎么分布式”...
本篇内容介绍了“nodejs字符串怎么转换为数组”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情...
这篇文章主要介绍了nodejs如何运行在php服务器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇nodejs如何运行在php服务器文章都...
本篇内容主要讲解“nodejs单线程如何处理事件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“nodejs单线程如何...
这篇文章主要介绍“nodejs怎么安装ws模块”,在日常操作中,相信很多人在nodejs怎么安装ws模块问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
本篇内容介绍了“怎么打包nodejs代码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!
本文小编为大家详细介绍“nodejs接收到的汉字乱码怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“nodejs接收到的汉字乱码怎么解决”文章能帮助大家解...
这篇“nodejs怎么同步删除文件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇...
今天小编给大家分享一下nodejs怎么设置淘宝镜像的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希