'Add a new value to the cache.
Also, if the entry is ever removed from the cache, call
cleanup(key, value).
:param key: The key to store it under
:param value: The object to store
:param cleanup: None or a function taking (key, value) to indicate
\'value\' should be cleaned up.'

def add(self, key, value, cleanup=None):

    if (key is _null_key):
        raise ValueError('cannot    use    _null_key    as    a    key')
    if (key in self._cache):
        node = self._cache[key]
        node.run_cleanup()
        node.value = value
        node.cleanup = cleanup
    else:
        node = _LRUNode(key, value, cleanup=cleanup)
        self._cache[key] = node
    self._record_access(node)
    if (len(self._cache) > self._max_cache):
        self.cleanup()
