Я использую Memcached в качестве системы кэширования и Spymemcached как клиент java для хранения моих объектов в кеше.
Memcached - информация кэширования, которая должна быть синхронизирована с DB
Memcached put()/delete() являются асинхронными.
Для конкретных объектов мне нужно, чтобы состояние в кэше отражало состояние БД.
Для этих объектов я собираюсь заблокировать Thread on the Future, возвращенный методом spyMemcachedClient.put(), чтобы убедиться, что кеш отражает текущий статус БД.
что-то вроде
changedObject -> block on Memcached.put() Future .. once it's finished -> writeToDB = every subsequent Memcached.get() object is guaranteed to be in synch with the DB
Если я не синхронизируются, и я попал в кэш достаточно быстро с spyMemcachedClient.get() может оказаться, что объект не отражает текущее состояние БД.
Мне интересно, правильно ли блокировать put() для нескольких объектов или если это значительно снизит производительность вашей системы кэширования?
Могу ли я сделать что-то подобное или я действительно не должен это делать?
Thanks
как я упомянул set/delete are aschronchronous ..поэтому я не понимаю, как удаление может решить эту проблему, если запрос запроса на кеш запускается до фактического удаления. поскольку они асинхронны. для меня это похоже на то, что ваше решение имеет ту же проблему, что и установка ключа другим объектом. – mickthompson 2010-11-25 13:41:28