「Gcp/Firebase/Firestore/cacheモジュール」の版間の差分
提供: 初心者エンジニアの簡易メモ
| 行51: | 行51: | ||
cache.registerCallback(onCacheResponse); | cache.registerCallback(onCacheResponse); | ||
cache.setCache(admin, cachedata, id); | cache.setCache(admin, cachedata, id); | ||
| − | function | + | const onCacheResponseSetCache = function(data) { |
| − | + | return data; // hogehoge | |
} | } | ||
| + | console.log(cache.getResCallbackSetCache()); // hogehoge | ||
Cache取得例 | Cache取得例 | ||
const cache = require('./cache.js'); | const cache = require('./cache.js'); | ||
| 行59: | 行60: | ||
console.log('cachelifesec=' + cachelifesec); | console.log('cachelifesec=' + cachelifesec); | ||
cache.getCache(admin, id, cachelifesec); | cache.getCache(admin, id, cachelifesec); | ||
| − | function | + | const onCacheResponseGetCache = function(data) { |
| − | response.send(" | + | response.send("data=" + data); |
} | } | ||
| + | console.log(cache.getResCallbackGetCache()); // hogehoge | ||
*/ | */ | ||
| − | var | + | var mCallbackSetCache; |
| − | exports. | + | var mResCallbackSetCache = ""; |
| − | + | var mCallbackGetCache; | |
| + | var mResCallbackGetCache = ""; | ||
| + | exports.registerCallbackSetCache = function(callback) { | ||
| + | mCallbackSetCache = callback; | ||
| + | } | ||
| + | exports.getResCallbackSetCache = function() { | ||
| + | return mResCallbackSetCache; | ||
| + | } | ||
| + | exports.registerCallbackGetCache = function(callback) { | ||
| + | mCallbackGetCache = callback; | ||
| + | } | ||
| + | exports.getResCallbackGetCache = function() { | ||
| + | console.log("getResCallbackGetCache mResCallbackGetCache=" + mResCallbackGetCache); | ||
| + | return mResCallbackGetCache; | ||
} | } | ||
exports.setCache = function(admin, data, id) { | exports.setCache = function(admin, data, id) { | ||
| 行82: | 行97: | ||
.then((snapshot) => | .then((snapshot) => | ||
{ | { | ||
| − | + | if (mCallbackSetCache != null) { | |
| + | mResCallbackSetCache = mCallbackSetCache(data); | ||
| + | } | ||
}); | }); | ||
} | } | ||
| 行103: | 行120: | ||
for (let i = 0; i < caches.length; i++) { | for (let i = 0; i < caches.length; i++) { | ||
console.log("ret data=" + caches[i].data); | console.log("ret data=" + caches[i].data); | ||
| − | + | if (mCallbackGetCache != null) { | |
| + | mResCallbackGetCache = mCallbackGetCache(caches[i].data); | ||
| + | console.log("getCache ari mResCallbackGetCache=" + mResCallbackGetCache); | ||
| + | } | ||
return; | return; | ||
} | } | ||
| − | + | if (mCallbackGetCache != null) { | |
| + | mResCallbackGetCache = mCallbackGetCache(""); | ||
| + | console.log("getCache nasi mResCallbackGetCache=" + mResCallbackGetCache); | ||
| + | } | ||
}); | }); | ||
} | } | ||
2019年8月11日 (日) 11:06時点における版
functionsのサンプル
- id別にfirestoreのcahesコレクションへ文字列をキャッシュする
- cache保持時間を設定できるように
cachesのテーブル構成例
id string | data string | unixtime int "hogeid" | "hoge" | 123423451
functions/index.js
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.setCache = functions
.region('asia-northeast1')
.https.onRequest((request, response) => {
var id = request.query['id'];
var cachedata = request.query['cachedata'];
const cache = require('./cache.js');
cache.registerCallback(onCacheResponse);
cache.setCache(admin, cachedata, id);
function onCacheResponse(cachedata) {
response.send("cachedata=" + cachedata);
}
});
exports.getCache = functions
.region('asia-northeast1')
.https.onRequest((request, response) => {
var id = request.query['id'];
var cachedata = request.query['cachedata'];
var cachelifesec = 0;
if (request.query['cachelifesec'] != null) {
cachelifesec = parseInt(request.query['cachelifesec']);
}
const cache = require('./cache.js');
cache.registerCallback(onCacheResponse);
console.log('cachelifesec=' + cachelifesec);
cache.getCache(admin, id, cachelifesec);
function onCacheResponse(cachedata) {
response.send("cachedata=" + cachedata);
}
});
functions/cache.js
/*
Cache設定例
const cache = require('./cache.js');
cache.registerCallback(onCacheResponse);
cache.setCache(admin, cachedata, id);
const onCacheResponseSetCache = function(data) {
return data; // hogehoge
}
console.log(cache.getResCallbackSetCache()); // hogehoge
Cache取得例
const cache = require('./cache.js');
cache.registerCallback(onCacheResponse);
console.log('cachelifesec=' + cachelifesec);
cache.getCache(admin, id, cachelifesec);
const onCacheResponseGetCache = function(data) {
response.send("data=" + data);
}
console.log(cache.getResCallbackGetCache()); // hogehoge
*/
var mCallbackSetCache;
var mResCallbackSetCache = "";
var mCallbackGetCache;
var mResCallbackGetCache = "";
exports.registerCallbackSetCache = function(callback) {
mCallbackSetCache = callback;
}
exports.getResCallbackSetCache = function() {
return mResCallbackSetCache;
}
exports.registerCallbackGetCache = function(callback) {
mCallbackGetCache = callback;
}
exports.getResCallbackGetCache = function() {
console.log("getResCallbackGetCache mResCallbackGetCache=" + mResCallbackGetCache);
return mResCallbackGetCache;
}
exports.setCache = function(admin, data, id) {
var date = new Date() ;
var unixtimems = date.getTime() ;
var unixtime = Math.floor( unixtimems / 1000 ) ;
console.log('unixtime=' + unixtime);
const cache = {
id: id,
data: data,
unixtime: unixtime,
};
admin.firestore().collection('caches')
.doc(id).set(cache)
.then((snapshot) =>
{
if (mCallbackSetCache != null) {
mResCallbackSetCache = mCallbackSetCache(data);
}
});
}
exports.getCache = function(admin, id, cachelifesec) {
var date = new Date() ;
var unixtimems = date.getTime() ;
var unixtime = Math.floor( unixtimems / 1000 ) ;
console.log('unixtime=' + unixtime);
var unixtimecachelifesec = unixtime - cachelifesec;
console.log('cachelifesec=' + cachelifesec);
console.log('unixtimecachelifesec=' +unixtimecachelifesec);
admin.firestore().collection('caches')
.where('id', '==', id)
.where('unixtime', '>', unixtimecachelifesec)
.limit(1)
.get()
.then((snapshot) =>
{
var caches = snapshot.docs.map(x => x.data());
for (let i = 0; i < caches.length; i++) {
console.log("ret data=" + caches[i].data);
if (mCallbackGetCache != null) {
mResCallbackGetCache = mCallbackGetCache(caches[i].data);
console.log("getCache ari mResCallbackGetCache=" + mResCallbackGetCache);
}
return;
}
if (mCallbackGetCache != null) {
mResCallbackGetCache = mCallbackGetCache("");
console.log("getCache nasi mResCallbackGetCache=" + mResCallbackGetCache);
}
});
}
httpアクセスで確認
10秒でcacheが切れるサンプルurl
// cache設定 ttps://asia-northeast1-ほげほげ.cloudfunctions.net/setCache?id=hogeid&cachedata=dada1 // cache取得 ttps://asia-northeast1-ほげほげ.cloudfunctions.net/getCache?id=hogeid&cachelifesec=10
cacheはid別にfirestoreに格納される。
