Azure Redis Cache
そういえばコレ触ってみたいと思ってたんですよね。
作り方
ポータルからぽちぽちでいけました。ハマりどころはないでしょう多分。 今回は検証用なのでプランはBASICにしました。本番ではStandard以上を使うことになるんでしょうね。
node.js から使ってみよう
最近、不本意?ながら JavaScript(node.jsです。というかnode.jsまた分裂したけど大丈夫なんですかね…) やってるので、試しに node.js でやってみようと思います。
手順は、以下のサイトを参考にしてます。
Node.js で Azure Redis Cache を使用する方法
ということで
npm install redis
で node_redis を入れます。
接続に必要な情報の取得
ポータルから、Redis Cacheのアクセスキーからプライマリキーとプロパティからホスト名とSSLポートをメモっておきます。 node的には、環境変数あたりにセットしておいて process.env.*** からアクセスするのがコード内に埋め込まなくて済むのでいいんでしょうね。私はFunction Appを使うので、アプリケーション設定に埋め込んでおきます。
情報を書き込んでみる
では、先ほどの情報を元にアクセスしてみましょう。 私はFunction Appで試してみてるので適当に TimerTrigger の関数を作って関数が動いた時間の情報をキャッシュに書き込むようにしました。
const redis = require('redis'); module.exports = function (context, myTimer) {var client = redis.createClient(process.env.REDIS_PORT, process.env.REDIS_HOSTNAME, { auth_pass: process.env.REDIS_KEY, tls: { servername: process.env.REDIS_HOSTNAME }}); client.set('timestamp', newDate().toISOString(), (err, reply) => { console.log('updated timestamp'); client.quit(); context.done(); }); };
こいつを10秒間隔くらいで動かしてみるように function.json を構成します。
{"disabled": false, "bindings": [{"name": "myTimer", "type": "timerTrigger", "direction": "in", "schedule": "*/10 * * * * *"}]}
func host start すると以下のようなログが延々と出続けるのでエラーなく動いてるっぽいですね。 (タイマーが動き出すまでに少し時間がかかります)
Function started (Id=44896ed1-2114-4697-950b-1514548e00ed) Executing 'Functions.UpdateCache' (Reason='Timer fired at 2017-08-29T10:27:10.0229356+09:00', Id=44896ed1-2114-4697-950b-1514548e00ed) updated timestamp Function completed (Success, Id=44896ed1-2114-4697-950b-1514548e00ed, Duration=2342ms) Executed 'Functions.UpdateCache' (Succeeded, Id=44896ed1-2114-4697-950b-1514548e00ed)
因みに、Redisの管理ツールは何を使うのがデファクトか知らないのですが Redis Desktop Managerを使って覗いてみたらちゃんと値が入っていることが確認できました。
参考: Redis Desktop Manager を使って Azure Redis Cache の管理を行ってみた
SSLでつなぐ方法はどうやるんだろう?
情報を読み込んでみる
ということで書けてることが確認できたので次は読んでみます。
redis の client を作って get するだけですね。
const redis = require('redis'); module.exports = function (context, req) {var client = redis.createClient(process.env.REDIS_PORT, process.env.REDIS_HOSTNAME, { auth_pass: process.env.REDIS_KEY, tls: { servername: process.env.REDIS_HOSTNAME }}); client.get('timestamp', (err, reply) => { context.res = {status: 200, body: reply }; client.quit(); context.done(); }); };
適当に実行して URL をたたくと以下のような結果が返ってきました。
"2017-08-29T01:39:10.016Z"
暫く時間をあけて URL をたたくとちゃんと更新された値が取れてるみたいです。
"2017-08-29T01:41:10.010Z"
まとめ
キャッシュのゲットとセットだけなら簡単でした。 なんか他にもいろんな機能があるみたいなので見てみたいと思います。