亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP實現的Redis操作通用類示例

2024-05-05 00:04:26
字體:
來源:轉載
供稿:網友

本文實例講述了PHP實現的Redis操作通用類。分享給大家供大家參考,具體如下:

找到一個比較全的Redis PHP操作類庫,分享給大家

<?php/** * redis操作類 * 說明,任何為false的串,存在redis中都是空串。 * 只有在key不存在時,才會返回false。 * 這點可用于防止緩存穿透 * */class Redis{  private $redis;  //當前數據庫ID號  protected $dbId=0;  //當前權限認證碼  protected $auth;  /**   * 實例化的對象,單例模式.   * @var /iphp/db/Redis   */  static private $_instance=array();  private $k;  //連接屬性數組  protected $attr=array(    //連接超時時間,redis配置文件中默認為300秒    'timeout'=>30,    //選擇的數據庫。    'db_id'=>0,  );  //什么時候重新建立連接  protected $expireTime;  protected $host;  protected $port;  private function __construct($config,$attr=array())  {    $this->attr    =  array_merge($this->attr,$attr);    $this->redis  =  new Redis();    $this->port    =  $config['port'] ? $config['port'] : 6379;    $this->host    =  $config['host'];    $this->redis->connect($this->host, $this->port, $this->attr['timeout']);    if($config['auth'])    {      $this->auth($config['auth']);      $this->auth  =  $config['auth'];    }    $this->expireTime  =  time() + $this->attr['timeout'];  }  /**   * 得到實例化的對象.   * 為每個數據庫建立一個連接   * 如果連接超時,將會重新建立一個連接   * @param array $config   * @param int $dbId   * @return /iphp/db/Redis   */  public static function getInstance($config, $attr = array())  {    //如果是一個字符串,將其認為是數據庫的ID號。以簡化寫法。    if(!is_array($attr))    {      $dbId  =  $attr;      $attr  =  array();      $attr['db_id']  =  $dbId;    }    $attr['db_id']  =  $attr['db_id'] ? $attr['db_id'] : 0;    $k  =  md5(implode('', $config).$attr['db_id']);    if(! (static::$_instance[$k] instanceof self))    {      static::$_instance[$k] = new self($config,$attr);      static::$_instance[$k]->k    =  $k;      static::$_instance[$k]->dbId  =  $attr['db_id'];      //如果不是0號庫,選擇一下數據庫。      if($attr['db_id'] != 0){        static::$_instance[$k]->select($attr['db_id']);      }    }    elseif( time() > static::$_instance[$k]->expireTime)    {      static::$_instance[$k]->close();      static::$_instance[$k]     =   new self($config,$attr);      static::$_instance[$k]->k  =  $k;      static::$_instance[$k]->dbId=  $attr['db_id'];      //如果不是0號庫,選擇一下數據庫。      if($attr['db_id']!=0){        static::$_instance[$k]->select($attr['db_id']);      }    }    return static::$_instance[$k];  }  private function __clone(){}  /**   * 執行原生的redis操作   * @return /Redis   */  public function getRedis()  {    return $this->redis;  }  /*****************hash表操作函數*******************/  /**   * 得到hash表中一個字段的值   * @param string $key 緩存key   * @param string $field 字段   * @return string|false   */  public function hGet($key,$field)  {    return $this->redis->hGet($key,$field);  }  /**   * 為hash表設定一個字段的值   * @param string $key 緩存key   * @param string $field 字段   * @param string $value 值。   * @return bool    */  public function hSet($key,$field,$value)  {    return $this->redis->hSet($key,$field,$value);  }  /**   * 判斷hash表中,指定field是不是存在   * @param string $key 緩存key   * @param string $field 字段   * @return bool   */  public function hExists($key,$field)  {    return $this->redis->hExists($key,$field);  }  /**   * 刪除hash表中指定字段 ,支持批量刪除   * @param string $key 緩存key   * @param string $field 字段   * @return int   */  public function hdel($key,$field)  {    $fieldArr=explode(',',$field);    $delNum=0;    foreach($fieldArr as $row)    {      $row=trim($row);      $delNum+=$this->redis->hDel($key,$row);    }    return $delNum;  }  /**   * 返回hash表元素個數   * @param string $key 緩存key   * @return int|bool   */  public function hLen($key)  {    return $this->redis->hLen($key);  }  /**   * 為hash表設定一個字段的值,如果字段存在,返回false   * @param string $key 緩存key   * @param string $field 字段   * @param string $value 值。   * @return bool   */  public function hSetNx($key,$field,$value)  {    return $this->redis->hSetNx($key,$field,$value);  }  /**   * 為hash表多個字段設定值。   * @param string $key   * @param array $value   * @return array|bool   */  public function hMset($key,$value)  {    if(!is_array($value))      return false;    return $this->redis->hMset($key,$value);   }  /**   * 為hash表多個字段設定值。   * @param string $key   * @param array|string $value string以','號分隔字段   * @return array|bool   */  public function hMget($key,$field)  {    if(!is_array($field))      $field=explode(',', $field);    return $this->redis->hMget($key,$field);  }  /**   * 為hash表設這累加,可以負數   * @param string $key   * @param int $field   * @param string $value   * @return bool   */  public function hIncrBy($key,$field,$value)  {    $value=intval($value);    return $this->redis->hIncrBy($key,$field,$value);  }  /**   * 返回所有hash表的所有字段   * @param string $key   * @return array|bool   */  public function hKeys($key)  {    return $this->redis->hKeys($key);  }  /**   * 返回所有hash表的字段值,為一個索引數組   * @param string $key   * @return array|bool   */  public function hVals($key)  {    return $this->redis->hVals($key);  }  /**   * 返回所有hash表的字段值,為一個關聯數組   * @param string $key   * @return array|bool   */  public function hGetAll($key)  {    return $this->redis->hGetAll($key);  }  /*********************有序集合操作*********************/  /**   * 給當前集合添加一個元素   * 如果value已經存在,會更新order的值。   * @param string $key   * @param string $order 序號   * @param string $value 值   * @return bool   */  public function zAdd($key,$order,$value)  {    return $this->redis->zAdd($key,$order,$value);    }  /**   * 給$value成員的order值,增加$num,可以為負數   * @param string $key   * @param string $num 序號   * @param string $value 值   * @return 返回新的order   */  public function zinCry($key,$num,$value)  {    return $this->redis->zinCry($key,$num,$value);  }  /**   * 刪除值為value的元素   * @param string $key   * @param stirng $value   * @return bool   */  public function zRem($key,$value)  {    return $this->redis->zRem($key,$value);  }  /**   * 集合以order遞增排列后,0表示第一個元素,-1表示最后一個元素   * @param string $key   * @param int $start   * @param int $end   * @return array|bool   */  public function zRange($key,$start,$end)  {    return $this->redis->zRange($key,$start,$end);  }  /**   * 集合以order遞減排列后,0表示第一個元素,-1表示最后一個元素   * @param string $key   * @param int $start   * @param int $end   * @return array|bool   */  public function zRevRange($key,$start,$end)  {    return $this->redis->zRevRange($key,$start,$end);  }  /**   * 集合以order遞增排列后,返回指定order之間的元素。   * min和max可以是-inf和+inf 表示最大值,最小值   * @param string $key   * @param int $start   * @param int $end   * @package array $option 參數   *   withscores=>true,表示數組下標為Order值,默認返回索引數組   *   limit=>array(0,1) 表示從0開始,取一條記錄。   * @return array|bool   */  public function zRangeByScore($key,$start='-inf',$end="+inf",$option=array())  {    return $this->redis->zRangeByScore($key,$start,$end,$option);  }  /**   * 集合以order遞減排列后,返回指定order之間的元素。   * min和max可以是-inf和+inf 表示最大值,最小值   * @param string $key   * @param int $start   * @param int $end   * @package array $option 參數   *   withscores=>true,表示數組下標為Order值,默認返回索引數組   *   limit=>array(0,1) 表示從0開始,取一條記錄。   * @return array|bool   */  public function zRevRangeByScore($key,$start='-inf',$end="+inf",$option=array())  {    return $this->redis->zRevRangeByScore($key,$start,$end,$option);  }  /**   * 返回order值在start end之間的數量   * @param unknown $key   * @param unknown $start   * @param unknown $end   */  public function zCount($key,$start,$end)  {    return $this->redis->zCount($key,$start,$end);  }  /**   * 返回值為value的order值   * @param unknown $key   * @param unknown $value   */  public function zScore($key,$value)  {    return $this->redis->zScore($key,$value);  }  /**   * 返回集合以score遞增加排序后,指定成員的排序號,從0開始。   * @param unknown $key   * @param unknown $value   */  public function zRank($key,$value)  {    return $this->redis->zRank($key,$value);  }  /**   * 返回集合以score遞增加排序后,指定成員的排序號,從0開始。   * @param unknown $key   * @param unknown $value   */  public function zRevRank($key,$value)  {    return $this->redis->zRevRank($key,$value);  }  /**   * 刪除集合中,score值在start end之間的元素 包括start end   * min和max可以是-inf和+inf 表示最大值,最小值   * @param unknown $key   * @param unknown $start   * @param unknown $end   * @return 刪除成員的數量。   */  public function zRemRangeByScore($key,$start,$end)  {    return $this->redis->zRemRangeByScore($key,$start,$end);  }  /**   * 返回集合元素個數。   * @param unknown $key   */  public function zCard($key)  {    return $this->redis->zCard($key);  }  /*********************隊列操作命令************************/  /**   * 在隊列尾部插入一個元素   * @param unknown $key   * @param unknown $value   * 返回隊列長度   */  public function rPush($key,$value)  {    return $this->redis->rPush($key,$value);   }  /**   * 在隊列尾部插入一個元素 如果key不存在,什么也不做   * @param unknown $key   * @param unknown $value   * 返回隊列長度   */  public function rPushx($key,$value)  {    return $this->redis->rPushx($key,$value);  }  /**   * 在隊列頭部插入一個元素   * @param unknown $key   * @param unknown $value   * 返回隊列長度   */  public function lPush($key,$value)  {    return $this->redis->lPush($key,$value);  }  /**   * 在隊列頭插入一個元素 如果key不存在,什么也不做   * @param unknown $key   * @param unknown $value   * 返回隊列長度   */  public function lPushx($key,$value)  {    return $this->redis->lPushx($key,$value);  }  /**   * 返回隊列長度   * @param unknown $key   */  public function lLen($key)  {    return $this->redis->lLen($key);   }  /**   * 返回隊列指定區間的元素   * @param unknown $key   * @param unknown $start   * @param unknown $end   */  public function lRange($key,$start,$end)  {    return $this->redis->lrange($key,$start,$end);  }  /**   * 返回隊列中指定索引的元素   * @param unknown $key   * @param unknown $index   */  public function lIndex($key,$index)  {    return $this->redis->lIndex($key,$index);  }  /**   * 設定隊列中指定index的值。   * @param unknown $key   * @param unknown $index   * @param unknown $value   */  public function lSet($key,$index,$value)  {    return $this->redis->lSet($key,$index,$value);  }  /**   * 刪除值為vaule的count個元素   * PHP-REDIS擴展的數據順序與命令的順序不太一樣,不知道是不是bug   * count>0 從尾部開始   * >0 從頭部開始   * =0 刪除全部   * @param unknown $key   * @param unknown $count   * @param unknown $value   */  public function lRem($key,$count,$value)  {    return $this->redis->lRem($key,$value,$count);  }  /**   * 刪除并返回隊列中的頭元素。   * @param unknown $key   */  public function lPop($key)  {    return $this->redis->lPop($key);  }  /**   * 刪除并返回隊列中的尾元素   * @param unknown $key   */  public function rPop($key)  {    return $this->redis->rPop($key);  }  /*************redis字符串操作命令*****************/  /**   * 設置一個key   * @param unknown $key   * @param unknown $value   */  public function set($key,$value)  {    return $this->redis->set($key,$value);  }  /**   * 得到一個key   * @param unknown $key   */  public function get($key)  {    return $this->redis->get($key);  }  /**   * 設置一個有過期時間的key   * @param unknown $key   * @param unknown $expire   * @param unknown $value   */  public function setex($key,$expire,$value)  {    return $this->redis->setex($key,$expire,$value);  }  /**   * 設置一個key,如果key存在,不做任何操作.   * @param unknown $key   * @param unknown $value   */  public function setnx($key,$value)  {    return $this->redis->setnx($key,$value);  }  /**   * 批量設置key   * @param unknown $arr   */  public function mset($arr)  {    return $this->redis->mset($arr);  }  /*************redis 無序集合操作命令*****************/  /**   * 返回集合中所有元素   * @param unknown $key   */  public function sMembers($key)  {    return $this->redis->sMembers($key);  }  /**   * 求2個集合的差集   * @param unknown $key1   * @param unknown $key2   */  public function sDiff($key1,$key2)  {    return $this->redis->sDiff($key1,$key2);  }  /**   * 添加集合。由于版本問題,擴展不支持批量添加。這里做了封裝   * @param unknown $key   * @param string|array $value   */  public function sAdd($key,$value)  {    if(!is_array($value))      $arr=array($value);    else      $arr=$value;    foreach($arr as $row)      $this->redis->sAdd($key,$row);  }  /**   * 返回無序集合的元素個數   * @param unknown $key   */  public function scard($key)  {    return $this->redis->scard($key);  }  /**   * 從集合中刪除一個元素   * @param unknown $key   * @param unknown $value   */  public function srem($key,$value)  {    return $this->redis->srem($key,$value);  }  /*************redis管理操作命令*****************/  /**   * 選擇數據庫   * @param int $dbId 數據庫ID號   * @return bool   */  public function select($dbId)  {    $this->dbId=$dbId;    return $this->redis->select($dbId);  }  /**   * 清空當前數據庫   * @return bool   */  public function flushDB()  {    return $this->redis->flushDB();  }  /**   * 返回當前庫狀態   * @return array   */  public function info()  {    return $this->redis->info();  }  /**   * 同步保存數據到磁盤   */  public function save()  {    return $this->redis->save();  }  /**   * 異步保存數據到磁盤   */  public function bgSave()  {    return $this->redis->bgSave();  }  /**   * 返回最后保存到磁盤的時間   */  public function lastSave()  {    return $this->redis->lastSave();  }  /**   * 返回key,支持*多個字符,?一個字符   * 只有* 表示全部   * @param string $key   * @return array   */  public function keys($key)  {    return $this->redis->keys($key);  }  /**   * 刪除指定key   * @param unknown $key   */  public function del($key)  {    return $this->redis->del($key);  }  /**   * 判斷一個key值是不是存在   * @param unknown $key   */  public function exists($key)  {    return $this->redis->exists($key);  }  /**   * 為一個key設定過期時間 單位為秒   * @param unknown $key   * @param unknown $expire   */  public function expire($key,$expire)  {    return $this->redis->expire($key,$expire);  }  /**   * 返回一個key還有多久過期,單位秒   * @param unknown $key   */  public function ttl($key)  {    return $this->redis->ttl($key);  }  /**   * 設定一個key什么時候過期,time為一個時間戳   * @param unknown $key   * @param unknown $time   */  public function exprieAt($key,$time)  {    return $this->redis->expireAt($key,$time);  }  /**   * 關閉服務器鏈接   */  public function close()  {    return $this->redis->close();  }  /**   * 關閉所有連接   */  public static function closeAll()  {    foreach(static::$_instance as $o)    {      if($o instanceof self)        $o->close();    }  }  /** 這里不關閉連接,因為session寫入會在所有對象銷毀之后。  public function __destruct()  {    return $this->redis->close();  }  **/  /**   * 返回當前數據庫key數量   */  public function dbSize()  {    return $this->redis->dbSize();  }  /**   * 返回一個隨機key   */  public function randomKey()  {    return $this->redis->randomKey();  }  /**   * 得到當前數據庫ID   * @return int   */  public function getDbId()  {    return $this->dbId;  }  /**   * 返回當前密碼   */  public function getAuth()  {    return $this->auth;  }  public function getHost()  {    return $this->host;  }  public function getPort()  {    return $this->port;  }  public function getConnInfo()  {    return array(      'host'=>$this->host,      'port'=>$this->port,      'auth'=>$this->auth    );  }  /*********************事務的相關方法************************/  /**   * 監控key,就是一個或多個key添加一個樂觀鎖   * 在此期間如果key的值如果發生的改變,剛不能為key設定值   * 可以重新取得Key的值。   * @param unknown $key   */  public function watch($key)  {    return $this->redis->watch($key);  }  /**   * 取消當前鏈接對所有key的watch   * EXEC 命令或 DISCARD 命令先被執行了的話,那么就不需要再執行 UNWATCH 了   */  public function unwatch()  {    return $this->redis->unwatch();  }  /**   * 開啟一個事務   * 事務的調用有兩種模式Redis::MULTI和Redis::PIPELINE,   * 默認是Redis::MULTI模式,   * Redis::PIPELINE管道模式速度更快,但沒有任何保證原子性有可能造成數據的丟失   */  public function multi($type=/Redis::MULTI)  {    return $this->redis->multi($type);  }  /**   * 執行一個事務   * 收到 EXEC 命令后進入事務執行,事務中任意命令執行失敗,其余的命令依然被執行   */  public function exec()  {    return $this->redis->exec();  }  /**   * 回滾一個事務   */  public function discard()  {    return $this->redis->discard();  }  /**   * 測試當前鏈接是不是已經失效   * 沒有失效返回+PONG   * 失效返回false   */  public function ping()  {    return $this->redis->ping();  }  public function auth($auth)  {    return $this->redis->auth($auth);  }  /*********************自定義的方法,用于簡化操作************************/  /**   * 得到一組的ID號   * @param unknown $prefix   * @param unknown $ids   */  public function hashAll($prefix,$ids)  {    if($ids==false)      return false;    if(is_string($ids))      $ids=explode(',', $ids);    $arr=array();    foreach($ids as $id)    {      $key=$prefix.'.'.$id;      $res=$this->hGetAll($key);      if($res!=false)        $arr[]=$res;    }    return $arr;  }  /**   * 生成一條消息,放在redis數據庫中。使用0號庫。   * @param string|array $msg   */  public function pushMessage($lkey,$msg)  {    if(is_array($msg)){      $msg  =  json_encode($msg);    }    $key  =  md5($msg);    //如果消息已經存在,刪除舊消息,已當前消息為準    //echo $n=$this->lRem($lkey, 0, $key)."/n";    //重新設置新消息    $this->lPush($lkey, $key);    $this->setex($key, 3600, $msg);    return $key;  }  /**   * 得到條批量刪除key的命令   * @param unknown $keys   * @param unknown $dbId   */  public function delKeys($keys,$dbId)  {    $redisInfo=$this->getConnInfo();    $cmdArr=array(      'redis-cli',      '-a',      $redisInfo['auth'],      '-h',      $redisInfo['host'],      '-p',      $redisInfo['port'],      '-n',      $dbId,    );    $redisStr=implode(' ', $cmdArr);    $cmd="{$redisStr} KEYS /"{$keys}/" | xargs {$redisStr} del";    return $cmd;  }}

希望本文所述對大家PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美第一淫aaasss性| 日韩电影免费观看在线| 日本不卡视频在线播放| 日韩免费不卡av| 亚洲精品中文字| 国产91热爆ts人妖在线| 4388成人网| 国产视频观看一区| 亚洲人成欧美中文字幕| 国模精品视频一区二区| 亚洲男子天堂网| 热久久美女精品天天吊色| 欧美激情乱人伦| 亚洲加勒比久久88色综合| 成人在线免费观看视视频| 66m—66摸成人免费视频| 亚洲天堂第二页| 日韩欧美在线免费| 亚洲一区制服诱惑| 精品亚洲aⅴ在线观看| 国产精品久久久久av免费| 26uuu另类亚洲欧美日本一| 亚洲最大av在线| 日韩av手机在线| 国产精品黄视频| 亚洲a∨日韩av高清在线观看| 国产精品av在线播放| 青青草99啪国产免费| 欧美成人免费va影院高清| 欧美激情性做爰免费视频| 在线日韩av观看| 久久久久久久亚洲精品| 日韩欧美在线视频| 亚洲精品成人久久| 91久久在线观看| 日本中文字幕久久看| 91欧美精品成人综合在线观看| 亚洲第一精品夜夜躁人人爽| 国产精品久久久久久久久久久新郎| 国产裸体写真av一区二区| 综合网日日天干夜夜久久| 精品久久久久久久久久久久久| 欧美成人免费va影院高清| 亚州av一区二区| 成人做爰www免费看视频网站| 性色av香蕉一区二区| 国产精品男人爽免费视频1| 欧洲美女7788成人免费视频| 亚洲美女在线看| 亚洲第一视频网站| 欧美激情一区二区久久久| 操日韩av在线电影| 狠狠色香婷婷久久亚洲精品| 日韩高清av在线| 亚洲成人999| 亚洲精品456在线播放狼人| 欧美视频在线观看免费网址| 97精品国产aⅴ7777| 精品视频在线观看日韩| 91啪国产在线| 日本亚洲精品在线观看| 国产一区二区三区在线| 琪琪第一精品导航| 欧美激情在线播放| 久久综合国产精品台湾中文娱乐网| 97超碰国产精品女人人人爽| 国产精品久久久久久av下载红粉| 国产区精品在线观看| 久久伊人91精品综合网站| 精品少妇一区二区30p| 欧美国产亚洲精品久久久8v| 黑人精品xxx一区一二区| 91精品国产91久久久久| 欧美成人剧情片在线观看| 国产精品日韩av| 欧美激情精品久久久久久大尺度| 精品亚洲国产成av人片传媒| 欧美在线视频一二三| 91国产在线精品| 欧美国产高跟鞋裸体秀xxxhd| 九九热最新视频//这里只有精品| 亚洲xxxxx性| 日韩av在线网址| 国产精品高潮视频| 欧美野外猛男的大粗鳮| 成人夜晚看av| 最近中文字幕mv在线一区二区三区四区| 欧美午夜片在线免费观看| 精品国产视频在线| 一级做a爰片久久毛片美女图片| 成年无码av片在线| 日韩在线视频国产| 亚洲精品视频在线播放| 人人做人人澡人人爽欧美| 国产精品国产三级国产专播精品人| 久久久久九九九九| 成人免费观看网址| 高清在线视频日韩欧美| 在线a欧美视频| 色伦专区97中文字幕| 欧美最猛性xxxxx(亚洲精品)| 亚洲女人天堂网| 中文综合在线观看| 亚洲的天堂在线中文字幕| 亚洲成色999久久网站| 国产精品免费在线免费| 国产精品ⅴa在线观看h| 91日本在线视频| 91极品女神在线| 福利视频导航一区| 日本高清视频精品| 久久精品电影一区二区| 国产精品69久久| 91精品免费视频| 亚洲美腿欧美激情另类| 欧美精品www在线观看| 国产精品大陆在线观看| 久久91精品国产91久久跳| 69视频在线免费观看| 欧美理论电影在线播放| 欧美另类在线播放| 91精品国产成人| 成人在线精品视频| 亚洲аv电影天堂网| 色婷婷久久av| 久久精品91久久香蕉加勒比| 亚洲天堂色网站| 亚洲石原莉奈一区二区在线观看| 一本色道久久88亚洲综合88| 国产91精品最新在线播放| 国产欧美一区二区三区视频| 欧美成人免费全部观看天天性色| 亚洲精品国产精品国自产在线| 57pao成人国产永久免费| 久久影院免费观看| 国产一区二区在线免费视频| 日韩人在线观看| 欧美国产精品人人做人人爱| 国产精品成人在线| 国产精品永久免费在线| 日韩在线视频二区| 久久人人爽人人爽人人片av高请| 亚洲欧美国产制服动漫| 日韩视频精品在线| 亚洲视频一区二区三区| 国产成人一区二区| 亚洲欧美中文在线视频| 亚洲在线视频观看| 伊人av综合网| 亚洲成人av在线播放| 亚洲爱爱爱爱爱| 另类专区欧美制服同性| 伊人伊人伊人久久| 亚洲黄页视频免费观看| 国产在线视频欧美| 欧美成人在线免费视频| 久久久伊人日本| 亚洲人成毛片在线播放| 国产在线拍揄自揄视频不卡99| 欧美男插女视频| 国产一区二区三区在线观看视频| 国产欧美日韩亚洲精品| 欧美一级片久久久久久久| 欧美成人精品激情在线观看|