aboutsummaryrefslogtreecommitdiffstats
path: root/lib/db.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2023-01-17 16:05:00 -0800
committerAdam Soltys <[email protected]>2023-01-17 16:05:00 -0800
commit33229e38a910e26083175a3e272278745378114c (patch)
treec63b3fc8c5e9563ae0aa694617ebd3419a3fac8b /lib/db.js
parent98a611d8965d8b896d124c78bdc1f7ceea6593cf (diff)
downloadcoinos-server-33229e38a910e26083175a3e272278745378114c.tar.gz
coinos-server-33229e38a910e26083175a3e272278745378114c.zip
redlock
Diffstat (limited to 'lib/db.js')
-rw-r--r--lib/db.js24
1 files changed, 4 insertions, 20 deletions
diff --git a/lib/db.js b/lib/db.js
index c21e224f..fb99a756 100644
--- a/lib/db.js
+++ b/lib/db.js
@@ -1,25 +1,9 @@
-import { createClient } from "redis";
-
-export const db = createClient({ url: "redis://db" });
-
-db.on("error", err => console.log("db error", err));
-
-await db.connect();
+import { Redis } from "ioredis";
+import Redlock from "redlock";
+export const db = new Redis("redis://db", { enableAutoPipelining: true });
export default db;
export let g = async k => JSON.parse(await db.get(k));
export let s = (k, v) => db.set(k, JSON.stringify(v));
-
-let retries = {};
-export let t = async (k, f) => {
- retries[k] = retries[k] ? retries[k]++ : 0;
- await db.watch(k);
- let o = f(await g(k));
- let m = await db.multi();
- await s(k, o);
-
- if (retries[k] < 10) {
- if (!(await m.exec())) setTimeout(() => t(k, f), 100);
- } else throw new Error("could not obtain lock");
-};
+export let t = (f) => new Redlock([db]).using([db], 5000, f);