はじめに
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