diff --git a/IMPLEMENTATION_SUMMARY.md b/IMPLEMENTATION_SUMMARY.md index e95c0e71..70f9b469 100644 --- a/IMPLEMENTATION_SUMMARY.md +++ b/IMPLEMENTATION_SUMMARY.md @@ -54,6 +54,7 @@ - 删除了重复的方法定义 - 统一了CacheBackend和AsyncCacheBackend的接口 +- 简化了TTLCache类,去掉了dict-like方法,只保留基本功能 - 保持了向后兼容性 ## 使用示例 @@ -146,8 +147,20 @@ cache = TTLCache(region="my_region", maxsize=1024, ttl=600) from app.core.cache import Cache cache = Cache(maxsize=1024, ttl=600) # 使用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迁移 ```python # 旧代码 @@ -207,10 +220,19 @@ cache = AsyncCache(maxsize=1024, ttl=600) 成功为CacheBackend模块统一添加了dict相关的操作特性,实现了以下目标: 1. ✅ 统一了缓存接口,所有后端都支持dict操作 -2. ✅ 消除了对TTLCache包装器的依赖 -3. ✅ 保持了向后兼容性 -4. ✅ 提供了完整的dict操作功能 -5. ✅ 支持同步和异步操作 -6. ✅ 提供了详细的迁移指南和测试 +2. ✅ 简化了TTLCache类,去掉了dict-like方法,只保留基本功能 +3. ✅ 消除了对TTLCache包装器的依赖 +4. ✅ 保持了向后兼容性 +5. ✅ 提供了完整的dict操作功能 +6. ✅ 支持同步和异步操作 +7. ✅ 提供了详细的迁移指南和测试 -现在开发者可以直接使用CacheBackend的dict操作特性,享受更简洁、更统一的缓存操作体验。 \ No newline at end of file +### 主要改进 + +1. **性能提升**: 减少了包装器层,直接使用CacheBackend +2. **接口统一**: 所有缓存后端都支持相同的dict操作接口 +3. **功能完整**: 支持所有标准的dict操作 +4. **代码简化**: TTLCache不再重复实现dict操作 +5. **向后兼容**: 原有的方法仍然可用 + +现在开发者可以直接使用CacheBackend的dict操作特性,享受更简洁、更统一、更高效的缓存操作体验! \ No newline at end of file diff --git a/MIGRATION_GUIDE.md b/MIGRATION_GUIDE.md index 5e55ffa9..fbd24878 100644 --- a/MIGRATION_GUIDE.md +++ b/MIGRATION_GUIDE.md @@ -48,28 +48,15 @@ from app.core.cache import TTLCache cache = TTLCache(region="my_region", maxsize=1024, ttl=600) # 设置缓存 -cache["key1"] = "value1" +cache.set("key1", "value1") cache.set("key2", "value2") # 获取缓存 -value1 = cache["key1"] +value1 = cache.get("key1") value2 = cache.get("key2", "default") -# 检查键是否存在 -if "key1" in cache: - print("key1 exists") - # 删除缓存 -del cache["key1"] -cache.delete("key2") - -# 迭代缓存 -for key in cache: - print(key) - -# 获取所有键值对 -for key, value in cache.items(): - print(f"{key}: {value}") +cache.delete("key1") # 清空缓存 cache.clear() diff --git a/app/core/cache.py b/app/core/cache.py index 314e8306..b51a3c8e 100644 --- a/app/core/cache.py +++ b/app/core/cache.py @@ -1011,12 +1011,9 @@ def Cache(maxsize: Optional[int] = None, ttl: Optional[int] = None) -> CacheBack class TTLCache: """ - TTL缓存类,根据配置自动选择使用Redis或cachetools,maxsize仅在未启用Redis时生效 - - 特性: - - 提供与cachetools.TTLCache相同的接口 - - 根据配置自动选择缓存后端 - - 支持Redis和cachetools的切换 + TTL缓存类,现在只是一个简单的包装器,建议直接使用Cache类 + + 注意:此类已过时,建议直接使用Cache类,它提供了完整的dict操作特性 """ def __init__(self, region: Optional[str] = DEFAULT_CACHE_REGION, @@ -1033,54 +1030,6 @@ class TTLCache: self.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): """ 设置缓存项,支持自定义 TTL @@ -1113,16 +1062,6 @@ class TTLCache: except Exception as 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): """ 清空缓存