はじめに
携わっている案件でRedisを触る機会がありました。
実装の中でRedisに配列形式の値を保存する方法を調べたのでこちらに記録しておきます。
やりたい事
今回のユースケースは、アプリケーションのユーザー情報をRedis上にキャッシュしたいというものでした。話を簡単に進める為、以下のような情報を配列形式で保存したいとします。
// 親keyはアプリケーション生成のトークン
// それに紐づくvalueはユーザー情報の配列
[
'ランダムなtoken' => [
'id' => 1,
'name' => 'aaaa',
]
]
実現方法
今回の場合、RedisのHash型を利用して保存していきます。
LaravelのRedisファサードを利用して以下のように保存処理を実行します。
public function save($id, $name, $token): bool
{
Redis::pipeline(function ($pipe) use ($id, $name, $token) {
$pipe->hset($token, 'id', $id);
$pipe->hset($token, 'name', $name);
$pipe->expire($token, 4000); // 有効期限を設定
});
}
hset
メソッドを利用する事で同じkeyに対してHash型の値を保存する事ができます。
また、pipeline
メソッドを利用する事で毎コマンドごとにRedisサーバへネットワークトリップする代わりに、すべてのコマンドを一度にRedisサーバへ送信させるよう実装しています。
※詳しくはこちらを参照
https://readouble.com/laravel/8.x/ja/redis.html