如何使用redisson write-through缓存策略和自动生成的pk

jbose2ul  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(302)

我计划使用redis和redison作为java应用程序和postgresql数据库之间的缓存层。我有一个名为nodes的表,如下所示:

CREATE TABLE nodes
(
node_id bigint GENERATED BY DEFAULT AS IDENTITY(START WITH 1 INCREMENT BY 1),
node_name varchar(100) NOT NULL,
PRIMARY KEY (node_id)
)

我想使用redisson rmap持久性来缓存这个结构。我的目标是让rmap看起来像这样:

Rmap<Integer, Node>

其中键是pk,值是节点本身。
我想通过使用maploader和mapwriter,使用read-through和write-though策略来缓存这个rmap。
然后,我想要一个java方法,它应该创建并持久化一个节点。

public void createNode(String nodeName) {
  Node node = new Node();
  node.setName(nodeName);

  // how can I put elements in the rmap since, 
  // the PK will be available after the INSERT statement will run?
  rmap.put(?, node);
}

问题来了。既然pk是从postgres自动生成的,那么我如何使用rmapwriter插入节点呢?因为,为了将元素放入rmap中,我需要密钥,直到insert语句运行,我才拥有密钥?

cbwuti44

cbwuti441#

您可以使用prepared语句从postgres获取生成的键。

ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS) ;
   ps.execute();
   ResultSet rs = ps.getGeneratedKeys();

相关问题