我想保留一个计数器,以查看有多少用户正在调用Web服务。Web服务几乎在一秒钟内完成。我可以在开始时增加一个变量,在结束时减少,但是这不是我想要的。
我需要在开始时增加变量,并在3秒后减少计数。我考虑过使用缓存过期,但是我每秒将有1000多个调用,并且我不想在服务器或内存上增加额外的负载。我也知道开火和忘记(hangfire)之类的方法可以工作,但是在那种情况下,我需要为每个请求在类中运行计时器。
同样,此方法必须是线程安全的。我最近使用Redis,所以如果存在这种功能,可以为我解决。我也喜欢它。
当前我要做的是:在删除日期超过2秒的记录开始之后,以创建日期的开头将记录写入数据库,然后运行该过程
但这会加载数据库,我无法提出一个简单的解决方案。
有什么想法吗?谢谢。
编辑:我做了下面的示例。继续按下增量按钮,大约90.000,您将在第1行中看到“未设置对象变量”错误:
Cache("x") = CInt(Cache("x").ToString) + 1
...
Imports Microsoft.VisualBasic
Imports System.Threading
Imports System.Threading.Tasks
Imports System.Web.Hosting
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub cmdIncrement_Click(sender As Object, e As EventArgs) Handles cmdIncrement.Click
For i As Integer = 1 To 10000
If Cache("x") Is Nothing Then Cache("x") = 0
Cache("x") = CInt(Cache("x").ToString) + 1
fireit()
Next
getvalue()
End Sub
Protected Sub cmdRefresh_Click(sender As Object, e As EventArgs) Handles cmdRefresh.Click
getvalue()
End Sub
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
getvalue()
End Sub
Protected Sub getvalue()
If Cache("x") Is Nothing Then Cache("x") = 0
Label1.Text = Cache("x").ToString & " - " & Now.ToString
End Sub
Protected Sub fireit()
HostingEnvironment.QueueBackgroundWorkItem(Function(token) DecrementMyVariable("aaa", token))
End Sub
Protected Shared Async Function DecrementMyVariable(text As String, token As CancellationToken) As Task(Of String)
Await Task.Delay(5000)
Dim x As Integer = CInt(HttpRuntime.Cache("x").ToString)
HttpRuntime.Cache("x") = x - 1
Return "aaa"
End Function
End Class
您只想将每次调用该服务的日期和时间存储到日志中。然后,您可以在给定的时间段内进行绘制。将详细信息保存到CSV文件中,您可以仅在Excel中查看数据。
您可以将其存储到数据库,然后查询数据库以查找最近三秒钟内的所有呼叫。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句