Node Redis 小试
Redis 是一个高性能的 key-value 数据库,为了保证效率,数据都是缓存在内存中,在执行频繁而又复杂的数据库查询条件时,可以使用 Redis 缓存一份查询结果,以提升应用性能。
背景
如果一个 Node 应用有多台服务器或多个进程在跑,每个进程都拥有自己的内存空间,各个进程之间的数据共享就显得非常重要。
使用数据库是一个解决数据共享的方案,但一些临时性、高并发的数据并不太适合直接写入数据库,比如 session。
引入 Redis 可以解决数据共享的问题,也因为 Redis 是基于内存存储的特点,有着非常高的性能,可以大大降低数据库读写的压力,提升应用的整体性能。
Redis 还可以用来:缓存复杂的数据库查询结果,做自增长统计,暂存用户操作状态等功能。
安装 Redis 客户端
在开始使用 redis 之前,首先需要安装 Redis 客户端
以 MAC OS 为例,通过 brew 安装 Redis
brew install redis
启动 Redis
redis-server
安装 ioredis NPM 模块
安装 ioredis
npm install ioredis

小试
var Redis = require('ioredis')
var redis = new Redis()
redis.set('test-redis-expire', 1)
// 设置过期时间 3s
redis.expire('test-redis-expire', 3)
redis.get('test-redis-expire', (err, value) => {
console.log(value)
})
setTimeout(() => {
redis.get('test-redis-expire', (err, value) => {
console.log(value)
})
}, 5000)
结果:
1
null
刚开始使用 redis 的时候很困惑,为什么 JAVA 调用 Redis 的语法看起来是同步的,到了 Node 就成了异步的呢,会不会存在什么逻辑问题?
事实上,Node 调用 Redis 确实是异步的,只不过因为 Redis 是单线程的特点,任何操作都是原子操作。
在小试的代码中,redis.set redis.get 都只是向 Redis 发送了一个通知,添加到了 Redis 的任务队列中而已。
Node Redis 小试的更多相关文章
- [Node.js] Node + Redis 实现分布式Session方案
原文地址: http://www.moye.me/?p=565 Session是什么? Session 是面向连接的状态信息,是对 Http 无状态协议的补充. Session 怎么工作? Sessi ...
- Node + Redis 实现分布式Session方案(转载)
Session是什么? Session 是面向连接的状态信息,是对 Http 无状态协议的补充. Session 怎么工作? Session 数据保留在服务端,而为了标识具体 Session 信息指向 ...
- Node Redis 入门
基础准备:Node.Js .npm或cnpm.redis安装 1.建立一个项目文件夹,这里命名 wxfc ,打开命令行输入 npm install redis . 因为没有创建package.json ...
- k8s-prometheus 数据采集(node redis kubelet等)
apiVersion: v1 kind: ConfigMap metadata: name: prometheus-config namespace: kube-ops data: prometheu ...
- 提升node.js中使用redis的性能
问题初现 某基于node.js开发的业务系统向外提供了一个dubbo服务,提供向第三方缓存查询.设置多项业务数据并聚合操作结果.在QPS达到800时(两台虚拟机,每台机器4Core8G4node进程) ...
- redis node 常用命令
命令窗口 flushall //清空全库 keys * //查看所有 HMSET user1 name liujinyu age 25 //哈希 添加多个值 HSET user1 sex man // ...
- redis该如何分区-译文(原创)
写在最前,最近一直在研究redis的使用,包括redis应用场景.性能优化.可行性.这是看到redis官网中一个链接,主要是讲解redis数据分区的,既然是官方推荐的,那我就翻译一下,与大家共享. P ...
- Redis(7)Creating and Using Cluster Mode
1. DocumentsCluster will not support SELECT, it only contains database 0.All the nodes use TCP bus a ...
- Node.js目录
[相关学习] npm入门教程 [基础] (1) 初识Node.js (2) 开发环境和调试工具 (3) commonJs 规范 (4) node 概念(global.process进程.调试) (5) ...
随机推荐
- Spring EL hello world实例
Spring EL与OGNL和JSF EL相似,计算评估或在bean创建时执行.此外,所有的Spring表达式都可以通过XML或注解. 在本教程中,我们将学习如何使用Spring表达式语言(SpEL) ...
- 字符串型MySQL查询条件需要注意的一点
最近在工作中遇到了数据库服务器产生很多读写队列的问题,于是要求大家开始优化我们的SQL语句. 下面是查询quotedata_history表中的code字段的SQL语句,其中code字段的类型是var ...
- OpenCV亚像素级的角点检测
亚像素级的角点检测 目标 在本教程中我们将涉及以下内容: 使用OpenCV函数 cornerSubPix 寻找更精确的角点位置 (不是整数类型的位置,而是更精确的浮点类型位置). 理论 代码 这个教程 ...
- Axure Beta 7.0 汉化版下载
Axure的最新版本下载地址如下 安装文件地址: PC版下载地址:点我下载 Mac版下载地址:点我下载 下载后下载汉化包即可进行汉化(含中文部件库) 汉化文件:点我下载 -------------- ...
- 如何更改postgresql的最大连接数
改文件 postgresql.conf 里的 #max_connections=32 为 max_connections=1024 以及另外相应修改 share_buffer 参数.
- 操作系统概念学习笔记三 cpu调度算法
一 基本概念 1 队列中的记录通常是进程的进程控制块. 2 CPU调度决策可在如下四种环境下发生 a 当一个进程从运行状态切换到等待状态 例如,I/O请求或调用wait以等待一个子进程的终止 b 党一 ...
- linux shell scripts:Syntax error: Bad for loop variable
执行脚本报错 #!/bin/bash s=0 for (( i=1; i<=100; i++ )) do s=$(( $s + $i )) done echo $s sh add.sh 报错: ...
- Android -- 重写BaseAdapter以及对ListView的优化
背景 对于ListView.GridView.Gallery.Spinner等等,它是它们的适配器,直接继承自接口类Adapter的,使用BaseAdapter时需要重写很多方法,其中最重要的当属ge ...
- Android -- ContentProvider与联系人
数据库 读联系人 raw ...
- [Javascript Crocks] Compose Functions for Reusability with the Maybe Type
We can dot-chain our way to great success with an instance of Maybe, but there are probably cases wh ...