Как увеличить размер ключа в Memcached - PullRequest
0 голосов
/ 26 июля 2010

Задача

Я получаю сообщение об ошибке:

key too long "rack:session:BAh7...."
/usr/local/ruby-enterprise/lib/ruby/gems/1.8/gems/memcache-client-1.8.5/lib/memcache.rb:703:in `get_server_for_key'
/usr/local/ruby-enterprise/lib/ruby/gems/1.8/gems/memcache-client-1.8.5/lib/memcache.rb:920:in `request_setup'
/usr/local/ruby-enterprise/lib/ruby/gems/1.8/gems/memcache-client-1.8.5/lib/memcache.rb:885:in `with_server'

Когда я смотрел на memcache-client-1.8.5 / lib / memcache.rb: 703

def get_server_for_key(key, options = {})
  raise ArgumentError, "illegal character in key #{key.inspect}" if key =~ /\s/
  raise ArgumentError, "key too long #{key.inspect}" if key.length > 250
  ...
end

Также в соответствии с http://code.google.com/p/memcached/wiki/FAQ#What_is_the_maxiumum_key_length?_(250_bytes) максимальная длина составляет 250 байтов.

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

Вопрос 1: Можно ли удалить оператор из клиента memcache?

Вопрос 2: Есть ли способ уменьшить размер ключа в рельсах? Я использую ниже в моей продукции. RB

config.action_controller.session_store = :mem_cache_store  

Ответы [ 4 ]

4 голосов
/ 10 ноября 2010

Если ваши ключи слишком длинные, хешируйте каждый ключ перед сохранением в Rails.cache

Примерно так:

def hash_key(string)
  Digest::SHA1.hexdigest(string)
end
2 голосов
/ 21 февраля 2011

Вы почти наверняка видите это, потому что вы переходите из магазина cookie в memcached. В вашем браузере все еще есть старый файл cookie сеанса с длинным идентификатором. Вам нужно удалить этот cookie из вашего браузера, и проблема исчезнет.

Если вы переключаетесь из магазина cookie в memcached на производственном сайте, это будет проблемой, потому что вы не контролируете браузеры своего пользователя. Возможно, вам потребуется изменить ключ сеанса, чтобы избежать проблем в этом случае.

1 голос
/ 26 июля 2010
key too long "rack:session:BAh7...."

Вы выкидываете весь сеанс в кеш как ключ? Если вы добавляете данные в кеш вручную, отправьте этот код.

0 голосов
/ 26 июля 2010

Похоже, что это ограничение накладывается самой memcached, а не Ruby, поэтому удаление этого утверждения вам не поможет. Документация memcached предполагает, что если ваш размер ключа больше 250 байт, вы, вероятно, все равно что-то делаете не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...