at backyard

Color my life with the chaos of trouble.

Denoでredisを触ってみた備忘録

Denoでredisを触ってみたのでその備忘録です。

deno-redis を利用しています。

github.com

redisをDocker上で動かす

ここではredisをMacで動くDocker上で起動しています。

セットアップ手順については過去にこちらのブログに書き残しているコマンドを使っています。

shinshin86.hateblo.jp

Deno run コマンドの実行について

今回書き残すコマンドを利用する際は --allow-net が必要です。

deno run --allow-net foo.ts

というように実行していきます。

deno-redisの実行例

それではdenoでredisを操作するサンプルを書いていきます。

SET, GET, SETNX, DEL

まずは下記のコマンドを用いたサンプルです。

  • SET
  • GET
  • SETEN
  • DEL
import { connect } from "https://deno.land/x/redis/mod.ts";
const redis = await connect({
  hostname: "127.0.0.1",
  port: 6379,
});

// SET
// { setResponse: "OK" }
const setResponse = await redis.set("foo", "bar");
console.log({ setResponse });

// GET
// { getResponse: "bar" }
const getResponse = await redis.get("foo");
console.log({ getResponse });

// SETNX
// 既存のキーに値を登録することはできない。すでに既存のキーが存在する場合、返り値は下記となる
// { setnxResponse: 0 }
const setnxResponse = await redis.setnx("foo", "bar");
console.log({ setnxResponse });

// DEL
// 指定したキーを削除する
// { delResponse: 1 }
const delResponse = await redis.del("foo")
console.log({delResponse});

// GET
// 存在しないキーをGETするとundefinedが返る
// { getResponse2: undefined }
const getResponse2 = await redis.get("foo");
console.log({ getResponse2 });

SETEX, TTL, PSETEX, PTTL

次は下記の有効期限関連のキーです。

  • SETEX
  • TTL
  • PSETEX
  • PTTL
import { connect } from "https://deno.land/x/redis/mod.ts";
const redis = await connect({
  hostname: "127.0.0.1",
  port: 6379,
});

const sleep = (msec: number): Promise<void> =>
  new Promise((resolve) => setTimeout(resolve, msec));

// SETEX
// キーに有効期限を設定して値を登録
// setexコマンドはキーに有効期限を秒単位で設定できる
// { setexResponse: "OK" }
const setexResponse = await redis.setex("foo", 1, "bar");
console.log({ setexResponse });

// TTL
// 指定したキーの有効期限を確認する
// 今回のコードの場合、"1"が返る
// { ttlResponse: 1 }
const ttlResponse = await redis.ttl("foo");
console.log({ ttlResponse });

// 2秒まつ
await sleep(2000);

// キーの有効期限が切れるため、再度TTLで残り時間を確認すると "-2" が返る
// { ttlResponse2: -2 }
const ttlResponse2 = await redis.ttl("foo");
console.log({ ttlResponse2 });

// PSETEX
// キーに有効期限(ミリ秒)を設定して値を登録
// { psetexResponse: "OK" }
const psetexResponse = await redis.psetex("foo2", 1000, "bar2");
console.log({ psetexResponse });

// PTTL
// 指定したキーの有効期限を確認する(ミリ秒)
// { pttlResponse: 996 }
const pttlResponse = await redis.pttl("foo2");
console.log({ pttlResponse });

// 2秒まつ
await sleep(2000);

// PTTL
// { pttlResponse2: -2 }
const pttlResponse2 = await redis.pttl("foo2");
console.log({ pttlResponse2 });

// GET
// 期限切れのため値は取得できない
// { getResponse: undefined }
const getResponse = await redis.get("foo2");
console.log({ getResponse });

また時間を作って他のredis操作についても試していく予定です。

試したらこちらにまた追記していきます。