/// <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)); } }
/// <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); } }
/// <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()); } }
/// <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()); } }