util/memcache.lua

Sun, 01 Aug 2010 12:20:27 +0100

author
Matthew Wild <mwild1@gmail.com>
date
Sun, 01 Aug 2010 12:20:27 +0100
changeset 15
87ef478bf7fc
parent 14
578214a34ded
child 16
906615e293de
permissions
-rw-r--r--

util.memcache: Fix backwards expiry logic and nil global access

local now = os.time;

module("memcache", package.seeall);

local max_expires_seconds = 60*60*24*30;

function new()
	local cache = {};
	
	local _data = {};
	local _flags = {};
	local _expiry = {};
	local _deleted = {};
	
	function cache:set(key, flags, expires, data)
		_flags[key] = flags;
		if expires > 0 then
			if expires <= max_expires_seconds then
				expires = now() + expires;
			end
			_expiry[key] = expires;
		end
		_data[key] = data;
		return true;
	end
	
	function cache:get(key)
		local expires = _expiry[key];
		if expires and expires < now() then
			self:delete(key);
		end
		return _flags[key], _data[key];
	end
	
	function cache:delete(key, time)
		local existed = _data[key];
		_flags[key], _data[key], _expiry[key] = nil, nil, nil;
		if existed and time then
			if time <= max_expires_seconds then
				time = now() + time;
			end
			_deleted[key] = time;
		end
		return true, existed;
	end
	
	return cache;
end

return _M;

mercurial