<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
		<id>https://wiki.nonip.net/index.php?action=history&amp;feed=atom&amp;title=Gcp%2FFirebase%2FFirestore%2Fcache%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%2F%E5%9F%BA%E6%9C%AC</id>
		<title>Gcp/Firebase/Firestore/cacheモジュール/基本 - 変更履歴</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.nonip.net/index.php?action=history&amp;feed=atom&amp;title=Gcp%2FFirebase%2FFirestore%2Fcache%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%2F%E5%9F%BA%E6%9C%AC"/>
		<link rel="alternate" type="text/html" href="https://wiki.nonip.net/index.php?title=Gcp/Firebase/Firestore/cache%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB/%E5%9F%BA%E6%9C%AC&amp;action=history"/>
		<updated>2026-04-20T01:41:00Z</updated>
		<subtitle>このウィキのこのページに関する変更履歴</subtitle>
		<generator>MediaWiki 1.24.2</generator>

	<entry>
		<id>https://wiki.nonip.net/index.php?title=Gcp/Firebase/Firestore/cache%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB/%E5%9F%BA%E6%9C%AC&amp;diff=9009&amp;oldid=prev</id>
		<title>Admin: ページの作成:「 ==functionsのサンプル== *id別にfirestoreのcahesコレクションへ文字列をキャッシュする *cache保持時間を設定できるように  cachesのテ...」</title>
		<link rel="alternate" type="text/html" href="https://wiki.nonip.net/index.php?title=Gcp/Firebase/Firestore/cache%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB/%E5%9F%BA%E6%9C%AC&amp;diff=9009&amp;oldid=prev"/>
				<updated>2019-08-19T05:02:29Z</updated>
		
		<summary type="html">&lt;p&gt;ページの作成:「 ==functionsのサンプル== *id別にfirestoreのcahesコレクションへ文字列をキャッシュする *cache保持時間を設定できるように  cachesのテ...」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
==functionsのサンプル==&lt;br /&gt;
*id別にfirestoreのcahesコレクションへ文字列をキャッシュする&lt;br /&gt;
*cache保持時間を設定できるように&lt;br /&gt;
&lt;br /&gt;
cachesのテーブル構成例&lt;br /&gt;
 id string | data string | unixtime int&lt;br /&gt;
 &amp;quot;hogeid&amp;quot; | &amp;quot;hoge&amp;quot; | 123423451&lt;br /&gt;
&lt;br /&gt;
functions/index.js&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
const functions = require('firebase-functions');&lt;br /&gt;
const admin = require('firebase-admin');&lt;br /&gt;
admin.initializeApp();&lt;br /&gt;
exports.setCache = functions&lt;br /&gt;
  .region('asia-northeast1')&lt;br /&gt;
  .https.onRequest((request, response) =&amp;gt; {&lt;br /&gt;
    var id = request.query['id'];&lt;br /&gt;
    var cachedata = request.query['cachedata'];&lt;br /&gt;
    const cache = require('./cache.js');&lt;br /&gt;
    cache.registerCallback(onCacheResponse);&lt;br /&gt;
    cache.setCache(admin, cachedata, id);&lt;br /&gt;
    function onCacheResponse(cachedata) {&lt;br /&gt;
       response.send(&amp;quot;cachedata=&amp;quot; + cachedata);&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
exports.getCache = functions&lt;br /&gt;
  .region('asia-northeast1')&lt;br /&gt;
  .https.onRequest((request, response) =&amp;gt; {&lt;br /&gt;
    var id = request.query['id'];&lt;br /&gt;
    var cachedata = request.query['cachedata'];&lt;br /&gt;
    var cachelifesec = 0;&lt;br /&gt;
    if (request.query['cachelifesec'] != null) {&lt;br /&gt;
      cachelifesec = parseInt(request.query['cachelifesec']);&lt;br /&gt;
    }&lt;br /&gt;
    const cache = require('./cache.js');&lt;br /&gt;
    cache.registerCallback(onCacheResponse);&lt;br /&gt;
    console.log('cachelifesec=' + cachelifesec);&lt;br /&gt;
    cache.getCache(admin, id, cachelifesec);&lt;br /&gt;
    function onCacheResponse(cachedata) {&lt;br /&gt;
       response.send(&amp;quot;cachedata=&amp;quot; + cachedata);&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
functions/cache.js&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Cache設定例&lt;br /&gt;
    const cache = require('./cache.js');&lt;br /&gt;
    cache.registerCallback(onCacheResponse);&lt;br /&gt;
    cache.setCache(admin, cachedata, id);&lt;br /&gt;
    const onCacheResponseSetCache = function(data) {&lt;br /&gt;
       return data; // hogehoge&lt;br /&gt;
    }&lt;br /&gt;
    console.log(cache.getResCallbackSetCache()); // hogehoge&lt;br /&gt;
Cache取得例&lt;br /&gt;
    const cache = require('./cache.js');&lt;br /&gt;
    cache.registerCallback(onCacheResponse);&lt;br /&gt;
    console.log('cachelifesec=' + cachelifesec);&lt;br /&gt;
    cache.getCache(admin, id, cachelifesec);&lt;br /&gt;
    const onCacheResponseGetCache = function(data) {&lt;br /&gt;
       response.send(&amp;quot;data=&amp;quot; + data);&lt;br /&gt;
    }&lt;br /&gt;
    console.log(cache.getResCallbackGetCache()); // hogehoge&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
var mCallbackSetCache;&lt;br /&gt;
var mResCallbackSetCache = &amp;quot;&amp;quot;;&lt;br /&gt;
var mCallbackGetCache;&lt;br /&gt;
var mResCallbackGetCache = &amp;quot;&amp;quot;;&lt;br /&gt;
exports.registerCallbackSetCache = function(callback) {&lt;br /&gt;
    mCallbackSetCache = callback;&lt;br /&gt;
}&lt;br /&gt;
exports.getResCallbackSetCache = function() {&lt;br /&gt;
    return mResCallbackSetCache;&lt;br /&gt;
}&lt;br /&gt;
exports.registerCallbackGetCache = function(callback) {&lt;br /&gt;
    mCallbackGetCache = callback;&lt;br /&gt;
}&lt;br /&gt;
exports.getResCallbackGetCache = function() {&lt;br /&gt;
    console.log(&amp;quot;getResCallbackGetCache mResCallbackGetCache=&amp;quot; + mResCallbackGetCache);&lt;br /&gt;
    return mResCallbackGetCache;&lt;br /&gt;
}&lt;br /&gt;
exports.setCache = function(admin, data, id) {&lt;br /&gt;
  var date = new Date() ;&lt;br /&gt;
  var unixtimems = date.getTime() ;&lt;br /&gt;
  var unixtime = Math.floor( unixtimems / 1000 ) ;&lt;br /&gt;
  console.log('unixtime=' + unixtime);&lt;br /&gt;
  const cache = {&lt;br /&gt;
    id: id,&lt;br /&gt;
    data: data,&lt;br /&gt;
    unixtime: unixtime,&lt;br /&gt;
  };&lt;br /&gt;
  admin.firestore().collection('caches')&lt;br /&gt;
    .doc(id).set(cache)&lt;br /&gt;
    .then((snapshot) =&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
      if (mCallbackSetCache != null) {&lt;br /&gt;
        mResCallbackSetCache = mCallbackSetCache(data);&lt;br /&gt;
      }&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
exports.getCache = function(admin, id, cachelifesec) {&lt;br /&gt;
    var date = new Date() ;&lt;br /&gt;
    var unixtimems = date.getTime() ;&lt;br /&gt;
    var unixtime = Math.floor( unixtimems / 1000 ) ;&lt;br /&gt;
    console.log('unixtime=' + unixtime);&lt;br /&gt;
    var unixtimecachelifesec = unixtime - cachelifesec;&lt;br /&gt;
    console.log('cachelifesec=' + cachelifesec);&lt;br /&gt;
    console.log('unixtimecachelifesec=' +unixtimecachelifesec);&lt;br /&gt;
  admin.firestore().collection('caches')&lt;br /&gt;
    .where('id', '==', id)&lt;br /&gt;
    .where('unixtime', '&amp;gt;', unixtimecachelifesec)&lt;br /&gt;
    .limit(1)&lt;br /&gt;
    .get()&lt;br /&gt;
    .then((snapshot) =&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
    var caches = snapshot.docs.map(x =&amp;gt; x.data());&lt;br /&gt;
    for (let i = 0; i &amp;lt; caches.length; i++) {&lt;br /&gt;
       console.log(&amp;quot;ret data=&amp;quot; + caches[i].data);&lt;br /&gt;
       if (mCallbackGetCache != null) {&lt;br /&gt;
         mResCallbackGetCache = mCallbackGetCache(caches[i].data);&lt;br /&gt;
         console.log(&amp;quot;getCache ari mResCallbackGetCache=&amp;quot; + mResCallbackGetCache);&lt;br /&gt;
       }&lt;br /&gt;
       return;&lt;br /&gt;
    }&lt;br /&gt;
    if (mCallbackGetCache != null) {&lt;br /&gt;
      mResCallbackGetCache = mCallbackGetCache(&amp;quot;&amp;quot;);&lt;br /&gt;
      console.log(&amp;quot;getCache nasi mResCallbackGetCache=&amp;quot; + mResCallbackGetCache);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==httpアクセスで確認==&lt;br /&gt;
10秒でcacheが切れるサンプルurl&lt;br /&gt;
 // cache設定&lt;br /&gt;
 ttps://asia-northeast1-ほげほげ.cloudfunctions.net/setCache?id=hogeid&amp;amp;cachedata=dada1&lt;br /&gt;
 // cache取得&lt;br /&gt;
 ttps://asia-northeast1-ほげほげ.cloudfunctions.net/getCache?id=hogeid&amp;amp;cachelifesec=10&lt;br /&gt;
&lt;br /&gt;
cacheはid別にfirestoreに格納される。&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>