Я ищу простой способ реализовать локальное хранилище памяти, которое можно использовать в экземпляре Azure .NET.
Я рассматривал совместное кэширование Azure и, кажется, поддерживает все мои требования:
Работайте как с веб-ролями, так и с рабочими ролями
Реализовать простой LRU
Хранить кешированные объекты в памяти (ОЗУ)
Позвольте мне определить размер кэша в процентах от общего объема оперативной памяти компьютера.
Хранить кеш на том же компьютере, что и веб-/рабочая роль (режим совместного размещения).
Разрешить мне доступ к одному и тому же кешу из нескольких доменов приложений, работающих на одном компьютере (веб-роли могут разделить мои обработчики на разные домены приложений)
Единственная проблема, связанная с совместным кэшированием Azure, заключается в том, что разные экземпляры обмениваются данными и пытаются совместно использовать свои кэши, а мне все это на самом деле не нужно.
Я хочу, чтобы у каждой машины был свой отдельный кэш в памяти. Когда я запрашиваю этот кеш, я не хочу тратить какое-либо время на выполнение сетевого запроса к кешам других экземпляров.
Конфигурация локального кэша?
Я видел параметр конфигурации в кэшировании Azure для включения локального кэша - но все еще кажется, что машины могут общаться друг с другом (например, во время промаха кеша). Эта конфигурация также требует ttlValue
и objectCount
, и я хочу, чтобы TTL был «навсегда», а количество объектов было «пока вы не заполните весь кеш». Такое ощущение, что указание maxInt
в обоих случаях кажется неправильным.
Как насчет простой статической переменной?
Когда я действительно думаю об этом, все это кэширование Azure кажется излишним для того, что мне нужно. В основном мне просто нужна статическая переменная на уровне приложения/роли.. за исключением того, что это не работает для требования № 6 (разные домены приложений). Требование № 4 также немного сложнее реализовать в этом случае.
Мемкэш
Я думаю, старый добрый memcached
делает именно то, что я хочу. Проблема в том, что я использую Azure как PaaS и не хочу администрировать свои собственные виртуальные машины. Я не думаю, что смогу установить memcached
на свои роли.. [ОБНОВЛЕНИЕ] Кажется, на моих ролях можно запустить memcached локально. Есть ли более элегантное «родное» решение без использования самого memcached?