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