用Redis实现导出功能

本文介绍了如何利用Redis来避免在导出大数据时使用ini_set()扩大内存限制的问题。通过将数据库数据分批存储到Redis,然后在视图中按需获取并释放,确保PHP内存不会过度消耗,有效解决了内存爆炸的隐患。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用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>

然后就解决了内存会爆的问题

第一次写博客有不足的地方请多提提意见,谢谢大家

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值