Ruby on rails 如何在Memcached中增加密钥大小 问题
我得到了一个错误:Ruby on rails 如何在Memcached中增加密钥大小 问题,ruby-on-rails,caching,memcached,Ruby On Rails,Caching,Memcached,我得到了一个错误: 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
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
此外,最大长度为250字节
因为这是生产过程,很难复制这个错误,所以我想我可以在这里问一下,以前是否有人遇到过同样的问题
问题1:我可以从memcache客户端删除该语句吗?
问题2:有没有办法减少rails中的键大小?我在制作中使用了下面的.rb
这个限制似乎是由memcached本身强加的,而不是由Ruby强加的,所以删除该语句对您没有帮助。memcached文档表明,如果您的密钥大小超过250字节,那么您可能是做错了什么
是否将整个会话作为密钥转储到缓存中?如果要手动添加到缓存,请发布该代码。如果密钥太长,请在将其存储到Rails.cache之前对每个密钥进行散列 大概是这样的:
def hash_key(string)
Digest::SHA1.hexdigest(string)
end
您几乎肯定会看到这一点,因为您正在从cookie存储切换到memcached。您的浏览器仍然有旧会话cookie,ID很长。您需要从浏览器中删除此cookie,问题就会消失
如果您在生产站点上从cookie存储切换到memcached,这将是一个问题,因为您无法控制用户的浏览器。在这种情况下,您可能需要更改会话密钥以避免出现问题。不要手动添加到缓存中。我在production.rb config.action\u controller.session\u store=:mem\u cache\u store中将rails配置为使用memchaced,只是将session\u store改为使用:mem\u cached\u store而不是cookie。config.action\u controller.session\u store=:mem\u cache\u store您应该注意冲突。确实如此。正如@rbajales所说,您不能只是散列键,因为这会引入冲突,最终会覆盖其他键并检索不正确的值。
key too long "rack:session:BAh7...."
def hash_key(string)
Digest::SHA1.hexdigest(string)
end