StackExchange.Redis avec Azure Redis est unusably lente ou lance des erreurs de délai d'attente

Je me déplace tous mes Azure Dans le Rôle de cache de l'utilisation de Redis et a décidé d'utiliser le Redis Azure aperçu avec le StackExchange.Redis bibliothèque (https://github.com/StackExchange/StackExchange.Redis). J'ai écrit tout le code sans trop de problème, mais lors de l'exécution, il est absolument unusably lente et constante jette les erreurs de timeout (mon délai d'attente est de 15 secondes).

Voici le code pour la façon dont je suis en train de le Redis connexion et de l'utiliser pour des opérations simples:

    private static ConnectionMultiplexer _cacheService;
    private static IDatabase _database;
    private static object _lock = new object();

    private void Initialize()
    {
        if (_cacheService == null)
        {
            lock (_lock)
            {
                if (_cacheService == null)
                {
                    var options = new ConfigurationOptions();
                    options.EndPoints.Add("{my url}", 6380);
                    options.Ssl = true;
                    options.Password = "my password";
                    //needed for FLUSHDB command
                    options.AllowAdmin = true;

                    //necessary?
                    options.KeepAlive = 30;
                    options.ConnectTimeout = 15000;
                    options.SyncTimeout = 15000;

                    int database = 0;

                    _cacheService = ConnectionMultiplexer.Connect(options);
                    _database = _cacheService.GetDatabase(database);
                }
            }
        }

    }

    public void Set(string key, object data, TimeSpan? expiry = null)
    {
        if (_database != null)
        {
            _database.Set(key, data, expiry: expiry);
        }
    }

    public object Get(string key)
    {
        if (_database != null)
        {
            return _database.Get(key);
        }
        return null;
    }

Exécution de commandes très simples comme Get et Set souvent le temps ou prendre de 5 à 10 secondes. Il semble que la nature de nie tout le but de l'utiliser comme un cache si c'est beaucoup plus lent que de récupérer les données réelles à partir de ma base de données 🙂

Je fais quelque chose de faux?

Modifier: voici quelques stats que j'ai tiré à partir du serveur (à l'aide de Redis Desktop Manager) dans le cas qui nous éclaire sur quoi que ce soit.

Server
redis_version:2.8.12
redis_mode:standalone
os:Windows  
arch_bits:64
multiplexing_api:winsock_IOCP
gcc_version:0.0.0
process_id:2876

tcp_port:6379
uptime_in_seconds:109909
uptime_in_days:1
hz:10
lru_clock:16072421
config_file:C:\Resources\directory\xxxx.Kernel.localStore\redis_2092_port6379.conf

Clients
connected_clients:5
client_longest_output_list:0
client_biggest_input_buf:0
client_total_writes_outstanding:0
client_total_sent_bytes_outstanding:0
blocked_clients:0

Memory
used_memory:4256488
used_memory_human:4.06M
used_memory_rss:67108864
used_memory_rss_human:64.00M
used_memory_peak:5469760
used_memory_peak_human:5.22M
used_memory_lua:33792
mem_fragmentation_ratio:15.77
mem_allocator:dlmalloc-2.8

Persistence
loading:0
rdb_changes_since_last_save:72465
rdb_bgsave_in_progress:0
rdb_last_save_time:1408471440
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok

Stats
total_connections_received:25266
total_commands_processed:123389
instantaneous_ops_per_sec:10
bytes_received_per_sec:275
bytes_sent_per_sec:65
bytes_received_per_sec_human:

Edit 2: Voici l'extension des méthodes que j'utilise pour Get/Set -- ils sont des méthodes très simples qu'il suffit de tourner un objet en JSON et appel StringSet.

    public static object Get(this IDatabase cache, string key)
    {
        return DeserializeJson<object>(cache.StringGet(key));
    }

    public static void Set(this IDatabase cache, string key, object value, TimeSpan? expiry = null)
    {
        cache.StringSet(key, SerializeJson(value), expiry: expiry);
    }

Modifier 3: voici quelques exemple des messages d'erreur:

    A first chance exception of type 'System.TimeoutException' occurred in StackExchange.Redis.dll
    Timeout performing GET MyCachedList, inst: 11, queue: 1, qu=1, qs=0, qc=0, wr=0/1, in=0/0

    A first chance exception of type 'System.TimeoutException' occurred in StackExchange.Redis.dll
    Timeout performing GET MyCachedList, inst: 1, queue: 97, qu=0, qs=97, qc=0, wr=0/0, in=3568/0
  • Il n'y a pas Get ou Set méthodes sur StackExchange.Redis.IDatabase. Êtes-vous à l'aide de méthodes d'extension? Si oui, pouvez-vous poster le code pour ceux?
  • J'ai ajouté ma Get/Set méthodes d'extension. C'est assez simple. J'ai exclu le SerializeJson/DeserializeJson méthodes, mais si vous êtes curieux, ils utilisent la Newtonsoft de la bibliothèque.
  • Vous n'êtes pas seul, nous avons été aux prises avec cette situation et ont décidé de déplacer notre redis exemple d'une VM. Fatigué de lui...
  • Pouvez-vous partager ce que la taille du cache vous utilisez? Si vous utilisez un 250 MO de cache, pourriez-vous essayer à l'aide de l'option 1 go et voir si cela aide. Aussi, si vous seriez prêt à partager votre nom de cache, je peux regarder les journaux de notre serveur pour voir si cela peut jeter de la lumière sur le temps de latence élevé que vous voyez. Avant de ce fil, je n'avais pas entendu parler de la performance se plaint avec Azure Cache Redis. Va enquêter plus à notre fin et de revenir à vous ...
  • Bon à savoir, je ne suis pas le seul. Je peux me déplacer tout à ElastiCache au lieu
  • Oui, déplacé notre service de cloud computing et redis exemple d'une VM et je n'ai pas été plus heureux. J'ai collé avec Azure trop longtemps...
  • Je vais avoir des problème similaire, pourriez-vous s'il vous plaît avoir un coup d'oeil à ma question? stackoverflow.com/questions/29569997/...

InformationsquelleAutor user2719100 | 2014-08-21