java - 如何通过自动生成的 PK 使用 Redisson 直写缓存策略
问题描述
我计划将 Redis 与 Redisson 一起用作我的 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-trhough 策略来缓存这个 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 我需要密钥,在插入语句运行之前我没有该密钥?
解决方案
您可以使用准备好的语句从 postgres 获取生成的密钥。
ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS) ;
ps.execute();
ResultSet rs = ps.getGeneratedKeys();
推荐阅读
- python - PyOpenGl Pygame 窗口在运行时冻结
- c# - 输入 10 行 3 列的二维数组
- django - Django:如何覆盖默认错误消息?
- ionic3 - 我在传递 URL 时在 ionic InAppBrowser 中遇到错误
- stripe-payments - 如何在代表关联账户发送的发票上收取申请费
- angular - 以角度反应形式验证重复项
- datastax-enterprise - 无法在 DSE 中启用 Alwayson sql
- python - 根据其他列表值查找替换列表值
- neo4j - 你如何在 Neo4j 上显示一些节点的字段?
- node.js - 安装 napi-js 或 @adonis/cli 时出现 NPM 错误