我正在尝试将整个response.body保存到memcached。我是这样做的:
Rails.cache.write(request.headers['HTTP_X_MEMCACHED_KEY'], response.body)
问题在于它会为这个值添加一些垃圾:
o: ActiveSupport::Cache::Entry :@compressedF:@expires_in0:@created_atf1355928410.584484:@value"GsI";s<!DOCTYPE html>...
我尝试将:raw => true
传递给Rails.cache.write
,但它返回false并且没有将值放到memcached中。我认为它失败了,因为response.body没有被正确转义。
我也尝试过这种方式:
Rails.cache.write(request.headers['HTTP_X_MEMCACHED_KEY'], Marshal.dump(response.body), :raw => true)
它有效,但价值仍有一些垃圾:
I"fD<!DOCTYPE html>...
如何将一个干净的值放入memcached?
答案 0 :(得分:1)
由于response.body
中未转义的unicode字符,似乎memcached无法缓存数据。
现在我传递response.body.bytes.to_a.map(&:chr).join
作为值,它运行正常,但我仍然想知道它是否是最佳解决方案。
答案 1 :(得分:0)
写response.body.force_encoding('ASCII-8BIT')
可能是一个解决方案