Redis ioredis 使用记录

102 阅读4分钟

使用 Redis 很简单,一共分为三步:

1. 安装 Redis

macOS 安装 redis 很简单,按照官网安装说明,使用 Homebrew 安装即可:

brew install redis

Windows 安装略微复杂一点,因为我手边没有 Windows 电脑,就不提供安装方法了,教程很多。

2. 启动 Redis

运行以下命令,如果出现下图界面即表示运行成功:

redis-server

image.png

3. 项目引入 Redis

在项目里使用 redis 的时候,我们借助 ioredis 这个库,安装 ioredis:

npm install ioredis

接到 Redis 服务器。ioredis默认连接到本地的localhost:6379

const Redis = require('ioredis');
const redis = new Redis(); // 默认连接到 localhost:6379

// 连接到Redis
redis.on('connect', () => {
  console.log('Connected to Redis');
});

// 断开与Redis的连接
redis.disconnect().then(() => {
  console.log('Disconnected from Redis');
});

4. 字符串操作

//1、使用`set`方法设置键值对
redis.set('key', 'value');
//2、使用get方法获取键值对的值
redis.get('key', (err, result) => {
  if (err) throw err;
  console.log(result); // 输出: value
});
//3、使用`del`方法删除键值对
redis.del('key');
//4、使用`setex`方法设置键值对并设置过期时间(秒)
redis.setex('key', 10, 'value');
//5、使用`expire`方法设置键值对过期时间(秒)
redis.expire('key', 10);
//6、使用`ttl`方法获取键值对剩余的过期时间(秒)
redis.ttl('key');

5. 哈希操作

使用 ioredis 操作 Redis 中的哈希(Hash)数据结构时,你可以执行多种操作来管理这些复杂的数据结构。

//1、hset(key, field, value):为哈希表中的指定字段赋值。
redis.hset('myhash', 'field1', 'value1');

//2、hget(key, field):获取哈希表字段的值。
redis.hget('myhash', 'field1').then((value) => {
  console.log('Value:', value); // 输出 'value1'
});

//3、hmset(key, field1, value1, field2, value2, …):同时设置哈希表中的多个字段的值。
redis.hmset('myhash', 'field2', 'value2', 'field3', 'value3');

//4、hmget(key, field1, field2, …):同时获取哈希表中多个字段的值。
redis.hmget('myhash', 'field1', 'field2', 'field3').then((values) => {
  console.log(values); // 输出 ['value1', 'value2', 'value3']
});

//5、hlen(key):获取哈希表中字段的数量。
redis.hlen('myhash').then((result) => {
  console.log(result); // 输出字段数量
});

//6、hdel(key, field):删除哈希表中的一个或多个字段。
redis.hdel('myhash', 'field1').then((result) => {
  console.log(result); // 输出被删除的字段数量
});

// 7、hkeys(key):获取哈希表中所有字段名。
redis.hkeys('myhash').then((fields) => {
  console.log(fields); // 输出所有字段名
});


//8、hvals(key):获取哈希表中所有值。
redis.hvals('myhash').then((values) => {
  console.log(values); // 输出所有值
});

// 9、hgetall(key):获取哈希表中的所有字段和值。
redis.hgetall('myhash').then((hash) => {
  console.log(hash); // 输出所有字段和值
});

//10、hexists(key, field):检查哈希表中是否存在某个字段。
redis.hexists('myhash', 'field1').then((exists) => {
  console.log(exists); // 如果字段存在,输出 1,否则输出 0
});


eg: 在根目录下新建一个 lib文件夹,在 lib下新建一个名为 redis.js的文件,代码如下:

import Redis from "ioredis";
// 默认连接到 localhost:6379
const redis = new Redis();

const initialData = {
  1702459181837:
    '{"title":"sunt aut","content":"quia et suscipit suscipit recusandae","updateTime":"2023-12-13T09:19:48.837Z"}',
  1702459182837:
    '{"title":"qui est","content":"est rerum tempore vitae sequi sint","updateTime":"2023-12-13T09:19:48.837Z"}',
  1702459188837:
    '{"title":"ea molestias","content":"et iusto sed quo iure","updateTime":"2023-12-13T09:19:48.837Z"}',
};

export async function getAllNotes() {
  const data = await redis.hgetall("notes");
  if (Object.keys(data).length == 0) {
    await redis.hset("notes", initialData);
  }
  return await redis.hgetall("notes");
}

export async function addNote(data) {
  const uuid = Date.now().toString();
  await redis.hset("notes", [uuid], data);
  return uuid;
}

export async function updateNote(uuid, data) {
  await redis.hset("notes", [uuid], data);
}

export async function getNote(uuid) {
  return JSON.parse(await redis.hget("notes", uuid));
}

export async function delNote(uuid) {
  return redis.hdel("notes", uuid);
}

export default redis;

这块代码并不复杂,我们导出了 5 个函数,表示 5 个用于前后端交互的接口,分别是:

  1. 获取所有笔记的 getAllNotes,这里我们做了一个特殊处理,如果为空,就插入 3 条事先定义的笔记数据
  2. 添加笔记的 addNote
  3. 更新笔记的 updateNote
  4. 获取笔记的 updateNote
  5. 删除笔记的 delNote

其中我们使用了 ioredis 的 hash 结构(ioredis 提供了相关写法示例API 说明)。也就是说,我们在 redis 服务器中存储的数据大概长这样:

{
  "1702459181837": '{"title":"sunt aut","content":"quia et suscipit suscipit recusandae","updateTime":"2023-12-13T09:19:48.837Z"}',
  "1702459182837": '{"title":"qui est","content":"est rerum tempore vitae sequi sint","updateTime":"2023-12-13T09:19:48.837Z"}',
  "1702459188837": '{"title":"ea molestias","content":"et iusto sed quo iure","updateTime":"2023-12-13T09:19:48.837Z"}'
}

使用 macOS 的同学可以再下载一个 Medis,用于查看 Redis 中的数据(当然此时 Redis 还没有写入这些数据):

image.png

其中,key 值用的是创建笔记时的时间戳,value 值是具体的笔记数据,分为 3 个字段,分别是 titlecontentupdateTime