功能不够齐全,请考虑更多复杂场景
时间: 2024-02-24 09:59:23 浏览: 19
好的,下面是一个更完整的自定义缓存类,它支持设置缓存过期时间、LRU淘汰策略、自定义缓存淘汰函数等:
```python
import time
class CustomCache:
def __init__(self, max_size=100, ttl=None, eviction=None):
self.max_size = max_size
self.ttl = ttl # time to live,缓存过期时间(秒)
self.eviction = eviction # 缓存淘汰函数
self.cache = {}
self.access_time = {}
self.create_time = {}
def get(self, key):
if key not in self.cache:
return None
if self.ttl and time.time() - self.create_time[key] > self.ttl:
self.delete(key)
return None
self.access_time[key] = time.time()
return self.cache[key]
def put(self, key, value):
if len(self.cache) >= self.max_size:
self.evict()
self.cache[key] = value
self.access_time[key] = time.time()
self.create_time[key] = time.time()
def delete(self, key):
if key in self.cache:
del self.cache[key]
if key in self.access_time:
del self.access_time[key]
if key in self.create_time:
del self.create_time[key]
def evict(self):
if self.eviction:
key_to_evict = self.eviction(self.access_time)
else:
key_to_evict = min(self.access_time, key=self.access_time.get)
self.delete(key_to_evict)
def clear(self):
self.cache.clear()
self.access_time.clear()
self.create_time.clear()
def size(self):
return len(self.cache)
```
该缓存类支持以下功能:
1. 支持设置缓存过期时间(ttl),超过过期时间的缓存将被清除。
2. 支持LRU淘汰策略,当缓存空间已满时,会自动淘汰访问时间最早的缓存。
3. 支持自定义缓存淘汰函数(eviction),可根据自定义规则进行缓存淘汰。
4. 支持清空缓存(clear)和获取缓存大小(size)的功能。
使用示例:
```python
# 设置缓存大小为100,缓存过期时间为1小时
cache = CustomCache(max_size=100, ttl=3600)
# 添加缓存
cache.put('key1', 'value1')
cache.put('key2', 'value2')
# 获取缓存
value1 = cache.get('key1') # 返回'value1'
value3 = cache.get('key3') # 返回None
# 清空缓存
cache.clear()
```