PHP+redis实现添加处理投票的方法


Posted in PHP onNovember 14, 2015

本文实例讲述了PHP+redis实现添加处理投票的方法。分享给大家供大家参考,具体如下:

<?php
 header("Content-Type:text/html;charset=utf-8");
 include 'lib/mysql.class.php';
 $mysql_obj = mysql::getConn();
 if(class_exists('Redis')){
  //redis 
  $redis = new Redis();
  $redis->pconnect('127.0.0.1', 6379);
  if(isset($_SERVER['HTTP_REFERER'])){
   $url_md5 = md5($_SERVER['HTTP_REFERER']);
  }
  $adve_key = 'adve'; 
  $adve_key_exists = 'adve_exists';
  if(!$redis->exists($adve_key_exists)){
   $list = $mysql_obj->fetch_array("select * from admin_online_adve");
   if($list){
    foreach ($list as $key => $value) {
     $url_hash = md5($value['adve_url']);
     $adve_hash_key = $adve_key.":".$url_hash;
     $id = $value['id'];
     $redis->set($adve_hash_key,$id);
     $redis->set($adve_key_exists,true);
    }
   }
  }
  $adve_new_key = $adve_key.':'.$url_md5;
  if($redis->exists($adve_new_key)){
    $adve_plus = $adve_new_key.":plus" ;
    if(!$redis->exists($adve_plus)){
     $redis->set($adve_plus,1); 
    }else{
     $redis->incr($adve_plus);
     $num = $redis->get($adve_plus);
     if($num >100){
      $id = $redis->get($adve_new_key);
      // insert to sql;
      $mysql_obj->query("update admin_online_adve set adve_num=adve_num+$num where id=$id");
      $redis->set($adve_plus,1);
     }
    }
  }
 }
?>
<html>
<head>
<meta http-equiv="refresh" content="1;url=https://itunes.apple.com/cn/app/san-guo-zhi15-ba-wangno-da-lu/id694974270?mt=8">
<title>统计</title>
</head>
<body>
 <img src="loading.gif">Loading...
</body>
</html>

其中php连接mysql类mysql.class.php如下:

<?php
define("MYSQL_SQL_GETDATA", 1);
define("MYSQL_SQL_EXECUTE", 2);
class mysql_db{
  var $_server;        //数据库服务器地址
  var $_user;         //数据库连接帐号
  var $_password;       //数据库连接密码
  var $_dbname;        //数据库名称
  var $_persistency=false;  //是否使用持久连接
  var $_isConnect = false;  //是否已经建立数据库连接
  var $_charset="utf8";    //数据库连接字符集
  var $_isDebug = false;   //是否Debug模式
  var $_sql=array();     //执行sql语句数组
  var $_db_connect_id;    //数据库连接对象标识
  var $_result;        //执行查询返回的值
  var $_record;
  var $_rowset;
  var $_errno = 0;
  var $_error = "connection error";
  var $_checkDB = false;
  function mysql_db($dbserver, $dbuser, $dbpassword,$database,$persistency = false,$autoConnect=false,$checkdb = false)
  {
    $this->_server = $dbserver;
    $this->_user = $dbuser;
    $this->_password = $dbpassword;
    $this->_dbname = $database;
    $this->_persistency = $persistency;
    $this->_autoConnect = $autoConnect;
    $this->_checkDB = $checkdb;
    if($autoConnect){
      $this->connection();
    }
  }
  function connection($newLink = false)
  {
    if (!$newLink){
      if($this->_isConnect && isset($this->_db_connect_id)){
        @mysql_close($this->_db_connect_id);
      }
    }
    $this->_db_connect_id = ($this->persistency) ? @mysql_pconnect($this->_server, $this->_user, $this->_password):@mysql_connect($this->_server, $this->_user, $this->_password,$newLink);
    if ($this->_db_connect_id)
    {
      if ($this->version() > '4.1')
      {
        if ($this->_charset != "")
        {
          @mysql_query("SET NAMES '".str_replace('-', '', $this->_charset)."'", $this->_db_connect_id);
        }
      }
      if ($this->version() > '5.0')
      {
        @mysql_query("SET sql_mode=''", $this->_db_connect_id);
      }
      //检测指定数据库是否连接成功
      if ($this->_checkDB){
        $dbname = mysql_query('SELECT database()',$this->_db_connect_id);
        $dbname = mysql_fetch_array($dbname,MYSQL_NUM);
        $dbname = trim($dbname[0]);
      }else{
        $dbname = '';
      }
      if ($dbname==$this->_dbname || $dbname==''){
        if (!@mysql_select_db($this->_dbname, $this->_db_connect_id))
        {
          @mysql_close($this->_db_connect_id);
          $this->_halt("cannot use database " . $this->_dbname);
        }
      }else{
        if ($this->_checkDB && !$newLink){
          $this->connection(true);
        }
      }
      return true;
    }
    else
    {
      $this->_halt('connect failed.',false);
    }
  }
  function setCharset($charset){
    //$charset = str_replace('-', '', $charset);
    $this->_charset = $charset;
  }
  function setDebug($isDebug=true){
    $this->_isDebug = $isDebug;
  }
  function query($sql,$type='')
  {
    return $this->_runSQL($sql,MYSQL_SQL_GETDATA,$type);
  }
  function execute($sql)
  {
    return $this->_runSQL($sql,MYSQL_SQL_EXECUTE,"UNBUFFERED");
  }
  function _runSQL($sql,$sqlType=MYSQL_SQL_GETDATA,$type = '')
  {
    if ($type =="UNBUFFERED"){
      $this->_result = @mysql_unbuffered_query($sql,$this->_db_connect_id);
    }else{
      $this->_result = @mysql_query($sql,$this->_db_connect_id);
    }
    //测试模式下保存执行的sql语句
    if($this->_isDebug){
      $this->_sql[]=$sql;
    }
    if ($this->_result)
    {
      return $sqlType==MYSQL_SQL_GETDATA?$this->getNumRows():$this->getAffectedRows();
    }else{
      $this->_halt("Invalid SQL: ".$sql);
      return false;
    }
  }
  function next($result_type=MYSQL_ASSOC) {
    $this->fetchRow($result_type); 
    return is_array($this->_record);
  }
  function f($name) {
    if(is_array($this->_record)){
      return $this->_record[$name];
    }else{
      return false;
    }
  }
  function fetchRow($result_type=MYSQL_ASSOC)
  {
    if( $this->_result )
    {
      $this->_record = @mysql_fetch_array($this->_result,$result_type);
      return $this->_record;
    }else{
      return false;
    }
  }
  function getAll($sql,$primaryKey="",$result_type=MYSQL_ASSOC)
  {
    if ($this->_runSQL($sql,MYSQL_SQL_GETDATA)>=0){
      return $this->fetchAll($primaryKey,$result_type);
    }else{
      return false;
    }
  }
  function getOne($sql,$result_type=MYSQL_ASSOC)
  {
    if ($this->_runSQL($sql,MYSQL_SQL_GETDATA)>0){
      $arr = $this->fetchAll("",$result_type);
      if(is_array($arr)){
        return $arr[0];
      }
    }else{
      return false;
    }
  }
  function fetchAll($primaryKey = "",$result_type=MYSQL_ASSOC)
  {
    if ($this->_result)
    {
      $i = 0;
      $this->_rowset = array();
      if ($primaryKey=="")
      {
        while($this->next($result_type))
        {
          $this->_rowset[$i] = $this->_record;
          $i++;
        }
      }else{
        while($this->next($result_type))
        {
          $this->_rowset[$this->f($primaryKey)] = $this->_record;
          $i++;
        }
      }
      return $this->_rowset;
    }else{
      //$this->_halt("Invalid Result");
      return false;
    }
  }
  function checkExist($sql)
  {
    return $this->query($sql)>0?true:false;
  }
  function getValue($sql, $colset = 0)
  {
    if ($this->query($sql)>0){
      $this->next(MYSQL_BOTH);
      return $this->f($colset);
    }else{
      return false;
    }
  }
  function getNumRows()
  {
    return @mysql_num_rows($this->_result);
  }
  function getNumFields()
  {
    return @mysql_num_fields($this->_result);
  }
  function getFiledName($offset)
  {
    return @mysql_field_name($this->_result, $offset);
  }
  function getFiledType($offset)
  {
    return @mysql_field_type($this->_result, $offset);
  }
  function getFiledLen($offset)
  {
    return @mysql_field_len($this->_result, $offset);
  }
  function getInsertId()
  {
    return @mysql_insert_id($this->_db_connect_id);
  }
  function getAffectedRows()
  {
    return @mysql_affected_rows($this->_db_connect_id);
  }
  function free_result()
  {
    $ret = @mysql_free_result($this->_result);
    $this->_result = 0;
    return $ret;
  }
  function version() {
    return @mysql_get_server_info($this->_db_connect_id);
  }
  function close() {
    return @mysql_close($this->_db_connect_id);
  }
  function sqlOutput($isOut = true, $all = true){
    if($all){
      $ret = implode("<br>",$this->_sql);
    }else{
      $ret = $this->_sql[count($this->_sql)-1];
    }
    if ($isOut){
      echo $ret;
    }else{
      return $ret;
    }
  }
  function _halt($msg="Session halted.",$getErr=true) {
    if($this->_isDebug){
      if($getErr){
        $this->_errno = @mysql_errno($this->_db_connect_id);
        $this->_error = @mysql_error($this->_db_connect_id);
        printf("<b>MySQL _error</b>: %s (%s)<br></font>/n",$this->_errno,$this->_error);
      }
      die($msg);
    }else{
      die("Session halted.");
    }
  }
}
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
建立动态的WML站点(三)
Oct 09 PHP
PHP 长文章分页函数 带使用方法,不会分割段落,翻页在底部
Oct 22 PHP
有关PHP性能优化的介绍
Jun 20 PHP
PHP中ob_start函数的使用说明
Nov 11 PHP
php基于mcrypt的加密解密实例
Oct 27 PHP
php操作mongoDB实例分析
Dec 29 PHP
浅谈php中urlencode与rawurlencode的区别
Sep 05 PHP
Zend Framework动作控制器用法示例
Dec 09 PHP
详解yii2实现分库分表的方案与思路
Feb 03 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
Nov 16 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
May 12 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
Feb 12 PHP
PHP实现操作redis的封装类完整实例
Nov 14 #PHP
php实现的递归提成方案实例
Nov 14 #PHP
PHP使用Pthread实现的多线程操作实例
Nov 14 #PHP
开启PHP Static 关键字之旅模式
Nov 13 #PHP
php正则表达式学习笔记
Nov 13 #PHP
php邮箱地址正则表达式验证
Nov 13 #PHP
合格的PHP程序员必备技能
Nov 13 #PHP
You might like
PHP 长文章分页函数 带使用方法,不会分割段落,翻页在底部
2009/10/22 PHP
PHP查找与搜索数组元素方法总结
2015/06/12 PHP
Java中final关键字详解
2015/08/10 PHP
php解析xml 的四种简单方法(附实例)
2016/07/11 PHP
Yii框架分页实现方法详解
2017/05/20 PHP
学习ExtJS Window常用方法
2009/10/07 Javascript
jQuery参数列表集合
2011/04/06 Javascript
jquery Mobile入门—多页面切换示例学习
2013/01/08 Javascript
table行随鼠标移动变色示例
2014/05/07 Javascript
JS实现自适应高度表单文本框的方法
2015/02/25 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
2015/04/29 Javascript
JS判断当前页面是否在微信浏览器打开的方法
2015/12/08 Javascript
JS类的定义与使用方法深入探索
2016/11/26 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2017/01/22 Javascript
如何理解Vue的作用域插槽的实现原理
2017/08/19 Javascript
jQuery EasyUI开发技巧总结
2017/09/26 jQuery
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
Vue开发Html5微信公众号的步骤
2019/04/11 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
python实现在pickling的时候压缩的方法
2014/09/25 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
使用Python画股票的K线图的方法步骤
2019/06/28 Python
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
彪马香港官方网上商店:PUMA香港
2020/12/06 全球购物
夏季奶茶店创业计划书
2014/01/16 职场文书
国贸专业毕业求职信
2014/06/11 职场文书
垃圾桶标语
2014/06/24 职场文书
机关职员工作检讨书
2014/10/23 职场文书
出国留学单位推荐信
2015/03/26 职场文书
温馨祝福晨语:美丽的一天从我的问候开始
2019/11/28 职场文书
JS如何实现基于websocket的多端桥接平台
2021/05/14 Javascript
JavaScript 定时器详情
2021/11/11 Javascript
Python批量解压&压缩文件夹的示例代码
2022/04/04 Python