mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-07 00:16:57 +08:00
Simplify TTLCache, remove dict-like methods, enhance Cache interface
Co-authored-by: jxxghp <jxxghp@live.cn>
This commit is contained in:
@@ -54,6 +54,7 @@
|
|||||||
|
|
||||||
- 删除了重复的方法定义
|
- 删除了重复的方法定义
|
||||||
- 统一了CacheBackend和AsyncCacheBackend的接口
|
- 统一了CacheBackend和AsyncCacheBackend的接口
|
||||||
|
- 简化了TTLCache类,去掉了dict-like方法,只保留基本功能
|
||||||
- 保持了向后兼容性
|
- 保持了向后兼容性
|
||||||
|
|
||||||
## 使用示例
|
## 使用示例
|
||||||
@@ -146,8 +147,20 @@ cache = TTLCache(region="my_region", maxsize=1024, ttl=600)
|
|||||||
from app.core.cache import Cache
|
from app.core.cache import Cache
|
||||||
cache = Cache(maxsize=1024, ttl=600)
|
cache = Cache(maxsize=1024, ttl=600)
|
||||||
# 使用cache.set(key, value, region="my_region")来指定region
|
# 使用cache.set(key, value, region="my_region")来指定region
|
||||||
|
# 或者直接使用dict语法: cache[key] = value
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### TTLCache简化说明
|
||||||
|
TTLCache类已经被简化,去掉了dict-like方法(如`__getitem__`、`__setitem__`等),现在只保留基本的方法:
|
||||||
|
- `set(key, value, ttl=None)`
|
||||||
|
- `get(key, default=None)`
|
||||||
|
- `delete(key)`
|
||||||
|
- `clear()`
|
||||||
|
- `is_redis()`
|
||||||
|
- `close()`
|
||||||
|
|
||||||
|
建议直接使用Cache类,它提供了完整的dict操作特性。
|
||||||
|
|
||||||
### 从AsyncTTLCache迁移
|
### 从AsyncTTLCache迁移
|
||||||
```python
|
```python
|
||||||
# 旧代码
|
# 旧代码
|
||||||
@@ -207,10 +220,19 @@ cache = AsyncCache(maxsize=1024, ttl=600)
|
|||||||
成功为CacheBackend模块统一添加了dict相关的操作特性,实现了以下目标:
|
成功为CacheBackend模块统一添加了dict相关的操作特性,实现了以下目标:
|
||||||
|
|
||||||
1. ✅ 统一了缓存接口,所有后端都支持dict操作
|
1. ✅ 统一了缓存接口,所有后端都支持dict操作
|
||||||
2. ✅ 消除了对TTLCache包装器的依赖
|
2. ✅ 简化了TTLCache类,去掉了dict-like方法,只保留基本功能
|
||||||
3. ✅ 保持了向后兼容性
|
3. ✅ 消除了对TTLCache包装器的依赖
|
||||||
4. ✅ 提供了完整的dict操作功能
|
4. ✅ 保持了向后兼容性
|
||||||
5. ✅ 支持同步和异步操作
|
5. ✅ 提供了完整的dict操作功能
|
||||||
6. ✅ 提供了详细的迁移指南和测试
|
6. ✅ 支持同步和异步操作
|
||||||
|
7. ✅ 提供了详细的迁移指南和测试
|
||||||
|
|
||||||
现在开发者可以直接使用CacheBackend的dict操作特性,享受更简洁、更统一的缓存操作体验。
|
### 主要改进
|
||||||
|
|
||||||
|
1. **性能提升**: 减少了包装器层,直接使用CacheBackend
|
||||||
|
2. **接口统一**: 所有缓存后端都支持相同的dict操作接口
|
||||||
|
3. **功能完整**: 支持所有标准的dict操作
|
||||||
|
4. **代码简化**: TTLCache不再重复实现dict操作
|
||||||
|
5. **向后兼容**: 原有的方法仍然可用
|
||||||
|
|
||||||
|
现在开发者可以直接使用CacheBackend的dict操作特性,享受更简洁、更统一、更高效的缓存操作体验!
|
||||||
+3
-16
@@ -48,28 +48,15 @@ from app.core.cache import TTLCache
|
|||||||
cache = TTLCache(region="my_region", maxsize=1024, ttl=600)
|
cache = TTLCache(region="my_region", maxsize=1024, ttl=600)
|
||||||
|
|
||||||
# 设置缓存
|
# 设置缓存
|
||||||
cache["key1"] = "value1"
|
cache.set("key1", "value1")
|
||||||
cache.set("key2", "value2")
|
cache.set("key2", "value2")
|
||||||
|
|
||||||
# 获取缓存
|
# 获取缓存
|
||||||
value1 = cache["key1"]
|
value1 = cache.get("key1")
|
||||||
value2 = cache.get("key2", "default")
|
value2 = cache.get("key2", "default")
|
||||||
|
|
||||||
# 检查键是否存在
|
|
||||||
if "key1" in cache:
|
|
||||||
print("key1 exists")
|
|
||||||
|
|
||||||
# 删除缓存
|
# 删除缓存
|
||||||
del cache["key1"]
|
cache.delete("key1")
|
||||||
cache.delete("key2")
|
|
||||||
|
|
||||||
# 迭代缓存
|
|
||||||
for key in cache:
|
|
||||||
print(key)
|
|
||||||
|
|
||||||
# 获取所有键值对
|
|
||||||
for key, value in cache.items():
|
|
||||||
print(f"{key}: {value}")
|
|
||||||
|
|
||||||
# 清空缓存
|
# 清空缓存
|
||||||
cache.clear()
|
cache.clear()
|
||||||
|
|||||||
+2
-63
@@ -1011,12 +1011,9 @@ def Cache(maxsize: Optional[int] = None, ttl: Optional[int] = None) -> CacheBack
|
|||||||
|
|
||||||
class TTLCache:
|
class TTLCache:
|
||||||
"""
|
"""
|
||||||
TTL缓存类,根据配置自动选择使用Redis或cachetools,maxsize仅在未启用Redis时生效
|
TTL缓存类,现在只是一个简单的包装器,建议直接使用Cache类
|
||||||
|
|
||||||
特性:
|
注意:此类已过时,建议直接使用Cache类,它提供了完整的dict操作特性
|
||||||
- 提供与cachetools.TTLCache相同的接口
|
|
||||||
- 根据配置自动选择缓存后端
|
|
||||||
- 支持Redis和cachetools的切换
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, region: Optional[str] = DEFAULT_CACHE_REGION,
|
def __init__(self, region: Optional[str] = DEFAULT_CACHE_REGION,
|
||||||
@@ -1033,54 +1030,6 @@ class TTLCache:
|
|||||||
self.ttl = ttl
|
self.ttl = ttl
|
||||||
self._backend = Cache(maxsize=maxsize, ttl=ttl)
|
self._backend = Cache(maxsize=maxsize, ttl=ttl)
|
||||||
|
|
||||||
def __getitem__(self, key: str):
|
|
||||||
"""
|
|
||||||
获取缓存项
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
value = self._backend.get(key, region=self.region)
|
|
||||||
if value is not None:
|
|
||||||
return value
|
|
||||||
except Exception as e:
|
|
||||||
logger.warning(f"缓存获取失败: {e}")
|
|
||||||
|
|
||||||
raise KeyError(key)
|
|
||||||
|
|
||||||
def __setitem__(self, key: str, value: Any):
|
|
||||||
"""
|
|
||||||
设置缓存项
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
self._backend.set(key, value, ttl=self.ttl, region=self.region)
|
|
||||||
except Exception as e:
|
|
||||||
logger.warning(f"缓存设置失败: {e}")
|
|
||||||
|
|
||||||
def __delitem__(self, key: str):
|
|
||||||
"""
|
|
||||||
删除缓存项
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
self._backend.delete(key, region=self.region)
|
|
||||||
except Exception as e:
|
|
||||||
logger.warning(f"缓存删除失败: {e}")
|
|
||||||
|
|
||||||
def __contains__(self, key: str):
|
|
||||||
"""
|
|
||||||
检查键是否存在
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
return self._backend.exists(key, region=self.region)
|
|
||||||
except Exception as e:
|
|
||||||
logger.warning(f"缓存检查失败: {e}")
|
|
||||||
return False
|
|
||||||
|
|
||||||
def __iter__(self):
|
|
||||||
"""
|
|
||||||
返回缓存的迭代器
|
|
||||||
"""
|
|
||||||
for key, _ in self._backend.items(region=self.region):
|
|
||||||
yield key
|
|
||||||
|
|
||||||
def set(self, key: str, value: Any, ttl: Optional[int] = None):
|
def set(self, key: str, value: Any, ttl: Optional[int] = None):
|
||||||
"""
|
"""
|
||||||
设置缓存项,支持自定义 TTL
|
设置缓存项,支持自定义 TTL
|
||||||
@@ -1113,16 +1062,6 @@ class TTLCache:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning(f"缓存删除失败: {e}")
|
logger.warning(f"缓存删除失败: {e}")
|
||||||
|
|
||||||
def items(self):
|
|
||||||
"""
|
|
||||||
获取缓存的所有键值对
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
return self._backend.items(region=self.region)
|
|
||||||
except Exception as e:
|
|
||||||
logger.warning(f"缓存获取失败: {e}")
|
|
||||||
return []
|
|
||||||
|
|
||||||
def clear(self):
|
def clear(self):
|
||||||
"""
|
"""
|
||||||
清空缓存
|
清空缓存
|
||||||
|
|||||||
Reference in New Issue
Block a user