Member 10926570 Ответов: 1

Нужна помощь для memcache


Привет,

Я работаю с нижеприведенным кодом для Memcache, но он не хранит никаких данных, пожалуйста, посоветуйте.

using (MemcachedClient client = new MemcachedClient())
            {
                client.Store(StoreMode.Set, "KeyData1", "KeyDataValue1");

                string value = client.Get<string>("KeyData1");

            }
        

            ///////////////////////////////////

            MemcachedClient mcCacheItems;
            MemcachedClientConfiguration memCacheconfig = new MemcachedClientConfiguration();
            {
                string host = "XXX";
                int port = 11211;
                memCacheconfig.AddServer(host, port);
                memCacheconfig.Protocol = MemcachedProtocol.Binary;

                mcCacheItems = new MemcachedClient(memCacheconfig);

                mcCacheItems.Store(StoreMode.Add, "KeyData2", "KeyDataValue2");
                string Value1 = Convert.ToString(mcCacheItems.Get("KeyData2"));
            }


Что я уже пробовал:

using (MemcachedClient client = new MemcachedClient())
            {
                client.Store(StoreMode.Set, "KeyData1", "KeyDataValue1");

                string value = client.Get<string>("KeyData1");

            }

1 Ответов

Рейтинг:
6

Richard MacCutchan

Вы создаете свое client объект внутри а using блок, поэтому, как только этот блок завершается, объект удаляется и больше не существует. То же самое верно и в отношении value объект. Вам нужно изучить предмет предметной области и времени жизни в .NET.


F-ES Sitecore

Он использует стороннюю библиотеку, которая хранит кэшированные данные на удаленном сервере, поэтому клиентский объект, который он имеет в своем блоке using, просто получает доступ\обновляет удаленное хранилище, оно не хранит данные в своем собственном состоянии, поэтому его можно использовать в блоке using. Подумайте об этом, как о размещении using вокруг SqlCommand или SqlConnection; объекты являются клиентами состояния сервера, а не самим состоянием.

Richard MacCutchan

Спасибо.

Member 10926570

Привет, Ричард ... спасибо, что ответил.Использование блока удалено, и код пытался подключить сервер memCached, но он выдает ошибку типа"не удалось подключиться к серверу IP:1121".

Много исследований было сделано по этому поводу, но получалась одна и та же ошибка.Я пытался подключиться как с локального сервера, так и с облачного...Не повезло.

Richard MacCutchan

Ну, это сетевая проблема, а не то, с чем мы можем помочь.

Member 10926570

Ok..do вы думаете, что это что-то связанное с конфигурацией memCached или только сетевая проблема.
Ранее подобный код работал и не был уверен, что произошло :)

Richard MacCutchan

Угадать невозможно. У нас нет никакой информации о вашей конфигурации.

Member 10926570

Я получил разрешение, и оно было связано с какой-то проблемой разрешения кэша.
Можете ли вы сказать мне, что приведенный ниже код отлично подходит для создания объектов для диспетчера кэша и будет работать для всех типов кэширования.

частный статический BaseCacheManager & lt;object> bcmCacheItems;
статический CacheManagerCacheTable()
{
// Извлеките параметр конфигурации кэша и создайте объект CacheManager.
ВАР cacheconfig в = ConfigurationBuilder.BuildConfiguration(settings =>
{
настройки.WithMemcachedCacheHandle("enyim.com/memcached"); / / здесь мы можем добавить несколько слоев также для кэширования...в настоящее время у нас есть один слой для memcached.
});
// Создание объекта BaseCacheManager на основе конфигурации.
bcmCacheItems = new BaseCacheManager & lt;object> (cacheConfig);
}

Richard MacCutchan

К сожалению, у меня нет опыта работы в этой библиотеке.