java - RDBMS 中的并发选择和记录创建
问题描述
在创建 url shortner 时,我有 2 个不同的客户端实例查询一个小 url,如果没有找到,则在 rdbms 中创建一条记录并将其分配给客户端发送的 URL。我正在使用弹性搜索来查询微小的 url。我的问题是跨两个不同实例的并发管理,当两者同时查询相同的小 url 并且由于它未找到时,它将创建一个记录,并将相同的小 url 分配给 2 个不同的 url,这是错误的。如何避免这种情况?
问候
解决方案
您应该在检查微小 url 存在的代码部分考虑排他锁。例如:
private final static Object LOCK = new Object();//it should be defined as a shared variable between threads.
synchronize(LOCK) {
//check if tiny url exists or not.
}
或者,您可以使用 Redis 之类的内存数据库而不是 Elasticsearch 来检查微小 url 的存在。
推荐阅读
- postgresql - PostgreSQL - 使用 CURSORS 将 2 个 TABLES 的数量“分配”/“隔离”到第三个 TABLE
- bash - 是否可以通过命令(如 env)“转储”所有 bash 特殊变量?
- macos - Mac:从 Internet 安装应用程序有一个例外
- c - 如何安全地将一组 C 函数实现为自初始化库?
- html - 为什么所有内容都是 https 时会出现混合内容错误?
- python - 我想使用 python 计算文本文件中的回文数。但是我写的这个程序给了我 0 而不是 2
- javascript - 使用 getLinkUrl(offset) 的 Google Apps 脚本问题
- hive - 尝试将 csv 从一个目录复制到另一个目录时出现 HDFS“没有这样的文件或目录”错误
- c - 在中缀表达式中反转运算符优先级
- android - 来自 SQLite 查询的 CursorIndexOutOfBoundsException