How do I implement an object cache which takes data from the database and cache it in memory in a clustered environment (with at least 2 servers) such that information from the database is only read _once_?

I initially thought of using an entity bean for each PK but each servers need to read the information once such that if there are n servers in a cluster, up to n trips to the database need to be made.