用Redis实现导出功能
前段时间在做导出时用了一个很禁忌的方法ini_set()扩用内存,后来研究出来一种方法,去用Redis做导出,先不考虑Redis内存的问题我们最后说。
上代码
我们先获取数据库中的数据,把他们像分页一样的存入Redis中,以$code作为一个数据的key ,这样我们可以保证PHP内存在导出时不会占用太多:
$codex = time().'tmpuse';
$total_excel = ceil($count / 1000);
for($pageex = 1;$pageex <= $total_excel;$pageex++){
$settles = $this->table1->find('all', array(
'conditions' => $conditions,
'limit' => 1000,
'page' => $pageex
));
$code = $codex.$pageex;
$this->Redis->setex($code, 600, serialize($settles));
$codearr[] = $code;
$settles = null;
}
在视图中我们以$code去redis中取值,用完就释放掉,所以不存在Redis内存会爆的问题:
<table border="1">
<tr>
<th>业主编号</th>
<th>业主名称</th>
</tr>
<?php
foreach ($codearr as $cd) {
$settles = $this->Redis->get($cd);
$settles = unserialize($settles);
foreach ($settles as $key => $tables) {
?>
<tr style="text-align:center">
<td><?php echo $tables['id'];?></td>
<td><?php echo $tables['name'];?></td>
</tr>
<?php } $this->Redis->del($cd);$settles = null; ?>
<?php } ?>
</table>
然后就解决了内存会爆的问题
第一次写博客有不足的地方请多提提意见,谢谢大家