详解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、Python写的一个简易HTTP静态文件服务器
Jul 18 NodeJs
nodejs教程之异步I/O
Nov 21 NodeJs
深入浅析NodeJs并发异步的回调处理
Dec 21 NodeJs
nodejs个人博客开发第六步 数据分页
Apr 12 NodeJs
详解nodejs异步I/O和事件循环
Jun 07 NodeJs
NodeJS自定义模块写法(详解)
Jun 27 NodeJs
nodejs模块学习之connect解析
Jul 05 NodeJs
让nodeJS支持ES6的词法----babel的安装和使用方法
Jul 31 NodeJs
NodeJs之word文件生成与解析的实现代码
Apr 01 NodeJs
Nodejs异步流程框架async的方法
Jun 07 NodeJs
Nodejs实现图片上传、压缩预览、定时删除功能
Oct 25 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
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
php验证码生成代码
2015/11/11 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
2017/03/16 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
javascript 二进制运算技巧解析
2012/11/27 Javascript
js中数组排序sort方法的原理分析
2014/11/20 Javascript
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
2015/05/12 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
Nodejs中session的简单使用及通过session实现身份验证的方法
2016/02/04 NodeJs
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
浅谈JavaScript中变量和函数声明的提升
2016/08/09 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
Vue.js 中的 $watch使用方法
2017/05/25 Javascript
js实现图片轮播效果学习笔记
2017/07/26 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
2018/01/30 Javascript
在Python下尝试多线程编程
2015/04/28 Python
Python编程之字符串模板(Template)用法实例分析
2017/07/22 Python
python中闭包Closure函数作为返回值的方法示例
2017/12/17 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
python flask解析json数据不完整的解决方法
2019/05/26 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
在脚本中单独使用django的ORM模型详解
2020/04/01 Python
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
舞会礼服和舞会鞋:PromGirl
2019/04/22 全球购物
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
大学军训感言400字
2014/03/11 职场文书
公司承诺书怎么写
2014/05/24 职场文书
优秀党员自我评价范文
2014/09/15 职场文书
领导班子作风建设剖析材料
2014/10/11 职场文书
司考复习计划
2015/01/19 职场文书
贫困证明怎么写
2015/06/16 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
pytorch fine-tune 预训练的模型操作
2021/06/03 Python
Python办公自动化解决world文件批量转换
2021/09/15 Python