def METHOD_NAME(cls):
    cls._cache_handle = open(cls._cache_filename, 'a+')
    try:
        fcntl.flock(cls._cache_handle, fcntl.LOCK_EX | fcntl.LOCK_NB)
    except IOError:
        # other process is already creating the cache, wait, let the other process do it's work and return.
        fcntl.flock(cls._cache_handle, fcntl.LOCK_EX)
        fcntl.flock(cls._cache_handle, fcntl.LOCK_UN)
    cls._cache_handle.seek(0)
    try:
        cls._data = ujson.loads(cls._cache_handle.read())
    except ValueError:
        cls._data = dict()
    current_cache = cls.current_cache()
    cls._data.update(current_cache)
    used_addresses = set()
    for macaddr in cls._data:
        if cls._now  == cls._data[macaddr]['last_seen']:
            for address in cls._data[macaddr]['items']:
                used_addresses.add(address)
    for macaddr in list(cls._data):
        if cls._now - cls._data[macaddr]['last_seen'] > cls._address_ttl:
            # expired
            del cls._data[macaddr]
        elif cls._now != cls._data[macaddr]['last_seen']:
            # reused within expiry
            for ix in reversed(range(len(cls._data[macaddr]['items']))):
                if cls._data[macaddr]['items'][ix] in used_addresses:
                    del cls._data[macaddr]['items'][ix]
    # save
    cls._cache_handle.seek(0)
    cls._cache_handle.truncate()
    cls._cache_handle.write(ujson.dumps(cls._data))
    fcntl.flock(cls._cache_handle, fcntl.LOCK_UN)