我有一个 SpringBoot 应用程序,它@Cacheable
通过 Redis 缓存的方法使用注释。我@EnableCaching
在我的主 SpringBootApplication 类中,在我的项目的 application.yml 文件中,我有这些属性:
spring.cache.cache-names: getMyMethodCache
spring:
cache:
type: redis
redis:
time-to-live: 300000 # 5 minutes
当我在本地执行此操作时,我可以连接到 redis-cli 并看到该方法成功缓存了运行指定的 Time-To-Live
127.0.0.1:6379> TTL "myKeyName"
。
我正在尝试将 Google Cloud Platform 上的 App Engine 实例连接到 Memory Store Redis 实例。该实例是使用所有默认值创建的,并为我提供了一个 IP 地址和端口,我将其放入我的服务的 .properties 文件中。
附带说明一下,设置 spring.cache.redis.time-to-live 会更改整个应用程序中所有 redis 缓存键的默认 TTL。这在本地有效。
通过 Postman 对我的 Web 服务进行了几次调用后,我等了几分钟(内存存储有延迟),并看到我的密钥出现在内存存储“数据库中的密钥”位置。然后我再等 5 分钟,看看它们永远不会过期。
然后我导出了 Redis 内存存储数据库并通过 RDB 工具命令运行它,rdb --c protocol export.rdb
并得到了一些包含以下内容的时髦输出:
$8
EXPIREAT
$83
getMyMethodKey::TheResponseThatWasCached
$10
1573335619
*3
我发现 EXPIREAT 指的是“1573335619”,这是 11 月 9 日的 Unix 时间戳,从现在开始一个月。长话短说,我试图让我的 Redis 内存存储响应我的自定义默认生存时间,但它似乎没有在我的 yaml 文件中注册我的属性。
任何有关如何设置内存存储缓存键的 EXPIRE 属性的帮助将不胜感激。