zoukankan      html  css  js  c++  java
  • 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 的任务队列中而已。

  • 相关阅读:
    vue的学习总结---事件处理
    记一次写入导出优化,分别基于poi的SXSSF和阿里的EasyExcel
    linux系统tomcat部署SpringBoot+vue前后端分离项目正式部署
    java中各jar的作用
    记一次SpringBoot集成WebService使用Postman进行的测试
    搭建VUE
    查看window进程,并杀死进程
    卸载 nginx 彻底删除
    ubuntu16.04 安装 nginx 服务器
    Linux ubuntu ... root 初始化密码设置
  • 原文地址:https://www.cnblogs.com/lianer/p/6379915.html
Copyright © 2011-2022 走看看