LoginSignup
3
3

More than 3 years have passed since last update.

Node.jsでRedisのいろんなメソッドを使ってみる

Last updated at Posted at 2019-07-13

はじめに

node.jsでredisを使う機会があり、今後も使う機会が多くなると思うのでまとめておこうかと思います。

ここに書かれている型以外にも型は存在しますが、とりあえずよく使いそうなやつだけまとめました。

あくまでnode.jsでのredisの使い方をまとめているだけなので、全くredisに触れたことがない方はまずはドットインストールのredisの講座を受けてからこの記事を見るとスッと入ってくると思います。

リンク(https://dotinstall.com/lessons/basic_redis)

基本コード

const Redis = require('ioredis');
const redis = new Redis();

const main = async () => {

  ... //ここに処理を書いていく

  redis.disconnect();
}

main();

string型

setはmysqlでいうinsert、getはselectです。

await redis.set('key', 'val');
const result = await redis.get('key');
console.log(result); //val

配列でもセットできる

const arr = ['key', 'val']
await redis.set(arr);
const result = await redis.get('key');
console.log(result); ///val

期限付きでset

setの第三引数に EX 、第四引数に秒数を指定すると、指定した秒数だけ値を保存しておく

下記のコードは2秒間だけ保存するようにしている
setTimeoutで2秒たったらgetしてくる処理を書き、結果がnullになる

注)下記のコードでは redis.disconnect();を書くと先に接続を切ってしまうので書かないようにする


await redis.set('key', 'val', 'EX', 2);
const result1 = await redis.get('key');
console.log(result1); //val

setTimeout(async () => {
  const result2 = await redis.get('key');
  console.log(result2); //null
}, 2000);

msetとmget

const arr = ['keys1', 'val1', 'keys2', 'val2']
await redis.mset(arr);
const result = await redis.mget('keys1', 'keys2');
console.log(result); //[ 'val1', 'val2' ] 配列で帰ってくる

hash型

hsetとhget

hsetは第一引数にキー名、第二引数にオブジェクトのキー名、第三引数にvalueを書く
hgetはstring型を返す

await redis.hset('hash-key', 'key', 'value');
const result = await redis.hget('hash-key', 'key')
console.log(result); //value

hmsetとhmget

hmgetの第二引数は配列
下のコードはObject.keys(hash)でhashのkeyを配列にまとめている
結果は配列で返ってくる

const hash = {
  key1: 'value1',
  key2: 'value2',
  key3: 'value3',
}
await redis.hmset('hash-key', hash);
const result = await redis.hmget('hash-key', Object.key(hash))
console.log(result); //[ 'value1', 'value2', 'value3' ]

hgetall

キー名を引数にとり、オブジェクトが返ってくる

const hash = {
  key1: 'value1',
  key2: 'value2',
  key3: 'value3',
}
await redis.hmset('hash-key', hash);
const result = await redis.hgetall('hash-key')
console.log(result); //{ key1: 'value1', key2: 'value2',key3: 'value3' }

list型

lpushとrpushとlrange

lpushはlistの先頭に、rpushはlistの最後にpushされる
lpushとrpushは第一引数にキー名を取り、第二引数以降をpushする
lrangeは第一引数にキー名をとり、第二引数と第三引数にはそれぞれlistのインデックス番号を入れる
0と-1にするとそのlistの要素全てを取得してくる

lpushとlrange


await redis.lpush('arr-key1', 'val1', 'val2', 'val3', 'val4');
const result = await redis.lrange('arr-key1', 0, -1)
console.log(result); //[ 'val4', 'val3', 'val2', 'val1' ]

rpushとlrange

await redis.rpush('arr-key2', 'val1', 'val2', 'val3', 'val4');
const result = await redis.lrange('arr-key2', 0, -1)
console.log(result); //[ 'val1', 'val2', 'val3', 'val4' ]

第二引数に配列を指定することもできる(こっちしか使わなさそう)

const arr = ['val1', 'val2', 'val3', 'val4']
await redis.rpush('arr-key', arr);
const result = await redis.lrange('arr-key', 0, -1)
console.log(result); //[ 'val1', 'val2', 'val3', 'val4' ]

llen

llenは指定したキーのlistの長さを出力してくれる
jsでいうarray.length

const arr = ['val1', 'val2', 'val3', 'val4']
await redis.rpush('arr-key', arr);
const result = await redis.llen('arr-key')
console.log(result); //4

del

delはキー名を指定して削除します
型は関係ありません

await redis.set('key', 'value');
const result1 = await redis.get('key')
console.log(result1); //value
await redis.del('key')
const result2 = await redis.get('key')
console.log(result2); //null

参考にしたサイト

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3