我正在寻找创建一个简单的Web服务,在轮询时返回一个唯一的id。 ID必须是人类可读的(即不是guid,可能是000023格式),并且每次调用时都会增加1。
现在我需要考虑它可能同时被两个不同的应用程序调用,我不希望它为每个应用程序返回相同的数字。
除了使用数据库存储当前号码之外还有其他选择吗?
以前这已经完成了,如果有的话,任何人都可以指点我的源代码。
谢谢,
尼尔
答案 0 :(得分:1)
使用关键部分代码段通过一段代码一次控制一个流程。您可以使用lock
statement或稍微更硬一点并直接使用互斥锁来执行此操作。这样做可确保您为每个呼叫者返回不同的号码。
至于存储它,使用数据库对于返回自动递增的数字来说是过度的 - 尽管SQLServer和Oracle(很可能是其他人但我不能说它们)都提供了自动递增键功能,所以你可以拥有调用的Web服务,在数据库表中生成一个新条目,返回密钥,调用者可以使用该数字作为返回该记录的密钥(如果您在初始调用后保存更多数据)。这样你也让数据库担心生成唯一数字,你不必担心它的细节 - 虽然如果你还没有数据库,这不是一个好的选择。
另一种选择是将它存储在本地文件中,尽管读取文件,增加数量并将其写回来都很昂贵,所有这些都在关键部分内。
答案 1 :(得分:0)
您可以使用文件。
伪代码:
if (!locked('counter.txt'))
counter = read('counter.txt')
else
wait
startAgain
lock('counter.txt')
counter++
print counter
write('counter.txt', counter)
unlock('counter.txt)