我使用Oracle Coherence和DB进行了直写式缓存。我正在缓存的一个pojos使用DB序列作为其ID。我正在使用id作为缓存键。
如果在数据库中插入记录之前没有密钥(ID),如何插入新的缓存对象?
处理此问题的最佳方法是什么?我是否应该使用具有直写缓存的序列?
答案 0 :(得分:2)
这确实很棘手。 Coherence使用键来唯一标识每个条目,并使用直写或后写缓存,Coherence将条目存储到底层数据存储中(通过CacheStore接口)。显然,要将条目放入缓存中,它必须有一个密钥,然后才能将条目存储到(插入)数据库中,此时您将分配密钥。这绝对是一个鸡蛋问题。
如果您正在使用类似Oracle SEQUENCE对象的内容,那么您可以在将条目放入缓存之前查询该内容,并将该值用作密钥。
如果您正在使用触发器或其他"分配插入"机制,然后我不知道如何解决这个问题,无论是直写还是后写。您可能需要先将数据插入数据库,然后将其写入缓存,这看起来既复杂又多余。