coldfusion - CFLOCK:使用什么范围?
问题描述
我有一个为下一个事件生成令牌的函数。我们称之为 eventID。这是数字,但由于业务原因存储为 varchar。可以从应用程序中的多个位置调用此函数,并且为了避免竞争条件以避免为不同的用户生成相同的 ID,添加了应用程序范围锁。但在少数情况下,会为 2 个不同的事件生成相同的 ID。
<cffunction name="getEventID" returntype="string">
<cfset var newID = "">
<cflock scope="Application" timeout="5" throwontimeout="true">
<cfquery name="qry" datasource="#DSN#">
SELECT TOP 1 CONVERT(int, eventID) AS eventID
FROM events WHERE ISNUMERIC(eventID) = 1
ORDER BY CONVERT(int, eventID) DESC
</cfquery>
<cfset newID = qry.eventID + 1>
</cflock>
<cfreturn newID>
</cffunction>
CFLOCK的实现有问题吗?
解决方案
推荐阅读
- sql - 通过内部窗口功能排序如何工作?
- c# - 父 WPF 之上的子 WPF (MvvmCross)
- azure-synapse - 无法从 Azure Synapse 连接 Azure 权限
- laravel - 在远程 ubuntu/nginx 服务器下安装 laravel 应用程序出现 404 错误
- apache-kafka - 用于大规模点击流数据的 Prometheus 用例
- unity3d - 可序列化对象的 Unity PropertyDrawer
- perl - Perl对字符串中不同字符的split函数的使用
- c++ - 有效地动态存储具有许多零的矩阵
- python - 我有一个名为 sampledata 的文件夹,里面有 4 个 excel 文件。我想读取每个 excel 文件的内容
- python - 当索引张量是不同维度时,如何向量化索引和计算?