В документации говоритсяИспользование MemoryCacheHandle с RedisCacheBackplane но без RedisCacheHandle
/// The cache manager must have at least one cache handle configured with <see cref="CacheHandleConfiguration.IsBackplaneSource"/> set to <c>true</c>.
/// Usually this is the redis cache handle, if configured. It should be the distributed and bottom most cache handle.
Я знаю, как сделать это с RedisCacheHandle, так как это дает, как, например, на веб-сайте Cachemanager в
var cache = CacheFactory.Build<int>("myCache", settings =>
{
settings
.WithSystemRuntimeCacheHandle("inProcessCache")
.And
.WithRedisConfiguration("redis", config =>
{
config.WithAllowAdmin()
.WithDatabase(0)
.WithEndpoint("localhost", 6379);
})
.WithMaxRetries(1000)
.WithRetryTimeout(100)
.WithRedisBackplane("redis")
.WithRedisCacheHandle("redis", true);
});
Проблема в том, я не хотите использовать Redis в качестве ресурса кэша; Я просто хочу создать распределенный кеш с помощью механизма Redis Pub/Sub. Согласно моей отладке через код, используя функцию Redis Backplane, я могу отправлять сообщения и получать сообщения от Redis. Так почему бы не использовать RedisCacheHandle и вместо этого использовать SystemRuntimeCacheHandle?
Итак, мое ожидание было преуспевающим выполнение со следующей конфигурацией кэша
var cache = CacheFactory.Build<int>("myCache", settings =>
{
settings
.WithSystemRuntimeCacheHandle("inProcessCache")
.And
.WithRedisConfiguration("redis", config =>
{
config.WithAllowAdmin()
.WithDatabase(0)
.WithEndpoint("localhost", 6379);
})
.WithMaxRetries(1000)
.WithRetryTimeout(100)
.WithRedisBackplane("redis")
.WithSystemRuntimeCacheHandle("inProcessCache", true);
});
Но это не работает. Не могли бы вы показать мне решение? Что я делаю не так? Или, Eventhough это написано в документации, как
... Обычно это Redis кэш ручки ...
есть ли способ использовать функцию синхронизации кэша без RedisCacheHandle?
https://github.com/MichaCo/CacheManager/issues/111
Я уважаю ваше предложение и размещаю комментарии здесь, а не github. На самом деле шаблон заставляет меня использовать «Source Backplane Source». Ну, это означает, что этот источник является «Источником» всех остальных: это означает «Главный источник» среди всех остальных ручек кэша. Вот почему Redis Cache Handle отлично работает в качестве источника объединительной платы: поскольку это один кэш, расположенный по адресу: адрес. С другой стороны, MemoryCacheHandle не может справиться с этим заданием. Зачем? Это потому, что MemoryCacheHandle создает новый MemoryCache каждый раз. Проверьте конструктор класса MemoryCacheHandle. –
rebulanyum
Итак, @michac, рассмотрите 2 MemoryCacheHandle каждый на другом компьютере. Не удается ли синхронизировать их с помощью Redis pub/sub? Один - мастер, а другой - раб. Было бы здорово. И в качестве архитектуры это тоже должно быть возможно. Но похоже, что ваша библиотека не поддерживает этот способ. – rebulanyum
Теперь это больше похоже на запрос функции. Давайте опубликуем это на gihtub со ссылкой на это. Я все еще не уверен на 100%, что вы обычно подразумеваете при синхронизации? На самом деле копировать новые предметы или просто удалять те, которые были удалены и т. Д.? Копировать данные и имитировать распределенный кеш составляет 100%, а не способ, потому что именно поэтому такие вещи, как Redis, существуют;) – MichaC