1

私はRedisを学んでいます。Ruby Client for Redisを使用して、キーと値のペアを設定および取得できます。

現在、カスタムパスからdump.rdbを保存およびロードしようとしています。次の手順を実行しました。

  • 私はプログラムで、rubyスクリプトでdump.rdbのディレクトリを設定しました。
  • 次に、新しいデータを作成するか、既存のデータをロードするかを選択できます。
  • 初めてrubyスクリプトを実行しているときに、新しいデータを作成しました。
  • もう一度rubyスクリプトを実行し、今回は既存のデータをロードしました。出力は期待どおりです。

ただし、redisサーバーを再起動して同じrubyスクリプトを実行し(これもプログラムでdump.rdbのディレクトリを設定します)、データを読み込もうとすると、そうなりません。

設定で「dir」パラメータを設定した後、プログラムでredisサーバーにdump.rdbをロードさせる方法はありますか?

私はredis.confのRedisIgnoringディレクトリを見て、これをグーグルで検索してみました。redis.confにdump.rdbへのパスを設定するオプションは常にありますが、プログラムで設定したいと思います。

私のRubyコードは次のとおりです。

require 'redis'

client = Redis.new
client.config('set', 'dir', '/tmp')

puts 'Enter load(to load existing data) or new(to create new data)'
print 'prompt>'
command = gets.chomp

if command == 'new'
  client.flushdb

  client.set('key1', 'value1')
  client.set('key2', 'value2')

  client.save
else
  puts client.get('key1')
  puts client.get('key2')
end

以下は、rubyスクリプトを実行した場合の出力です。

laptop:~/ruby/workspace$ ruby test.rb
Enter load(to load existing data) or new(to create new data)
prompt>new

laptop:~/ruby/workspace$ ruby test.rb
Enter load(to load existing data) or new(to create new data)
prompt>load
value1
value2

# Now i restart redis-server

laptop:~/ruby/workspace$ ruby test.rb
Enter load(to load existing data) or new(to create new data)
prompt>load


# No output is printed

ソフトウェアの詳細:

  • OS:Ubuntu Linux12.0464ビット
  • ローカルホストでデフォルト構成で実行されているRedisバージョン2.6.9
  • Ruby:バージョン1.9.3p327(2012-11-10リビジョン37606)[x86_64-linux]

私の側から追加情報が必要な場合はお知らせください。

4

1 に答える 1

1

「カスタムrdb」のロードに関してあなたが求めているのは、「config set」コマンドを使用してダンプファイルへのパスを設定することだと思います。これが機能するには、redis デーモンと同じホスト上にある必要があることに注意してください。上記のコマンドを使用して指定したら、作業は完了しません。Redis は、起動時以外はファイルシステムから読み取りません。

したがって、これを行うには、Redis を再起動するスーパーバイザー プロセスが必要です。次に、する必要があります

  1. ディスクへの保存の順番
  2. 使用するダンプ ファイル名を設定します
  3. サーバーにシャットダウンを指示する
  4. スーパーバイザー デーモンによってサービスが再起動されるのを待ちます。

それでも、起動時にサーバーがディスクから構成を読み取るため、機能しません。Redis がランタイム構成をディスクに保存するためのコマンドを知りませんし、存在するとは思いません。

なぜこれを試しているのかわかりませんが、管理するために Redis の外部でコーディングしないと機能しないと確信しています。おそらく、なぜこのようにする必要があると思うのかを明確にしていただければ、私たちはより良い助けになることができます.

Redis 以外のコードを記述するだけで、複数のインスタンスを実行できます。各インスタンスは、使用する必要があるダンプ ファイルに構成されています。次に、クライアント側でどれを選択し、適切なものを使用します。

于 2013-03-02T19:30:41.293 に答える