Example #1
0
 /// <summary>
 /// Obtiene el valor de un objeto previamente almacenado en el Sistema de Almacenamiento en Caché.
 /// </summary>
 /// <typeparam name="T">Tipo de dato para el objeto devuelto.</typeparam>
 /// <param name="key">Llave, en forma de cadena, del elemento.</param>
 /// <param name="version">Versión asignada al objeto en la caché.</param>
 /// <returns>El objeto resultante, o null en caso de no existir</returns>
 public T Get <T>(string key, out IDataCacheObjectVersion version)
 {
     using (var cache = CreateConnection())
     {
         version = new RedisDataCacheObjectVersion();
         var db     = cache.GetDatabase();
         var strObj = (string)db.StringGet(ApplicationPrefix + key);
         return(string.IsNullOrEmpty(strObj) ? default(T) : strObj.Deserialize <T>(SerializationFormat));
     }
 }
Example #2
0
 /// <summary>
 /// Libera el espacio ocupado por un objeto en el Sistema de Almacenamiento en Caché, eliminándolo del mismo.
 /// </summary>
 /// <param name="key">Llave, en forma de cadena, del elemento.</param>
 /// <param name="version">Versión esperada del objeto a eliminar. La ejecución falla si la versión del objeto almacenado es diferente</param>
 /// <returns>True si la operación se pudo completar (el objeto se eliminó)</returns>
 public bool Remove(string key, IDataCacheObjectVersion version)
 {
     if (version == null)
     {
         return(Remove(key));
     }
     using (var cache = CreateConnection())
     {
         var db          = cache.GetDatabase();
         var transaction = db.CreateTransaction();
         transaction.KeyDeleteAsync(ApplicationPrefix + key);
         if (!transaction.Execute())
         {
             throw new IncorrectObjectVersionException("Versión incorrecta del Objeto.");
         }
         return(true);
     }
 }
Example #3
0
 /// <summary>
 /// Añade o sobreescribe un valor en el Sistema de Almacenamiento en Caché.
 /// En caso de existir un objeto asignato a la llave, verifica su versión contra la que se pasa como argumento. Si estas no son inguales, se lanza una excepción.
 /// </summary>
 /// <param name="key">Llave, en forma de cadena, del elemento.</param>
 /// <param name="value">Valor a insertar/sobreescribir</param>
 /// <param name="version">Versión esperada del objeto a eliminar. La ejecución falla si la versión del objeto almacenado es diferente</param>
 /// <param name="timeout">Tiempo de vencimiento del objeto en Caché</param>
 /// <returns>La información de versión del Objeto recien creado/sobreescrito.</returns>
 public IDataCacheObjectVersion Put(string key, object value, IDataCacheObjectVersion version, TimeSpan timeout)
 {
     if (version == null)
     {
         return(Put(key, value));
     }
     using (var cache = CreateConnection())
     {
         var db          = cache.GetDatabase();
         var transaction = db.CreateTransaction();
         transaction.StringSetAsync(ApplicationPrefix + key, value.Serialize(SerializationFormat), timeout);
         if (!transaction.Execute())
         {
             throw new IncorrectObjectVersionException("Versión incorrecta del Objeto.");
         }
         return(new RedisDataCacheObjectVersion());
     }
 }
Example #4
0
 /// <summary>
 /// Añade o sobreescribe un valor en el Sistema de Almacenamiento en Caché, que esté asociado a un grupo.
 /// En caso de existir un objeto asignato a la llave, verifica su versión contra la que se pasa como argumento. Si estas no son inguales, se lanza una excepción.
 /// </summary>
 /// <param name="key">Llave, en forma de cadena, del elemento.</param>
 /// <param name="value">Valor a insertar/sobreescribir</param>
 /// <param name="group">Grupo al que está asociado el elemento.</param>
 /// <param name="version">Versión esperada del objeto a eliminar. La ejecución falla si la versión del objeto almacenado es diferente</param>
 /// <param name="timeout">Tiempo de vencimiento de los objetos pertenecientes al grupo. Los objetos existentes en el grupo actualizaran su tiempo de vencimiento a este valor</param>
 /// <returns>La información de versión del Objeto recien creado/sobreescrito.</returns>
 public IDataCacheObjectVersion Put(string key, object value, string @group, IDataCacheObjectVersion version, TimeSpan timeout)
 {
     if (version == null)
     {
         return(Put(key, value, group, timeout));
     }
     using (var cache = CreateConnection())
     {
         var db          = cache.GetDatabase();
         var transaction = db.CreateTransaction();
         transaction.SetAddAsync(ApplicationPrefix + group, key);
         transaction.StringSetAsync(ApplicationPrefix + group + ":" + key, value.Serialize(SerializationFormat));
         if (!transaction.Execute())
         {
             throw new IncorrectObjectVersionException("Versión incorrecta del Objeto.");
         }
         var list = db.SetMembers(ApplicationPrefix + group);
         foreach (var redisKey in list)
         {
             db.KeyExpire(ApplicationPrefix + group + ":" + redisKey, timeout);
         }
         return(new RedisDataCacheObjectVersion());
     }
 }