我有一个使用 Oracle Coherence 和 DB 的直写式缓存。我正在缓存的 pojo 之一使用数据库序列作为其 ID。我使用 id 作为缓存键。
在将记录插入数据库之前,如果我没有 key (ID),如何插入新的缓存对象?
处理这个问题的最佳方法是什么?我是否应该使用带有直写式缓存的序列?
最佳答案
这确实是一个棘手的问题。 Coherence 使用键来唯一标识每个条目,并使用直写式或后写式缓存,Coherence 会将条目存储到底层数据存储中(通过 CacheStore 接口(interface))。显然,要将条目放入缓存中,它必须有一个 key ,只有随后该条目才会存储到(插入)数据库,此时您正在分配 key 。这绝对是一个先有鸡还是先有蛋的问题。
如果您使用的是 Oracle SEQUENCE 对象之类的东西,那么您可以在将条目放入缓存之前查询该对象,并使用该值作为键。
如果您使用触发器或其他“插入时分配”机制,那么我不确定如何解决直写或后写的问题。您可能需要先将数据插入数据库,然后再写入缓存,这看起来既复杂又冗余。
关于java - 使用数据库序列作为缓存键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23814345/