使用NestJS获取基于模式的多个Redis缓存密钥

djmepvbi  于 2022-10-31  发布在  Redis
关注(0)|答案(2)|浏览(249)

目前我已经创建了一个带有Redis缓存的NestJS应用程序。我希望能够从Redis缓存中获取多个键,方法是使用一种模式,在这种模式下,我可以获取包含某个字符串的所有键。
目前我使用 cache-managercache-manager-redis-store 作为我的客户端来连接和访问我的Redis缓存。我已经阅读了文档来尝试使用.mget()函数,但是我不知道我是否可以通过某种方式传递一个字符串,并获得包含该字符串的所有键。
我想我可能不得不去一个不同的Redis客户端,但只是想看看是否有人有任何其他的想法。

huwehgph

huwehgph1#

有两种方法可以实现这一点
1.保留一组你想检索的密钥并执行SMEMBERS操作。2但是,你必须手动维护这组密钥并添加和删除。

  1. Redisearch允许您围绕数据创建二级索引,以便进行全文搜索等
yws3nbqq

yws3nbqq2#

cache-manager中有一个名为store的属性,可以通过调用keys()方法从该属性中获取所有密钥。
这是一个redisService示例

import { Injectable, Inject, CACHE_MANAGER } from '@nestjs/common';
import { Cache } from 'cache-manager';

@Injectable()
export class RedisCacheService {
    constructor(@Inject(CACHE_MANAGER) private readonly cache: Cache) {}

    async getKeys(key: string): Promise<any> {
        return await this.cache.store.keys(key);
    }

    async getValue(key: string): Promise<string> {
        return await this.cache.get(key);
    }

    async save(key: string, value: any, ttl: number): Promise<any> {
        return await this.cache.set(key, value, {
            ttl: ttl,
        });
    }

    async delete(key: string): Promise<void> {
        return await this.cache.del(key);
    }

    async getMultipleKeydata(key: string): Promise<any> {
        const redisKeys = await this.getKeys(key);
        const data: { [key: string]: any } = {};
        for (const key of redisKeys) {
            data[key] = await this.getValue(key);
        }
        return allData;
    }
}

然后,您可以使用此服务获取多个键或多个键的值
await this.redisService.getKeys('*' + email + '*');
也可以获取多个键值
await this.redisService.getMultipleKeydata('*' + email + '*');

相关问题