Mise à jour atomique dans MS Velocity
Question
Est-ce que les mises à jour atomiques support de vitesse côté serveur? Je suis en train de voir si je peux le port du code (basé sur memcached) qui a mis en œuvre un tampon circulaire basé sur le fonctionnement de INCR Memcache.
La solution
Je ne peux pas dire que je suis assez familier avec memcached savoir exactement ce que tu veux dire, mais je suppose qu'il implique le verrouillage d'un élément mis en cache de sorte qu'un client peut mettre à jour, qui est supporté par la vitesse à travers le GetAndLock et méthodes de PutAndUnlock.
Edit: OK, maintenant je comprends ce que tu veux dire, non, je ne l'ai pas vu quelque chose comme ça dans la vitesse. Mais vous pouvez l'écrire comme une méthode d'extension par exemple
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
Votre utilisation deviendrait alors:
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