详解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极简入门教程(一):模块机制
Oct 25 NodeJs
基于html5和nodejs相结合实现websocket即使通讯
Nov 19 NodeJs
NodeJS创建基础应用并应用模板引擎
Apr 12 NodeJs
NodeJS的Promise的用法解析
May 05 NodeJs
简单实现nodejs上传功能
Jan 14 NodeJs
基于nodejs+express4.X实现文件下载的实例代码
Jul 13 NodeJs
使用Nodejs连接mongodb数据库的实现代码
Aug 21 NodeJs
nodejs操作mongodb的填删改查模块的制作及引入实例
Jan 02 NodeJs
使用npm安装最新版本nodejs
Jan 18 NodeJs
NodeJS使用Range请求实现下载功能的方法示例
Oct 12 NodeJs
nodejs 使用 js 模块的方法实例详解
Dec 04 NodeJs
nodejs的安装使用与npm的介绍
Sep 11 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
php Xdebug 调试扩展的安装与使用.
2010/03/13 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
2012/07/19 PHP
PHP中使用gettext解决国际化问题的例子(i18n)
2014/06/13 PHP
ThinkPHP采用实现三级循环代码实例
2014/07/18 PHP
两种php实现图片上传的方法
2016/01/22 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
js获取当前select 元素值的代码
2010/04/19 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
jqGrid jQuery 表格插件测试代码
2011/08/23 Javascript
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
laydate日历控件使用方法详解
2017/11/20 Javascript
解决Vue 浏览器后退无法触发beforeRouteLeave的问题
2017/12/24 Javascript
Angular 如何使用第三方库的方法
2018/04/18 Javascript
Vue2实时监听表单变化的示例讲解
2018/08/30 Javascript
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
小程序获取当前位置加搜索附近热门小区及商区的方法
2019/04/08 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
原生js通过一行代码实现简易轮播图
2019/06/05 Javascript
独立部署小程序基于nodejs的服务器过程详解
2019/06/24 NodeJs
vue实现配置全局访问路径头(axios)
2019/11/01 Javascript
[00:09]DOTA2新版本PA至宝特效动作展示
2014/11/19 DOTA
Python中的下划线详解
2015/06/24 Python
在Python的Django框架中创建语言文件
2015/07/27 Python
PyQt QCombobox设置行高的方法
2019/06/20 Python
python读写配置文件操作示例
2019/07/03 Python
Django如何将URL映射到视图
2019/07/29 Python
Python 面向对象之类class和对象基本用法示例
2020/02/02 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
2020/04/24 Python
道路交通安全实施方案
2014/03/12 职场文书
党员“四风”方面存在问题及整改措施
2014/09/24 职场文书
2016高中社会实践心得体会范文
2016/01/14 职场文书
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript