Jerko Steiner 41705177c5 Add redis store
Tested locally with docker-compose and two instances of peer-calls
running on different ports.
2020-03-13 21:41:03 +01:00

55 lines
1.3 KiB
TypeScript

import Redis from 'ioredis'
import { Store } from './store'
import _debug from 'debug'
const debug = _debug('peercalls:redis')
interface RedisClient {
get: Redis.Redis['get']
set: Redis.Redis['set']
del: Redis.Redis['del']
}
export class RedisStore implements Store {
constructor(
protected readonly redis: RedisClient,
protected readonly prefix: string,
) {
}
private getKey(key: string): string {
return [this.prefix, key].filter(k => !!k).join(':')
}
private nullToUndefined(value: string | null): string | undefined {
if (value === null) {
return undefined
}
return value
}
async getMany(keys: string[]): Promise<Array<string | undefined>> {
const result = await Promise.all(
keys.map(key => this.redis.get(this.getKey(key))))
return result.map(this.nullToUndefined)
}
async get(key: string): Promise<string | undefined> {
key = this.getKey(key)
debug('get %s', key)
const result = await this.redis.get(key)
return this.nullToUndefined(result)
}
async set(key: string, value: string) {
key = this.getKey(key)
debug('set %s %s', key, value)
await this.redis.set(key, value)
}
async remove(key: string) {
key = this.getKey(key)
debug('del %s', key)
await this.redis.del(key)
}
}