ecodeclub / ecache

统一缓存 API
Apache License 2.0
12 stars 15 forks source link

添加如何设置key永不过期 #23

Closed longyue0521 closed 11 months ago

longyue0521 commented 11 months ago

仅限中文

在提之前请先查找已有 issues,避免重复上报。

并且确保自己已经:

你的问题

当我使用ecache.Cache这个抽象的时候,Cache接口中没有说明如何设置key永不过期, 导致我不得不去翻阅具体实现——memory/lru会忽略过期参数, redis实现用到github.com/redis/go-redis/v9库翻阅文档发现使用0来设置.

建议从ecache.Cache使用及语义角度出发,考虑每种使用场景及参数差异,来屏蔽底层实现细节. 在接口中明确”如何设置过期时间表示key永不过期“,另外memory.lru会破坏ecache.Cache的逻辑语义,不应将其作为ecache.Cache接口的memory实现. 作为使用者只要我拿到一个ecache.Cache实例,不管底层如何实现,使用者只要看ecache.Cache中声明的逻辑语义就行.

你使用的是 ecache 哪个版本?

未发版

你设置的的 Go 环境?

上传 go env 的结果

flycash commented 11 months ago

这也就是你说的难点,部分实现的过期时间是很难确定的。

而实际上,所谓的永不过期,可以用一种近似的非常长过期时间来替代。我举一个例子,将过期时间设置成好几年,那么你可以预期,它就近似于永不过期了。

因此我暂时还没确定要不要统一这个语义。而统一也比较简单,直接使用 0 就可以了。

flycash commented 11 months ago

lru 那个实现是特例,需要在初始化的时候指定一个超长的过期时间

longyue0521 commented 11 months ago

这也就是你说的难点,部分实现的过期时间是很难确定的。

而实际上,所谓的永不过期,可以用一种近似的非常长过期时间来替代。我举一个例子,将过期时间设置成好几年,那么你可以预期,它就近似于永不过期了。

因此我暂时还没确定要不要统一这个语义。而统一也比较简单,直接使用 0 就可以了。

好的

lru 那个实现是特例,需要在初始化的时候指定一个超长的过期时间

OK