Test:

        >>> import time
        >>> cache = Cache(expire=2)
        >>> cache.put(key='a', value=0)
        >>> cache.put(key='b', value=1)
        >>> cache.put(key='c',value= 2)
        >>> cache.get('a')
        0
        >>> cache.get('b')
        1
        >>> cache.get('c')
        2
        >>> cache.get('e') == None
        True
        >>> time.sleep(2)
        >>> cache.put(key='e', value=4)
        >>> cache.get('a') == None
        True
        >>> cache.get('b') == None
        True
        >>> cache.get('c') == None
        True

def get(self, key, timeout=1, is_async=False, only_read=True):
        """
        Test:

        >>> import time
        >>> cache = Cache(expire=2)
        >>> cache.put(key='a', value=0)
        >>> cache.put(key='b', value=1)
        >>> cache.put(key='c',value= 2)
        >>> cache.get('a')
        0
        >>> cache.get('b')
        1
        >>> cache.get('c')
        2
        >>> cache.get('e') == None
        True
        >>> time.sleep(2)
        >>> cache.put(key='e', value=4)
        >>> cache.get('a') == None
        True
        >>> cache.get('b') == None
        True
        >>> cache.get('c') == None
        True
        """
        if key not in self.cache_items:
            self.logger.debug('Cache item <%s> missing' % key)
            return None

        item = self.cache_items.pop(key)
        item.update_hit_count()
        if self.read_after_refresh_expire:
            item.refresh_expire(self.expire)
        value = item[key]
        self.cache_items[key] = item
        self.total_access_count += 1
        return value