我有一个相当大的数据库(5 个数据库,每个数据库大约有一百万个键),每个键都有环境命名空间。例如:"datamine::production::crosswalk==foobar"
我需要将我的开发环境与从生产 RDB 快照复制的数据同步。
所以我想做的是批量重命名每个键,将命名空间从 更改datamine::production为datamine::development. 有没有好的方法来实现这一目标?
redis-cli 命令keys "datamine::production*",通过管道传输到 sed,然后返回到redis-cli. 这需要很长时间,并且由于某种原因在许多键上爆炸(偶尔将几个键组合在同一行中)。我更喜欢更好的选择。
Perl 在 .rdb 文件上搜索/替换。我的本地 redis-server 平面拒绝加载修改后的 RDB。
我正在使用Magento 1.6站点,该站点在主页的CMS"布局更新XML"字段中包含以下xml:
<reference name="content">
<block type="catalog/navigation" name="catalog.category.home" as="homecategory" template="catalog/category/homecategory.phtml" />
</reference>
Run Code Online (Sandbox Code Playgroud)
由于模板显示随机类别,我想禁用此块的缓存.为此,我尝试使用getChildHtml('sub-block-template',false)以及以下内容:
(homecategory 在其模板中有$ this-> getChildHtml('random_categories',false))
<reference name="content">
<block type="catalog/navigation" name="catalog.category.home" as="homecategory" useCache="false" template="catalog/category/homecategory.phtml">
<block type="catalog/navigation" name="catalog.category.home.randcats" as="random_categories" useCache="false" template="catalog/category/random.phtml" />
</block>
</reference>
Run Code Online (Sandbox Code Playgroud)
所以现在我陷入困境,想知道为什么我不能阻止缓存该块,尽管使用'false'参数.
我试图在Redis中进行批量密钥重命名,使用shell为每个密钥名称替换一个替换.(似乎没有更好的方法在redis内部执行此操作).
redis-cli -n 5 KEYS "*::staging::*"| xargs -I {} echo "RENAME {} $(echo {} | sed 's/staging/development/g')"
# Then pipe this command into redis-cli when working
Run Code Online (Sandbox Code Playgroud)
我期待这样的输出:
"RENAME redis::staging::key redis::development::key"
相反,我得到这个:
"RENAME redis::staging::key redis::staging::key"
该echo {} $(echo {}| sed 's/old/new/')是什么是挂了我...怎样才能正确地实现服用xargs输出和回声原始和那一个编辑的版本?$(echo {} |sed)应该工作吧?(如果是这样,我该怎么做呢?)