java - 缓存失效 Postgres NOTIFY 与轮询

标签 java postgresql caching jdbc

我们有一个 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/

相关文章:

java - 如何使用Jboss Tools Eclipse插件 "hot"在Jboss中部署war依赖?

java - 使用 IceFaces 进行 Ajax 样式加载

regex - PostgreSQL 正则表达式不是那么非贪婪

java - Apache Ignite 2.7.0 在 Grid Future Adapter.get0() 上花费了大量时间

java - MESI协议(protocol)-INVALID如何处理?

caching - "New version available"带有 service worker 和 sw-precache

java - grails 3.1.4 - create-app 找不到网络配置文件

java - 从 SQLite 从游标读取数据时发生致命异常

node.js - Sequelize 返回错误结果

sql - Postgres 是否支持嵌套或自治事务?