我们有一个 Java 应用程序,它缓存来自 Postgres 数据库的所有信息(7 个表中约 5000 个条目)。问题是数据库是在外部更新的,缓存需要知道什么时候失效。需要注意的是,我们并不期望有很多插入/更新。
Postgres 通过 Listen/Notify 和 Trigger on insert/update 提供了一个很好的解决方案;唯一的问题是 Postgres 的 JDBC 驱动程序 does not know to listen on notifications异步并需要轮询,还没有找到从 Java 异步监听的解决方案。
问题是在这种情况下如何设计缓存更新触发,以达到最佳性能并限制缓存不一致的时间量。上面描述的机制是否值得(为每个表创建触发器,然后为监听/通知和轮询通知分开 channel )或者创建这样的查询会很快 select * from table where update_timestamp > 吗?
并且给定的参数是最新缓存更新时间戳的参数(假设该列已编入索引)。
简单来说,轮询通知/监听值得还是轮询查询更快?
最佳答案
这取决于通知频率。如果您每秒收到 100 个通知,则它可能比轮询“慢”(=需要更多 CPU 资源),因为您有更多的操作系统上下文切换。
关于java - 缓存失效 Postgres NOTIFY 与轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22352173/