not installed ruby redis msgpack messagepack

ruby - installed - install python msgpack



Almacenar un hash MessagePacked en Redis (1)

MessagePack se trata en bytes sin procesar, que están marcados como codificación ''ASCII-8BIT''. Sin embargo, sus datos empaquetados vuelven de Redis marcados como en codificación UTF-8. Para que MessagePack se pueda descomprimir correctamente, debe forzarlo a interpretarlo como bytes sin formato.

Por lo tanto, cambie esta línea ...

result = MessagePack.unpack(redis.get(''my_key''))

a algo como esto ...

redis_val = redis.get(''my_key'').force_encoding(''ASCII-8BIT'') result = MessagePack.unpack(redis_val)

Tengo un problema al almacenar un hash MessagePacked en Redis. He pegado un caso de prueba a continuación. Al extraer los datos empaquetados de Redis y desempacarlos, el hash está ligeramente dañado. Esto parece suceder cuando los valores hash están más allá de cierta longitud, aunque no puedo decir eso con seguridad.

Estoy usando Redis 2.4.17 (configuración predeterminada), Ruby 1.9.3p194, MessagePack 0.4.7 y Redis gem 3.0.2. El mismo problema ocurre con el nodo, así que supongo que el problema está en MessagePack o Redis. ¿Algunas ideas?

require ''redis'' require ''msgpack'' class Test def self.run(url) redis = Redis.new data = {''number'' => 13498935756, ''hash'' => {''url'' => url}} redis.set(''my_key'', MessagePack.pack(data)) result = MessagePack.unpack(redis.get(''my_key'')) puts result puts result[''hash''][''url''] == data[''hash''][''url''] end end Test.run(''http://fake.example.com'') # works => {"number"=>13498935756, "hash"=>{"url"=>"http://fake.example.com"}} => true Test.run(''http://fakeurl.example.com'') # does not work => {"number"=>13498935756, "hash"=>{"url"=>"ttp://fakeurl.example.com"}} => false