Skip to content
索引

在Koa中使用Redis

安装

Redis 的安装文件下载地址:github.com/tporadowski…

安装完成后,可以运行 redis-server.exe 启动 Redis 服务器。 (安装, 一直下一步即可)

数据操作

运行 redis-cli.exe,打开 Redis 的命令行客户端。

操作一:向 Redis 中存储一个字符串键值对

sh
set key1 hello   
set key1 hello   

操作二:从 Redis 中获取某个键值对值

sh
get key1          
get key1          

操作三:查看 Redis 中所有的键值对 key

sh
keys *          
keys *          

操作四:向 Redis 中设置一个数字并自增

sh
incr mynum        # mynum 为 1
incr mynum        # mynum 为 2

get mynum         # 查看 mynum 结果为 2
incr mynum        # mynum 为 1
incr mynum        # mynum 为 2

get mynum         # 查看 mynum 结果为 2

安装 Redis 驱动包

目前主流的 Node.js 的 Redis 驱动包有两个:node-redisioredis,这两个包都有性能非常高、使用方便的特点。而后者的性能更好、功能更强大

sh
npm i ioredis
npm i ioredis

在 koa 中使用 ioredis 连接 Redis 服务器,并发送数据操作命令

js
const Koa = require('koa')

const app = new Koa()

// 1. 引入 ioredis
const Redis = require('ioredis')

// 2. 创建 Redis 客户端实例, 连接指定的 Redis 服务器
const redis = new Redis({
  port: 6379, // redis服务器默认端口号
  host: '127.0.0.1' // redis服务器的IP地址
})

app.use(async ctx => {
  // 以后思路: 费时的查询, 不用每次都去查, 先看看 redis 中存了没?
  // 如果存了, 直接用缓存的数据, 如果没有存, 就去查询, 并将查询的结果存到 redis 中即可

  // redis.get(key) 查询 (异步)
  // redis.set(key, value) 设置 (异步)
  let result = await redis.get('arrList')

  if (!result) {
    // 没有缓存过, 需要读数据库, 并且将结果缓存起来
    console.log('经过了很久很久的查询')
    const arr = [
      { id: 1, name: 'zs', age: 18 },
      { id: 2, name: 'ls', age: 19 },
      { id: 3, name: 'ww', age: 20 },
      { id: 4, name: 'zl', age: 21 },
    ]
    result = arr
    console.log('缓存到redis中')
    await redis.set('arrList', JSON.stringify(arr))
  } else {
    console.log('直接读缓存')
    result = JSON.parse(result)
  }

  ctx.body = result
})

app.listen(3000, () => console.log('服务器启动成功... 当前端口 3000'))
const Koa = require('koa')

const app = new Koa()

// 1. 引入 ioredis
const Redis = require('ioredis')

// 2. 创建 Redis 客户端实例, 连接指定的 Redis 服务器
const redis = new Redis({
  port: 6379, // redis服务器默认端口号
  host: '127.0.0.1' // redis服务器的IP地址
})

app.use(async ctx => {
  // 以后思路: 费时的查询, 不用每次都去查, 先看看 redis 中存了没?
  // 如果存了, 直接用缓存的数据, 如果没有存, 就去查询, 并将查询的结果存到 redis 中即可

  // redis.get(key) 查询 (异步)
  // redis.set(key, value) 设置 (异步)
  let result = await redis.get('arrList')

  if (!result) {
    // 没有缓存过, 需要读数据库, 并且将结果缓存起来
    console.log('经过了很久很久的查询')
    const arr = [
      { id: 1, name: 'zs', age: 18 },
      { id: 2, name: 'ls', age: 19 },
      { id: 3, name: 'ww', age: 20 },
      { id: 4, name: 'zl', age: 21 },
    ]
    result = arr
    console.log('缓存到redis中')
    await redis.set('arrList', JSON.stringify(arr))
  } else {
    console.log('直接读缓存')
    result = JSON.parse(result)
  }

  ctx.body = result
})

app.listen(3000, () => console.log('服务器启动成功... 当前端口 3000'))

Released under the MIT License.