php sqlite延迟2秒写入

据说sqlite不支持高并发,在网上看到如果一条一条写入,如果数据多很慢,但是如果用事务就会很快。

我就想能不能让web延迟写入,2秒后写入2秒内的指令,一起进行事务。

研究了半天,终于搞定了,自己的代码分享一下。

需要使用Redis或Memcached缓存。


class MYDB extends SQLite3{
      function __construct()
      {
          $this->open('gC5M.db');
      }
}
function tocache() {
    if (extension_loaded('redis')) {
        $redis = new Redis();
        $redis->connect('127.0.0.1', 6379);
        return $redis;
    }
    if (class_exists('Memcached')) {
        $memcached = new Memcached();
        $memcached->addServer('localhost', 11211);
        return $memcached;
    }
    return false;
}
function cha($sql){
    $db=new MYDB();
    $arr=getca('cache');
if(is_array($arr)&&is_int($arr[0])&&$arr[0]<time()){
$ret = $db->exec('BEGIN');
$c=count($arr);
   for($i=1;$i<$c;$i++){
   $ret = $db->exec($arr[$i]);
   }
   $ret = $db->exec('COMMIT');
setca('cache','');
}
   $ret = $db->query($sql);
   while($row = $ret->fetchArray(SQLITE3_ASSOC) ){
     $tmp[]=$row;}
   $db->close();
return $tmp;
}
function gai($sql,$y=''){
    if(!empty($y)){
$db=new MYDB();
$ret = $db->exec($sql);
$tmp=$ret?'成功,'.$db->changes():0;
   $db->close();
return $tmp;
}
$arr=getca('cache');
if(is_array($arr)&&is_int($arr[0])){
if(is_array($sql)){
        $arr=array_merge($arr,$sql);
    }
    else{
        $arr[]=$sql;
    }
}
else{
    $arr=[];
    $arr[0]=time()+2;
    if(is_array($sql)){
        $arr=array_merge($arr,$sql);
    }
    else{
        $arr[]=$sql;
    }
}
setca('cache',$arr);
}
function setca($x,$y){
$mc = tocache();
if(!is_array($y)){
    $tmp=[];
    $tmp[0]=$y;
    $y=$tmp;
}
$y=serialize($y);
$mc->set($x, $y,mt_rand(300,600));
}
function getca($x){
$mc = tocache();
$tmp=$mc->get($x);
$tmp=unserialize($tmp);
return $tmp;
}
gai('指令');
//gai()是增删改
//cha()是查询
//增删改时写入缓存,带参数的直接执行
//在查询里时间到了写入,因为查询比增删改频繁

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值