Redis:如何以编程方式在ruby客户端中加载dump.rdb

时间:2013-03-02 07:22:59

标签: ruby redis

我正在学习Redis。我可以使用Ruby Client for Redis设置和获取键值对。

我现在正尝试从自定义路径存储和加载dump.rdb。 我执行了以下步骤:

  • 我以编程方式在ruby脚本中设置dump.rdb的目录。
  • 然后我可以选择创建新数据或加载现有数据。
  • 我第一次执行ruby脚本时创建了新数据。
  • 我再次运行我的ruby脚本,这次加载现有数据。输出符合预期。

但是,当我重新启动redis服务器并运行相同的ruby脚本(再次以编程方式设置dump.rdb的目录)并尝试加载数据时,它不会这样做。

在配置中设置'dir'参数后,有没有办法以编程方式让redis服务器加载dump.rdb

我查看了Redis Ignoring directory in redis.conf,并尝试在Google上搜索此内容。始终可以选择在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

软件详情:

  • 操作系统:Ubuntu Linux 12.04 64位
  • Redis版本2.6.9在localhost上以默认配置运行
  • Ruby:版本1.9.3p327(2012-11-10修订版37606)[x86_64-linux]

如果您需要我的任何其他信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

我相信你在加载“自定义rdb”方面的意思是使用“config set”命令来设置转储文件的路径。请注意,它需要与redis守护程序在同一主机上才能工作。一旦使用上述命令指定它,您的工作就不会完成。除启动时,Redis不从文件系统读取。

因此,为了做到这一点,您需要有一个重启Redis的管理程序进程。然后,你需要

  1. 保存到磁盘
  2. 设置转储文件名称以使用
  3. 告诉服务器关闭
  4. 等待主管守护程序重新启动服务
  5. 即使这样,它也行不通,因为在启动时服务器将从磁盘读取配置。我不知道Redis将其运行时配置保存到磁盘的命令,并且不相信它存在。

    我不确定你为什么要这样做,但我相信如果没有在Redis之外进行编码来管理,它将无法工作。也许如果你澄清了为什么你认为你需要这样做,我们可以提供更好的帮助。

    如果不编写非Redis代码,您可以运行多个实例,每个实例都配置为您需要使用的转储文件;然后在客户端选择哪一个并使用适当的一个。