Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何清除Class::DBI';什么是内部缓存?_Perl_Class Dbi - Fatal编程技术网

Perl 如何清除Class::DBI';什么是内部缓存?

Perl 如何清除Class::DBI';什么是内部缓存?,perl,class-dbi,Perl,Class Dbi,我目前正在为现有数据库结构开发Class::DBI的大型实现,并且在清除Class::DBI中的缓存时遇到了问题。这是一个mod_perl实现,因此一个类的实例在被访问期间可能非常旧。 从手册页中,我找到了两个选项: Music::DBI->clear_object_index(); 以及: 现在,当我将clear\u object\u index()添加到DESTROY方法时,它似乎在运行,但实际上并没有清空缓存。我可以手动更改数据库,重新运行请求,但它仍然是旧版本。 purge_ob

我目前正在为现有数据库结构开发Class::DBI的大型实现,并且在清除Class::DBI中的缓存时遇到了问题。这是一个mod_perl实现,因此一个类的实例在被访问期间可能非常旧。 从手册页中,我找到了两个选项:

Music::DBI->clear_object_index();
以及:

现在,当我将clear\u object\u index()添加到DESTROY方法时,它似乎在运行,但实际上并没有清空缓存。我可以手动更改数据库,重新运行请求,但它仍然是旧版本。 purge_object_index_every表示它每n个请求清除一次索引。将其设置为“1”或“0”,似乎可以清除索引。。。有时候。我希望这两个中的一个能起作用,但由于某些原因,它并不是每次都能起作用。更像是五分之一

有没有关于清除此问题的建议?

上的“”页对此主题有详细说明。最简单的解决方案是完全禁用活动对象索引,方法是:

$Class::DBI::Weaken_Is_Available = 0;

我过去成功地使用过从对象索引中删除对象,因此当调用修改数据库的页面时,它总是在确认页面中显式重置缓存中的对象。

$obj->dbi\u commit();如果您有未完成的交易,则可能是您正在寻找的。然而,这种情况不太可能发生,因为它倾向于在销毁时自动完成任何延迟交易

执行此操作时:

Music::Artist->purge_object_index_every(2000);
您告诉它每加载2000个对象就检查一次对象缓存,并删除所有死引用以节省内存使用。我认为那根本不是你想要的

此外,

Music::DBI->clear_object_index();
从活动对象索引中删除所有对象。我不知道这会有什么帮助;这并不是将它们刷新到磁盘,真的

听起来,您正在尝试的操作应该可以按照您的方式正常工作,但是您的SQL或其他地方可能存在问题,导致插入或更新无法工作。您是否按照perldoc的建议对每个数据库查询进行错误检查?也许您可以从那里或在数据库错误日志中开始,观察查询以了解它们为什么没有完成,或者它们是否曾经到达


希望这有帮助

我应该注意Class::DBI已被弃用,您应该将代码移植到

Music::DBI->clear_object_index();