Node.js 中操作 Redis

  之前写了个爬取 Github Trending 的服务 github-trending-api,因为网络原因,失败率比较高,最近在进行优化,会每个小时请求一次 Github,失败则重试5次,然后把成功的结果存到 Redis 中。记录下 Node.js 中操作 Redis 的一些方法。

一、安装 Redis

  我这里是通过 Docker 来安装 Redis 的,具体可参考:前端学习 Docker 之旅(五)—— 安装 Redis 并启动、连接

二、缓存类型

  主要分为三种:数据库、本地应用缓存(内存等)、远程缓存(Redis),这里不展开细讲。

三、缓存模式

四、Node.js 与 Redis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import { createClient } from 'redis';

(async () => {
const client = createClient({
url: 'redis://username:password@host:port/db-number'
});

client.on('error', (err) => console.log('Redis Client Error', err));

await client.connect();

await client.set('key', 'value');
const value = await client.get('key');
})();

  语法:

1
2
3
createClient({
url: 'redis://alice:foobared@awesome.redis.server:6380'
})

五、Redis value 类型

  Redis 的 key 是唯一的,如果 key 所对应的 value 是 string 类型,则不能再次覆盖修改为 hash 类型。点此查看其他方法

5.1、string

1
2
3
4
await redis.set('key', 'value')
const value = await redis.get('key')

await redis.setEx('key', 60, 'value') // 设置缓存,单位秒

  不建议赋值后再设置过期时间,这样不能保证原子性。

5.2、hash

1
2
3
4
5
6
const obj = { name: 'Tom' }
// await redis.hSet('key', obj, 'EX', 60)

const obj = await redis.hGetAll('key') // { name: 'Tom' }
const name = await redis.hGet('key', 'name') // 'Tom'
const value = await redis.hVals('key') // ['Tom']

  取出存入 Redis 的对象时,每个 key 的值会被转成 string。

5.3、lists

5.4、sets

5.4、事务

1
2
3
4
5
6
redis.multi()
.set('key', 'value')
.get('key')
.exec((error, replies) => {
console.log(replies) // ['OK', 'value']
})

参考资料

1、nodejs操作redis总结
2、node-redis
3、https://redis.js.org/
4、涉及代码:https://github.com/liuxy0551/github-trending-api

以上

随笔标题:Node.js 中操作 Redis

随笔作者:刘先玉

发布时间:2022年03月12日 - 22:25:55

最后更新:2022年03月12日 - 22:25:55

原文链接:https://liuxianyu.cn/article/node-redis.html