pricing porta example cache azure stackexchange.redis azure-redis-cache

azure - porta - Eliminar/Eliminar todo/un elemento de StackExchange.Redis caché



redis cache example (3)

Ambas respuestas de @Rasi y @Marc Gravell contienen piezas de código necesarias. En base a lo anterior, aquí está el fragmento de trabajo suponiendo que solo hay 1 servidor :

Necesita conectarse a redis con allowAdmin=true , una forma de obtener tales opciones es asignar AllowAdmin a la cadena ya analizada:

var options = ConfigurationOptions.Parse("server:6379"); options.AllowAdmin = true; var redis = ConnectionMultiplexer.Connect(options);

Luego para purgar todas las bases de datos:

var endpoints = redis.GetEndPoints(); var server = redis.GetServer(endpoints[0]); server.FlushAllDatabases();

Arriba funcionará en cualquier despliegue de redis, no solo en Azure.

Estoy utilizando el cliente StackExchange.Redis con Azure Redis Cache Service. Aquí está mi clase,

public class RedisCacheService : ICacheService { private readonly ISettings _settings; private readonly IDatabase _cache; public RedisCacheService(ISettings settings) { _settings = settings; var connectionMultiplexer = ConnectionMultiplexer.Connect(settings.RedisConnection); _cache = connectionMultiplexer.GetDatabase(); } public bool Exists(string key) { return _cache.KeyExists(key); } public void Save(string key, string value) { var ts = TimeSpan.FromMinutes(_settings.CacheTimeout); _cache.StringSet(key, value, ts); } public string Get(string key) { return _cache.StringGet(key); } public void Remove(string key) { // How to remove one } public void Clear() { // How to remove all } }

Actualización: De la ayuda de Marc, esta es mi clase final

public class RedisCacheService : ICacheService { private readonly ISettings _settings; private readonly IDatabase _cache; private static ConnectionMultiplexer _connectionMultiplexer; static RedisCacheService() { var connection = ConfigurationManager.AppSettings["RedisConnection"]; _connectionMultiplexer = ConnectionMultiplexer.Connect(connection); } public RedisCacheService(ISettings settings) { _settings = settings; _cache = _connectionMultiplexer.GetDatabase(); } public bool Exists(string key) { return _cache.KeyExists(key); } public void Save(string key, string value) { var ts = TimeSpan.FromMinutes(_settings.CacheTimeout); _cache.StringSet(key, value, ts); } public string Get(string key) { return _cache.StringGet(key); } public void Remove(string key) { _cache.KeyDelete(key); } public void Clear() { var endpoints = _connectionMultiplexer.GetEndPoints(true); foreach (var endpoint in endpoints) { var server = _connectionMultiplexer.GetServer(endpoint); server.FlushAllDatabases(); } } }

Ahora no sé cómo eliminar todos los elementos o elementos individuales de la memoria caché de redis.


No pude lavar la base de datos en Azure Redis Cache, recibí este error:

Esta operación no está disponible a menos que el modo de administración esté habilitado: FLUSHDB

En su lugar, repita todas las teclas para eliminar:

var endpoints = connectionMultiplexer.GetEndPoints(); var server = connectionMultiplexer.GetServer(endpoints.First()); //FlushDatabase didn''t work for me: got error admin mode not enabled error //server.FlushDatabase(); var keys = server.Keys(); foreach (var key in keys) { Console.WriteLine("Removing Key {0} from cache", key.ToString()); _cache.KeyDelete(key); }


Para eliminar un solo artículo:

_cache.KeyDelete(key);

Eliminar todo implica el FLUSHDB o FLUSHALL redis; ambos están disponibles en StackExchange.Redis; pero, por los motivos que se analizan aquí , no están en la API de IDatabase (porque: afectan a los servidores, no a las bases de datos lógicas).

Según el "Entonces, ¿cómo los uso?" en esa página:

server.FlushDatabase(); // to wipe a single database, 0 by default server.FlushAllDatabases(); // to wipe all databases

(muy posiblemente después de usar GetEndpoints() en el multiplexor)