set(key, value)
するときに、keyとvalueのエンコーディングに互換性がないと例外になる話。
keyに日本語入れることはあまり無いと思いますが、以下の例で発生します。
require 'redis' require 'msgpack' redis = Redis.new(host: "localhost", port: 6379) redis.set('読書', MessagePack.pack({cnt: 14})) #=> Encoding::CompatibilityError: incompatible character encodings: UTF-8 and ASCII-8BIT '読書'.encoding #=> #<Encoding:UTF-8> MessagePack.pack({cnt: 14}).encoding #=> #<Encoding:ASCII-8BIT>
https://github.com/redis/redis-rb/blob/v3.1.0/lib/redis/connection/command_helper.rb#L28
この行で Redis#set
に渡した引数を join
するのですが、 読書
と MessagePack.pack({cnt: 14})
のエンコーディングが異なり、互換性がないため例外が起きてました。ケースとしては少ないと思いますが気をつけましょう...。