1

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

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

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

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

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

我查看了 redis.conf 中的 Redis Ignoring 目录并尝试在 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 版在本地主机上以默认配置运行
  • 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 回答