Атомное обновление в скорости MS - PullRequest
0 голосов
/ 14 октября 2009

Поддерживает ли Velocity атомарные обновления на стороне сервера? Я пытаюсь выяснить, могу ли я портировать некоторый код (на основе memcached), который реализовал кольцевой буфер на основе операции memcache INCR.

1 Ответ

3 голосов
/ 14 октября 2009

Я не могу сказать, что я достаточно знаком с memcached, чтобы точно знать , что вы имеете в виду, но я предполагаю, что это включает блокировку кэшированного элемента, чтобы один клиент мог его обновить, что поддерживается Velocity с помощью методов GetAndLock и PutAndUnlock .

Редактировать: ОК, теперь я понимаю, что вы имеете в виду, нет, я не видел ничего подобного в Velocity. Но вы можете написать это как метод расширения, например

Imports System.Runtime.CompilerServices

Public Module VelocityExtensions

<Extension()> _
Public Sub Increment(ByVal cache As Microsoft.Data.Caching.DataCache, ByVal itemKey As String)

    Dim cachedInteger As Integer
    Dim cacheLockHandle As DataCacheLockHandle

    cachedInteger = DirectCast(cache.GetAndLock(itemKey, New TimeSpan(0, 0, 5), cacheLockHandle), Integer)

    cachedInteger += 1

    cache.PutAndUnlock(itemKey, cachedInteger, cacheLockHandle)

End Sub

<Extension()> _
Public Sub Decrement(ByVal cache As Microsoft.Data.Caching.DataCache, ByVal itemKey As String)

    Dim cachedInteger As Integer
    Dim cacheLockHandle As DataCacheLockHandle

    cachedInteger = DirectCast(cache.GetAndLock(itemKey, New TimeSpan(0, 0, 5), cacheLockHandle), Integer)

    cachedInteger -= 1

    cache.PutAndUnlock(itemKey, cachedInteger, cacheLockHandle)

End Sub

End Module

Тогда ваше использование станет:

Imports VelocityExtensions
Imports Microsoft.Data.Caching

Partial Public Class _Default
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim myCache As DataCache
    Dim factory As DataCacheFactory

    myCache = factory.GetCache("MyCacheName")

    myCache.Increment("MyInteger")

End Sub

End Class
...