我有一个在 Glassfish 上运行的消息驱动 bean。它每秒接收数百条消息。收到消息后,需要读取JDBC数据库中的值并进行处理。
但是,数据库中的值每天只会更新一次或更少。因此,MDB 将读取的内容大部分时间都是一致的。那么,有没有什么好办法可以将内容缓存到内存中以提高性能呢?
更新:是否可以在 Glassfish 中为 MDB 配置内存数据库 JDBC 连接池?
我有一个在 Glassfish 上运行的消息驱动 bean。它每秒接收数百条消息。收到消息后,需要读取JDBC数据库中的值并进行处理。
但是,数据库中的值每天只会更新一次或更少。因此,MDB 将读取的内容大部分时间都是一致的。那么,有没有什么好办法可以将内容缓存到内存中以提高性能呢?
更新:是否可以在 Glassfish 中为 MDB 配置内存数据库 JDBC 连接池?
如果您认为使用第三方解决方案(如memcached)会过大,您可能会受到身份映射模式的启发并实现自己的缓存机制(使用自己的过期策略)。
最明显的答案是将表定义为 MEMORY 表类型。如果底层硬件不容易崩溃并且操作系统稳定并且连接了UPS,您可能需要考虑这一点。它还取决于自上次备份失败时丢失许多事务的后果。但在性能方面,这是闪电般的速度。可以在此处找到有关 MySQL 的更多信息。(YMMV)
我已经以这种方式实现了多个表,它对我来说非常有用。
您可以使用一个简单的基于SoftReference HashMap 的缓存。这是完整的实现示例SoftReference Cache此外,您可以定期清除完整的 Map 以引入新数据。
或者,如果您可以使用 3rd 方库,您可以使用作为 Apache Collections 的一部分提供的ReferenceMap 。