在RDBMS中同时进行选择和记录创建

时间:2019-06-24 13:05:49

标签: java mysql concurrency rdbms

在创建URL缩短程序时,我有2个不同的客户端实例查询一个很小的url,如果找不到,则在rdbms中创建一条记录并将其分配给客户端发送的URL。我正在使用弹性搜索来查询微小的网址。我的问题是在两个不同实例之间的并发管理,当两者同时查询相同的微小url时(由于未找到),它将创建一个记录,其中相同的微小url分配给2个不同的url,这是错误的。如何避免这种情况?

致谢

1 个答案:

答案 0 :(得分:1)

您应该在代码部分考虑排他锁,以检查微小的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来检查微小网址的存在。

相关问题