GPTCache 增强:当缓存数据过期时,从缓存存储中移除矢量数据,

0h4hbjxa  于 4个月前  发布在  其他
关注(0)|答案(5)|浏览(56)

你想添加什么内容?
在adapter.py的第108行,当尝试根据矢量数据在缓存存储中搜索数据时:

for search_data in search_data_list:
            cache_data = time_cal(
                chat_cache.data_manager.get_scalar_data,
                func_name="get_data",
                report_func=chat_cache.report.data,
            )(
                search_data,
                extra_param=context.get("get_scalar_data", None),
                session=session,
            )
            if cache_data is None:
                continue

在这里,if cache_data is None表示从矢量存储中找不到与缓存存储中的数据相匹配的数据。是否最好从矢量存储中删除相应的数据以避免再次访问它?
为什么需要这样做?
由于缓存存储中的数据不再可用(可能是因为缓存生存时间策略等原因),因此删除矢量数据是必要的,以便不再访问过期的缓存数据。
还有其他需要注意的吗?
如果我遗漏了一些细节,请纠正我。

dffbzjpn

dffbzjpn1#

我不建议在这里清理数据,因为当使用驱逐策略使数据无效时,所有数据都将被删除,包括标量和向量。
详细信息: https://github.com/zilliztech/GPTCache/blob/main/gptcache/manager/eviction_manager.py

ep6jt1vc

ep6jt1vc2#

我不建议在这里清理数据,因为当使用驱逐策略使数据无效时,所有数据都将被删除,包括标量和向量。详情:https://github.com/zilliztech/GPTCache/blob/main/gptcache/manager/eviction_manager.py
感谢您的建议。在使用Redis驱逐策略后,我还有一个问题:似乎在驱逐基础中有一个"deleted"字段,eviction_manager.soft_evict()方法将其标记为-1,然后eviction_manager.delete()方法将永久从标量和向量存储中删除软驱逐的数据。
然而,看起来只有内存驱逐存储会尝试执行soft_evict操作。当使用Redis驱逐策略时,有办法标记为已删除吗?似乎在Redis中使用TTL会导致永久删除,相应的向量数据将永远不会被清理。

46qrfjad

46qrfjad3#

关于驱逐管理器与驱逐基元之间的关系,你可以参考这个链接:https://github.com/zilliztech/GPTCache/blob/main/gptcache/manager/data_manager.py#L236。实际上,我们在这里抽象了驱逐基元,驱逐管理器的删除并不真正关心策略。

但是我查看了这部分内容,发现确实存在一个bug。在这里,传递的驱逐基元的on_evict内部属性应该被赋值。非常感谢!

如果你有空闲时间,请帮我创建一个pull request。

lmvvr0a8

lmvvr0a84#

关于驱逐管理器(eviction manager)与驱逐基础(evict base)之间的关系,你可以参考这个链接:https://github.com/zilliztech/GPTCache/blob/main/gptcache/manager/data_manager.py#L236。实际上,我们在这里抽象了驱逐基础,驱逐管理器的删除并不真正关心策略。但是我查看了这部分内容,发现确实存在一个bug。在这里,传递的驱逐基础的on_evict内部属性应该被分配一个值。非常感谢!

如果你有空闲时间,请帮我创建一个pull request。
你是说如果我用RedisCacheEviction(或其他实现)初始化一个SSDataManager时,on_evict属性应该用_clear()方法进行初始化吗?
此外,在MemoryCacheEviction实现中,当内存缓存中的键被驱逐时,on_evict函数用作回调函数。所以我认为在RedisCacheEviction中驱逐一个键时,也有必要以某种方式触发on_evict函数。现在我还不知道RedisCacheEviction中如何触发on_evict。

相关问题