mirror of
https://github.com/wukko/cobalt.git
synced 2025-05-01 06:44:24 +02:00
65 lines
1.4 KiB
JavaScript
65 lines
1.4 KiB
JavaScript
import { commandOptions, createClient } from "redis";
|
|
import { env } from "../config.js";
|
|
import { Store } from "./base-store.js";
|
|
|
|
export default class RedisStore extends Store {
|
|
#client = createClient({
|
|
url: env.redisURL,
|
|
});
|
|
#connected;
|
|
|
|
constructor(name) {
|
|
super(name);
|
|
this.#connected = this.#client.connect();
|
|
}
|
|
|
|
#keyOf(key) {
|
|
return this.id + '_' + key;
|
|
}
|
|
|
|
async _has(key) {
|
|
await this.#connected;
|
|
|
|
return this.#client.hExists(key);
|
|
}
|
|
|
|
async _get(key) {
|
|
await this.#connected;
|
|
|
|
const valueType = await this.#client.get(this.#keyOf(key) + '_t');
|
|
const value = await this.#client.get(
|
|
commandOptions({ returnBuffers: true }),
|
|
this.#keyOf(key)
|
|
);
|
|
|
|
if (!value) {
|
|
return null;
|
|
}
|
|
|
|
if (valueType === 'b')
|
|
return value;
|
|
else
|
|
return JSON.parse(value);
|
|
}
|
|
|
|
async _set(key, val, exp_sec = -1) {
|
|
await this.#connected;
|
|
|
|
const options = exp_sec > 0 ? { EX: exp_sec } : undefined;
|
|
|
|
if (val instanceof Buffer) {
|
|
await this.#client.set(
|
|
this.#keyOf(key) + '_t',
|
|
'b',
|
|
options
|
|
);
|
|
}
|
|
|
|
await this.#client.set(
|
|
this.#keyOf(key),
|
|
val,
|
|
options
|
|
);
|
|
}
|
|
}
|