public function onlineplayersource()
{
  $res = $_POST['aoData'];
  $sEcho = 0;
  $iDisplayStart = 0; // 起始索引
  $iDisplayLength = 0;//分页长度
  $jsonarray= json_decode($res) ;
  $start = $jsonarray->start;//intval($res['start']);
  $length = $jsonarray->length;//intval($res['length']);
  $order = $jsonarray->order[0];
  $orderColumn = $jsonarray->columns[$order->column]->data;
  $OnlineRoom = $jsonarray->form_param->OnlineRoom;
  $user_name = $jsonarray->form_param->user_name;
  $startdate = $jsonarray->form_param->startdate;
  $enddate = $jsonarray->form_param->enddate;
 
  $r = [];
  $memcache = new \Memcache();
  $mem_ip = config('cache.stores')['memcached']['servers'][0]['host'];
  $mem_port = config('cache.stores')['memcached']['servers'][0]['port'];
  $sql = "select * FROM [dbo].[fn_GetUserOnline] () d where d.OnlineRoom is not null";
  $key = "online";

  try {

    $memcache->connect($mem_ip,$mem_port);
    $cac = $memcache->get($key);
    if (!$cac) {
      $data = DB::select($sql);//->skip($start)->take($length)->get()->toArray();
      $total = DB::select($cnt_sql);
      $cnt = $total[0]->cnt;
      if($memcache->set($key,['data'=>$data, 'cnt'=>$total[0]->cnt], false, 300))
      {
      }
      $r['from_cache'] = false;
    } else {
      $data = $cac['data'];
      $cnt = count($data);
      $r['from_cache'] = true;
    }
  } catch(\Exception $e) {
    $data = DB::select($sql);//->skip($start)->take($length)->get()->toArray();
    $total = DB::select($cnt_sql);
    $cnt = $total[0]->cnt;
    $r['from_cache'] = false;
    $r['exception'] = true;
  }
  $r['orderColumn'] = $orderColumn;
  $r['orderDir'] = $orderDir;
  $r['start'] = $start;
  $r['length'] = $length;
 
  $ds = $this->process($data, $orderColumn, $orderDir, $user_name, $OnlineRoom, $startdate, $enddate);
  $r['ori'] = $ds;
  $cnt = count($ds);
  $ds = $ds->slice($start, $length);
  $ds = $ds->values()->all();
  $r['ds'] = $ds;
  $data = $ds;
  $ipobj = new \App\Http\Model\IP();
  foreach ($ds as $player) {
    $addr = $ipobj->ip2addr($player->LastLoginIP);
    if (isset($addr)) {
      $player->LastLoginIPText = '【'.$addr['country'].'】'.$addr['area'];
    } else {
      $player->LastLoginIPText = '';
    }
  }
  $r['data'] = $data;
 
  $r['iTotalDisplayRecords'] = $cnt;
  $r['iTotalRecords'] = $cnt;
  return json_encode($r);
}
 
private function process($arr, $order, $orderDir, $user_name, $OnlineRoom, $startdate, $enddate) {
  $col = collect($arr);
  if ($orderDir == 'desc')
    $sorted = $col->sortByDesc($order);
  else
    $sorted = $col->sortBy($order);
  $sorted = $sorted->filter(function ($value, $key) use($user_name, $OnlineRoom, $startdate, $enddate) {
    $result = true;
    if (isset($value->UserName) && strlen($value->UserName) > 0 && isset($user_name) && strlen($user_name) > 0) {
      $position = strpos($value->UserName, $user_name);
      if ($position === false)
        $result = false;
      else
        $result = true;
    }
    $result_uid = true;
    if (isset($value->UserID) && strlen($value->UserID) > 0 && isset($user_name) && strlen($user_name) > 0) {
      if ($value->UserID != $user_name) {
        $result_uid = false;
      }
    }
    $result = $result || $result_uid;
    $result_onlineroom = true;
    if (isset($value->OnlineRoom) && strlen($value->OnlineRoom) > 0 && isset($OnlineRoom) && strlen($OnlineRoom) > 0) {
      if ($value->OnlineRoom != $OnlineRoom) {
        $result_onlineroom = false;
      }
    }
    $result = $result && $result_onlineroom;
    $result2 = true;
    if (isset($value->LastLoginTM) && strlen($value->LastLoginTM) > 0 && isset($startdate) && strlen($startdate) > 0) {
      if ($startdate && $startdate != '') {
        $result2 = strtotime($value->LastLoginTM) > strtotime($startdate);
      }
    }
    $result = $result && $result2;
    $result3 = true;
    if (isset($value->LastLoginTM) && strlen($value->LastLoginTM) > 0 && isset($enddate) && strlen($enddate) > 0) {
      if ($enddate && $enddate != '') {
        $result3 = strtotime($value->LastLoginTM) <= strtotime($enddate);
      }
    }
    $result = $result && $result3;

    return $result;

  });
  //$sorted = $sorted->where('IsRobot', 0);
  return $sorted;
}

laravel读取memcached缓存并做条件查询的更多相关文章

  1. mysql拆分字符串做条件查询

    mysql拆分字符串作为查询条件 有个群友问一个问题 这表的ancestors列存放的是所有的祖先节点,以,分隔 例如我查询dept_id为103的所有祖先节点,现在我只有一个dept_id该怎么查 ...

  2. 用Set中元素做条件查询

    一个老师教许多学生,一个学生被许多老师教,一个学生有好多书,同一种书被许多同学拥有.查询教拥有书"a"的学生的老师:   class teacher{   String id;   ...

  3. laravel 根据字段不同值做不同查询

    在开发过程中我们经常遇到这种情况: 例如,一个信息表message,字段type 1.操作提醒 2.平台通知,表message_read记录当信息是平台通知时用户浏览状况 那么 当信息是平台通知时是针 ...

  4. 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma

     1 PersonTestMapper.xml中的内容如下: <?xmlversion="1.0"encoding="UTF-8"?> < ...

  5. 应对Memcached缓存失效,导致高并发查询DB的四种思路(l转)

    当Memcached缓存失效时,容易出现高并发的查询DB,导致DB压力骤然上升. 这篇blog主要是探讨如何在缓存将要失效时,及时地更新缓存,而不是如何在缓存失效之后,如何防止高并发的DB查询. 解决 ...

  6. 应对Memcached缓存失效,导致高并发查询DB的几种思路

    原文地址: http://blog.csdn.net/hengyunabc/article/details/20735701 当Memcached缓存失效时,容易出现高并发的查询DB,导致DB压力骤然 ...

  7. 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据

    1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...

  8. Laravel条件查询数据单条数据first,多条数据get

    使用DB查询,必须use Illuminate\Support\Facades\DB; 多数组条件查询单条数据 first() //提交加入我们数据 public function ajax_join ...

  9. Linq和EF 做 单一条件查询 和 复合条件 查询 以及 多表 联合查询 示例

    单一条件查询: var table2Object = (from t1 in db.table1 join t2 in db.table2 on t1.id equals t2.id select t ...

随机推荐

  1. R语言绘制带errorbar 的柱状图

    代码示例: data <- data.frame(mean = c(10, 15), sd = c(12, 17)) rownames(data) <- c("case" ...

  2. ubuntu16.04卸载tensorflow0.11版本,安装tensorflow1.1.0版本

    卸载旧版本: pip uninstall tensorflow 安装新版本: sudo pip install --upgrade https://storage.googleapis.com/ten ...

  3. 【WP8】Uri关联启动第三方App

    在WP8中支持启动第三方应用程序,比如在App1中可以打开App2,你可以在你的应用程序中直接打开QQ,也可以让其他开发者调用你的APP,例如:软件盒子 下面演示被调用方和调用方的使用方法,新建两个项 ...

  4. 156 UIImageView 和 CADisplayLink 实现 Tom 汤姆猫动画效果的区别(扩展知识:分组(黄色文件夹)和文件夹引用(蓝色文件夹)区别)

    (1)UIImageView 的动画操作,来自定义循环播放动画(不建议使用,内存消耗大) (2)CADisplayLink 是一个计时器,但是同 NSTimer 不同的是,CADisplayLink ...

  5. Oracle统计每条数据的大小

    怎么查询一条记录到底占了多少空间呢,随便用一个表举例(如上图),就着解决眼前问题的原则(oracle),网上简单查了查,发现生效了,就没深入了解了,包括其它数据库怎么解决,都没做研究.Oracle下, ...

  6. 详解CorelDRAW中关于群组的操作

    CorelDRAW软件中的“群组”功能键主要用于整合多个对象.在进行比较复杂的绘图编辑时,通常会有很多的图形对象,为了方便操作,可以对一些对象设定群组.设定群组以后的多个对象,将被看作一个单独的对象. ...

  7. Android开发学习笔记-md5加密算法

    十六位的md5加密 private static void Md5(String plainText ) { try { MessageDigest md = MessageDigest.getIns ...

  8. windows 环境内网超快同步 DFS

    记录下: 在WINDOWS环境下,内网同步使用DFS可以超快实现文件同步,效果非常OK 纯粹记录下!

  9. python--文件I/O--11

    原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/ 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 一.打印到屏幕 最简单的 ...

  10. c# 匿名反序列化

    1.先new一个匿名对象,然后再反序列化好处是能点点点,坏处是得先new匿名对象 2.借用Newtonsoft.Json.Linq.JObject.Parse,好处是不需要new匿名对象,坏处是不能点 ...