【发布时间】:2014-07-26 20:44:40
【问题描述】:
我正在尝试为我网站上的项目生成唯一的短网址。例如,用户可能会添加一个项目,结果 url 将类似于:
http://example.com/item/abc
我希望唯一标识符由 3 或 4 个字符组成,其中字符是字母和数字。我认为与其随机生成字符串然后确保它们是唯一的并且尚未使用过,不如我可以提前生成它们并将它们存储在数据库中。然后,当用户添加一个项目时,我可以从数据库中选择下一个缩短的 url 字符串并将其分配给该项目。这是解决这个问题的好方法吗?有没有更好的方法?我认为这会使它变得更简单,因为它们已经生成了。但是,我也可以看到一个潜在的竞争问题,两个项目被分配了相同的识别字符串,我不确定LOCK TABLES 是否是最好的解决方案。
另外,如果不使用LOCK TABLES,这样的东西能否保证 MySQL 中没有竞争条件?
update ids set item_id=1 WHERE id=(SELECT id FROM ids WHERE item_id IS NULL LIMIT 1);
然后我可以为 id 为 1 的项目选择 id 吗?在该查询期间,是否没有其他查询能够声明它?
【问题讨论】:
-
如果您将项目存储在数据库中,它们可能具有某种 id,对吗?你不能从那个 id 生成一个三四个字符的字符串,比如
1->aaa,2->aab, ... ? -
@PoByBolek,是的,我可以。我只是希望字符串不那么可预测。不一定按顺序排列。
-
@Swapnil,谢谢!这是一个很好的资源。