Skip to content

Instantly share code, notes, and snippets.

@mitio
Last active February 5, 2023 16:23
Show Gist options
  • Save mitio/9688698 to your computer and use it in GitHub Desktop.
Save mitio/9688698 to your computer and use it in GitHub Desktop.

Revisions

  1. mitio revised this gist Mar 21, 2014. 1 changed file with 51 additions and 51 deletions.
    102 changes: 51 additions & 51 deletions memory_cache.js
    Original file line number Diff line number Diff line change
    @@ -1,64 +1,64 @@
    var MemoryCache = function (options) {
    options = $.extend(true, {
    maxEntries: null
    }, options || {});
    options = $.extend(true, {
    maxEntries: null
    }, options || {});

    var self = this;
    var cache = {};
    var entries = 0;
    var self = this;
    var cache = {};
    var entries = 0;

    var ageOf = function (entry) {
    return Math.round((new Date() - entry.setAt) / 1000);
    };
    var ageOf = function (entry) {
    return Math.round((new Date() - entry.setAt) / 1000);
    };

    var deleteEntryByKey = function (key) {
    delete cache[key];
    if (entries > 0) entries--;
    };
    var deleteEntryByKey = function (key) {
    delete cache[key];
    if (entries > 0) entries--;
    };

    var deleteOldestEntry = function () {
    var keyOfOldestItem, dateOfOldestItem;
    for (var key in cache) {
    if (!dateOfOldestItem || dateOfOldestItem > cache[key].setAt) {
    dateOfOldestItem = cache[key].setAt;
    keyOfOldestItem = key;
    }
    }
    var deleteOldestEntry = function () {
    var keyOfOldestItem, dateOfOldestItem;
    for (var key in cache) {
    if (!dateOfOldestItem || dateOfOldestItem > cache[key].setAt) {
    dateOfOldestItem = cache[key].setAt;
    keyOfOldestItem = key;
    }
    }

    if (keyOfOldestItem) {
    deleteEntryByKey(keyOfOldestItem);
    }
    };
    if (keyOfOldestItem) {
    deleteEntryByKey(keyOfOldestItem);
    }
    };

    self.set = function (key, value, maxAge) {
    if (cache[key]) {
    cache[key].value = value;
    cache[key].setAt = new Date();
    cache[key].maxAge = maxAge || cache[key].maxAge;
    } else {
    if (options.maxEntries && entries >= options.maxEntries) {
    deleteOldestEntry();
    }
    self.set = function (key, value, maxAge) {
    if (cache[key]) {
    cache[key].value = value;
    cache[key].setAt = new Date();
    cache[key].maxAge = maxAge || cache[key].maxAge;
    } else {
    if (options.maxEntries && entries >= options.maxEntries) {
    deleteOldestEntry();
    }

    cache[key] = {
    value: value,
    setAt: new Date(),
    maxAge: maxAge
    };
    cache[key] = {
    value: value,
    setAt: new Date(),
    maxAge: maxAge
    };

    entries++;
    }
    };
    entries++;
    }
    };

    self.get = function (key) {
    var entry = cache[key];
    self.get = function (key) {
    var entry = cache[key];

    if (entry) {
    if (entry.maxAge && entry.maxAge <= ageOf(entry)) {
    deleteEntryByKey(key);
    }
    if (entry) {
    if (entry.maxAge && entry.maxAge <= ageOf(entry)) {
    deleteEntryByKey(key);
    }

    return entry.value;
    }
    };
    return entry.value;
    }
    };
    };
  2. mitio revised this gist Mar 21, 2014. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions memory_cache.js
    Original file line number Diff line number Diff line change
    @@ -16,7 +16,7 @@ var MemoryCache = function (options) {
    if (entries > 0) entries--;
    };

    var deleteOldestItem = function () {
    var deleteOldestEntry = function () {
    var keyOfOldestItem, dateOfOldestItem;
    for (var key in cache) {
    if (!dateOfOldestItem || dateOfOldestItem > cache[key].setAt) {
    @@ -37,7 +37,7 @@ var MemoryCache = function (options) {
    cache[key].maxAge = maxAge || cache[key].maxAge;
    } else {
    if (options.maxEntries && entries >= options.maxEntries) {
    deleteOldestItem();
    deleteOldestEntry();
    }

    cache[key] = {
  3. mitio created this gist Mar 21, 2014.
    64 changes: 64 additions & 0 deletions memory_cache.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,64 @@
    var MemoryCache = function (options) {
    options = $.extend(true, {
    maxEntries: null
    }, options || {});

    var self = this;
    var cache = {};
    var entries = 0;

    var ageOf = function (entry) {
    return Math.round((new Date() - entry.setAt) / 1000);
    };

    var deleteEntryByKey = function (key) {
    delete cache[key];
    if (entries > 0) entries--;
    };

    var deleteOldestItem = function () {
    var keyOfOldestItem, dateOfOldestItem;
    for (var key in cache) {
    if (!dateOfOldestItem || dateOfOldestItem > cache[key].setAt) {
    dateOfOldestItem = cache[key].setAt;
    keyOfOldestItem = key;
    }
    }

    if (keyOfOldestItem) {
    deleteEntryByKey(keyOfOldestItem);
    }
    };

    self.set = function (key, value, maxAge) {
    if (cache[key]) {
    cache[key].value = value;
    cache[key].setAt = new Date();
    cache[key].maxAge = maxAge || cache[key].maxAge;
    } else {
    if (options.maxEntries && entries >= options.maxEntries) {
    deleteOldestItem();
    }

    cache[key] = {
    value: value,
    setAt: new Date(),
    maxAge: maxAge
    };

    entries++;
    }
    };

    self.get = function (key) {
    var entry = cache[key];

    if (entry) {
    if (entry.maxAge && entry.maxAge <= ageOf(entry)) {
    deleteEntryByKey(key);
    }

    return entry.value;
    }
    };
    };