使用Rails.cache.write设置原始值

时间:2012-12-19 15:02:50

标签: ruby-on-rails ruby caching memcached

我正在尝试将整个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?

2 个答案:

答案 0 :(得分:1)

由于response.body中未转义的unicode字符,似乎memcached无法缓存数据。

现在我传递response.body.bytes.to_a.map(&:chr).join作为值,它运行正常,但我仍然想知道它是否是最佳解决方案。

答案 1 :(得分:0)

response.body.force_encoding('ASCII-8BIT')可能是一个解决方案