首页 > 解决方案 > RDBMS 中的并发选择和记录创建

问题描述

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

问候

标签: javamysqlconcurrencyrdbms

解决方案


您应该在检查微小 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 的存在。


推荐阅读