L'acquisition de verrouillage lors de la mise à jour d'un Redis clé/valeur

Je suis en utilisant AcquireLock méthode de ServiceStack Redis quand la mise à jour et l'obtention de la clé/valeur comme ceci:

public virtual void Set(string key, T entity)
{
    using (var client = ClientManager.GetClient())
    {
        using (client.AcquireLock(key + ":locked", DefaultLockingTimeout, DefaultLockExpire))
        {
            client.Set(key, entity);
        }
    }
}

Je l'ai étendu AcqurieLock méthode d'accepter paramètre supplémentaire pour la date d'expiration de la clé de verrouillage. Alors je me demandais que si j'ai besoin d'AcquireLock à tous ou pas? Ma classe utilise AcquireLock dans chaque opération, comme Obtenir des<>, GetAll<>, ExpireAt, SetAll<>, etc..

Mais cette approche ne fonctionne pas à chaque fois. Par exemple, si l'exploitation dans la serrure déclenche une exception, puis sur la touche reste verrouillé. Pour cette situation, j'ai ajouté DefaultLockExpire paramètre AcquireLock méthode à expiration à la fin du "verrouillé".

Est-il une meilleure solution, ou quand avons-nous besoin de l'acquisition de verrous comme le "verrouillage" des blocs multi-thread de programmation.

OriginalL'auteur oruchreis | 2013-02-20