详解redis在nodejs中的应用


Posted in NodeJs onMay 02, 2018

redis是一个性能非常好的内存数据库,部署在应用程序和mysql数据中间做缓存数据库,可以极大的提升应用程序的性能,这里简单介绍nodejs客户端操作redis的demo程序

redis里面总共可以存储5种数据类型,分别是字符串,列表、集合、三列、有序集合;这里将会对这5种数据类型的增删查改一一处理;

1、redis在mac上的安装:

https://redis.io/download,当前我用的版本稳定版本是4.0.9,解压之后,进入redis-4.0.9目录,执行make && sudo make install,稍等几分钟就可以安装好;

2、redis启动:

命令行执行 redis-server即可启动,默认端口是6379;

3、安装nodejs客户端:

创建redis-node目录,在该目录下yarn init -y之后,执行命令:yarn add redis 即可安装nodejs的redis客户端,参考文档:https://github.com/NodeRedis/node_redis

4、在redis-node目录下,终端上执行node,即可在终端上响应式的执行nodejs代码,用做测试,下面开始demo程序

首先要创建客户端,并连接redis服务器,在执行以下连接客户端代码之前,请确保已经运行了redis服务器:终端商执行redis-server即可,默认端口6379;

const redis = require('redis');
const client = redis.createClient(); //默认连接localhost:6379,具体配置参数可以参考文档https://github.com/NodeRedis/node_redis

如果一切顺利,我们就已经创建好了连接redis服务器的客户端,后续操作都是在client对象上进行。

一、字符串类型

虽然说是字符串类型,但是可以存储的数据包括字符串、整数以及浮点数。

var res = client.set('name', 'abczhijia', (err, data) => {
 console.log('err: ', err, ' data: ', data);
}); // err: null data: OK,res的值是true

client.get('name', (err, data) => {
 console.log('err: ', err, ' data: ', data);
}); // err: null data: abczhijia

为了简单起见,我们定义一个回调函数,用于输出数据:

const cb = (err, data) => {
 console.log('err: ', err, ' data: ', data, ' data type: ', typeof data);
}

下面再针对整数做一个测试:

client.set('age', 20, cb); //err: null data: OK data type: string
client.get('age', cb); //err: null data: 20 data type: string

可以看出,虽然设置的是整数,输出来的时候,其实还是字符串,所以如果要进行计算,需要自己在回调函数里面做转换

二、列表数据类型

//从右侧推入
client.rpush('friends', 'mike', 'jhon', cb); //err: null data: 2 data type: number
client.lrange('friends', 0, -1, cb); //err: null data: [ 'mike', 'jhon' ] data type: object

//从左侧推入
client.lpush('friends', 'sam', 'bob', cb); //err: null data: 4 data type: number
client.lrange('friends', 0, -1, cb); // err: null data: [ 'bob', 'sam', 'mike', 'jhon' ] data type: object

//从右侧弹出
client.rpop('friends', cb); //err: null data: jhon data type: string
//从左侧弹出
client.lpop('friends', cb); //err: null data: bob data type: string
//打印看看发生了啥
client.lrange('friends', 0, -1, cb); // err: null data: [ 'sam', 'mike' ] data type: object

//查看索引位置的值
client.lindex('friends', 0, cb); // err: null data: sam data type: string

//对列表进行裁剪
client.rpush('friends', 'tom', 'bryant', cb)// err: null data: 4 data type: number
client.ltrim('friends', 1, 2, cb); //err: null data: OK data type: string
client.lrange('friends', 0, -1, cb); //err: null data: [ 'mike', 'tom' ] data type: object

这里注意,列表的操作可以从右边rpush推入一个或者多个数据,也可以从左边lpush推入一个或多个数据;另外,取值的时候,需要指明需要起止位置,如果要获取整个,可以把结束位置写成-1。

三、集合数据类型

//往集合ids中加几个元素
client.sadd('ids', 1, 2, cb); //err: null data: 2 data type: number
//查看集合元素
client.smembers('ids', cb); //err: null data: [ '1', '2' ] data type: object
//从集合中删除元素
client.srem('ids', 2, cb); // err: null data: 1 data type: number
//看看发生了啥
client.smembers('ids', cb); //err: null data: [ '1' ] data type: object
//看看集合有多少个元素
client.scard('ids', cb); //err: null data: 1 data type: number
//再加几个元素进去
client.sadd('ids', 3, 5, 8, 9); //
//判断元素是否在集合内
client.sismember('ids', 8, cb); // err: null data: 1 data type: number
client.sismember('ids', 80, cb); //err: null data: 0 data type: number

四、散列数据类型

//往散列上添加多组键值对
client.hmset('phone', 'price', 5888, 'name', 'iphonex', cb); //err: null data: OK data type: string
//查看多个键的值
client.hmget('phone', 'price', 'name', cb); //err: null data: [ '5888', 'iphonex' ] data type: object
//查看键值对的数量
client.hlen('phone', cb); //err: null data: 2 data type: number
//删掉其中一个键值对
client.hdel('phone', 'price', cb); //err: null data: 1 data type: number
//看看price是否还在?
client.hmget('phone', 'price', cb); //err: null data: [ null ] data type: object,原来只留下了null
//再加几个属性
client.hmset('phone', 'vendor', 'apple', 'madein', 'china', cb);
//取出所有的键值对
client.hgetall('phone', cb); //err: null data: { name: 'iphonex', vendor: 'apple', madein: 'china' } data type: object
//取出所有的键
client.hkeys('phone', cb); //err: null data: [ 'name', 'vendor', 'madein' ] data type: object
//取出所有的值
client.hvals('phone', cb); //err: null data: [ 'iphonex', 'apple', 'china' ] data type: object
//判断键是否存在
client.hexists('phone', 'name', cb); //err: null data: 1 data type: number
client.hexists('phone', 'price', cb); //err: null data: 0 data type: number

五、有序集合数据类型

有序集合会复杂一点,但是可以完成很好的应用程序效果,源码地址:https://github.com/abczhijia/redis-node

NodeJs 相关文章推荐
nodejs实用示例 缩址还原
Dec 28 NodeJs
nodejs中实现阻塞实例
Mar 24 NodeJs
nodejs简单实现操作arduino
Sep 25 NodeJs
NodeJS整合银联网关支付(DEMO)
Nov 09 NodeJs
nodejs redis 发布订阅机制封装实现方法及实例代码
Dec 15 NodeJs
mac下的nodejs环境安装的步骤
May 24 NodeJs
NodeJS使用七牛云存储上传文件的方法
Jul 24 NodeJs
详解nodejs通过代理(proxy)发送http请求(request)
Sep 22 NodeJs
详解nodeJs文件系统(fs)与流(stream)
Jan 24 NodeJs
nodejs之koa2请求示例(GET,POST)
Aug 07 NodeJs
NodeJs生成sitemap站点地图的方法示例
Jun 11 NodeJs
nodejs中使用archive压缩文件的实现代码
Nov 26 NodeJs
nodejs读取并去重excel文件
Apr 22 #NodeJs
nodeJS模块简单用法示例
Apr 21 #NodeJs
NodeJS安装图文教程
Apr 19 #NodeJs
关于Mac下安装nodejs、npm和cnpm的教程
Apr 11 #NodeJs
详解nodejs通过响应回写的方式渲染页面资源
Apr 07 #NodeJs
原生nodejs使用websocket代码分享
Apr 07 #NodeJs
nodejs多版本管理总结
Apr 03 #NodeJs
You might like
CI框架常用函数封装实例
2016/11/21 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
2017/02/04 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
jQuery1.6 使用方法二
2011/11/23 Javascript
jQuery 淡出一个图像到另一个图像的实现代码
2013/06/12 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
原生js结合html5制作简易的双色子游戏
2015/03/30 Javascript
javascript异步处理工作机制详解
2015/04/13 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
JS平滑无缝滚动效果的实现代码
2016/05/06 Javascript
浅谈JavaScript 浏览器对象
2016/06/03 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
2016/06/26 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
2017/05/26 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
2017/08/15 jQuery
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
Vue记住滚动条和实现下拉加载的完美方法
2020/07/31 Javascript
python实现将一个数组逆序输出的方法
2018/06/25 Python
python实现彩色图转换成灰度图
2019/01/15 Python
python读取ini配置文件过程示范
2019/12/23 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
Python基础之字符串常见操作经典实例详解
2020/02/26 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
澳大利亚领先的在线药房:Pharmacy Online(有中文站)
2020/02/22 全球购物
高职助产应届生自荐信
2013/09/24 职场文书
计算机应用专业学生的自我评价分享
2013/11/03 职场文书
大学生村官事迹材料
2014/01/21 职场文书
承诺书的格式范文
2014/03/28 职场文书
卫生系统先进事迹
2014/05/13 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
股东出资证明书范例
2014/10/04 职场文书
交警正风肃纪剖析材料
2014/10/29 职场文书
2019最新公司租房合同(例文)
2019/07/18 职场文书
4种非常实用的python内置数据结构
2021/04/28 Python
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS
在ubuntu下安装go开发环境的全过程
2022/08/05 Golang