如何将到期时间应用于HTML5 indexeddb中的键?

时间:2016-02-19 17:16:54

标签: html5 indexeddb

在html5 api中的indexedDB中,我可以用它来存储键值对。但是,我怎样才能确保在添加某个键值后,1天后,该键将自动从数据库中删除。

我在考虑用当前日期时间和到期时间来包装对象中的值,当你得到值时,检查时差,但这是最好的方法吗?

由于

4 个答案:

答案 0 :(得分:8)

是的,Scott Marcus和dgrogan说的是什么。还有一个提示:如果在时间戳上创建索引,则可以在“过期”值范围内迭代游标,并在打开数据库后删除它们。

var open = indexedDB.open('demo');
open.onupgradeneeded = function() {
  var db = open.result;
  var store = db.createObjectStore('store');
  var index = store.createIndex('timestamp', 'timestamp');

  // Populate with some dummy data, with about half from the past:
  for (var id = 0; id < 20; ++id) {
    store.put({
      value: Math.random(),
      timestamp: new Date(Date.now() + (Math.random()-0.5) * 10000)
    }, id);
  }
};
open.onsuccess = function() {
  var db = open.result;
  var tx = db.transaction('store', 'readwrite');

  // Anything in the past:
  var range = IDBKeyRange.upperBound(new Date());

  tx.objectStore('store').index('timestamp').openCursor(range)
    .onsuccess = function(e) {
      var cursor = e.target.result;
      if (!cursor) return;
      console.log('deleting: ' + cursor.key);
      cursor.delete();
      cursor.continue();
    };

  // This transaction will run after the first commits since
  // it has overlapping scope:
  var tx2 = db.transaction('store');
  tx2.objectStore('store').count().onsuccess = function(e) {
    console.log('records remaining: ' + e.target.result);
  };
};

答案 1 :(得分:3)

正在考虑支持自动使IndexedDB和其他存储数据过期。见https://github.com/whatwg/storage/issues/11。如果您能在那里描述您的用例,将会很有帮助。

与此同时,你必须做一些像你概述的事情或者斯科特马库斯所建议的事情。

答案 2 :(得分:2)

IndexedDB只能通过代码修改。它没有自动功能。为什么不只是存储带有时间戳值的数据并修改代码以在时间戳过期时将其删除?

答案 3 :(得分:0)

我在某个时候写了一个npm模块,它在 x 分钟之后使indexedDB密钥失效。它也有非常简单的api(类似于memcache / localstorage),适合用作键值存储。

您可以在npm here上查看。