Если я правильно понимаю, каждый запрос API идет с идентификатором пользователя и клиентом. Каждый клиент может иметь несколько идентификаторов пользователей. Вы хотите оценить ограничение как на уровне клиента, так и на уровне идентификатора пользователя.
Вам потребуется использовать несколько ключей ABC_day, ABC_hour, ABC_userID1_hour, ABC_userID2_hour и т. Д., Чтобы подсчитать, сколько раз эти действия выполнялись. Проблема с этим подходом заключается в том, когда нужно сбросить эти счетчики. Поскольку memcached поддерживает только оператор приращения для числовых значений, нам необходимо закодировать эту информацию в самом ключе. Мы можем использовать ABC_2012_02_28 в качестве ключа для ограничения дневной ставки. В вашем коде просто создайте ключ, используя текущую дату, и увеличивайте ее. Когда день изменится, ваш код будет искать ABC_2012_02_29, который не существует и дает вам возможность создать новый ключ.
Альтернатива кешированию. Это кеш, похожий на memcached и поддерживающий протокол memcached, и он предоставляет сценарии "в кеше". Вместо того, чтобы создавать так много ключей, вы можете реализовать свой собственный объект «ограничения скорости», который сделает всю эту бухгалтерию за вас.
См. http://chakpak.blogspot.in/2011/09/rate-limitingquota-with-cacheismo.html для примера реализации ограничения скорости. Вы можете получить это отсюда. https://github.com/iamrohit/cacheismo.