最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP基于redis計數器類定義與用法示例

 更新時間:2018年02月08日 10:53:37   作者:傲雪星楓  
這篇文章主要介紹了PHP基于redis計數器類定義與用法,結合實例形式較為詳細的分析了php定義的redis計數器類及其相關使用技巧,需要的朋友可以參考下

本文實例講述了PHP基于redis計數器類定義與用法。分享給大家供大家參考,具體如下:

Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value數據庫,并提供多種語言的API。

這里使用其incr(自增),get(獲取)delete(清除)方法來實現計數器類。

1.Redis計數器類代碼及演示實例

RedisCounter.class.php

<?php
/**
 * PHP基于Redis計數器類
 * Date:  2017-10-28
 * Author: fdipzone
 * Version: 1.0
 *
 * Descripton:
 * php基于Redis實現自增計數,主要使用redis的incr方法,并發(fā)執(zhí)行時保證計數自增唯一。
 *
 * Func:
 * public incr  執(zhí)行自增計數并獲取自增后的數值
 * public get   獲取當前計數
 * public reset  重置計數
 * private connect 創(chuàng)建redis連接
 */
class RedisCounter{ // class start
  private $_config;
  private $_redis;
  /**
   * 初始化
   * @param Array $config redis連接設定
   */
  public function __construct($config){
    $this->_config = $config;
    $this->_redis = $this->connect();
  }
  /**
   * 執(zhí)行自增計數并獲取自增后的數值
   * @param String $key 保存計數的鍵值
   * @param Int  $incr 自增數量,默認為1
   * @return Int
   */
  public function incr($key, $incr=1){
    return intval($this->_redis->incr($key, $incr));
  }
  /**
   * 獲取當前計數
   * @param String $key 保存計數的健值
   * @return Int
   */
  public function get($key){
    return intval($this->_redis->get($key));
  }
  /**
   * 重置計數
   * @param String $key 保存計數的健值
   * @return Int
   */
  public function reset($key){
    return $this->_redis->delete($key);
  }
  /**
   * 創(chuàng)建redis連接
   * @return Link
   */
  private function connect(){
    try{
      $redis = new Redis();
      $redis->connect($this->_config['host'],$this->_config['port'],$this->_config['timeout'],$this->_config['reserved'],$this->_config['retry_interval']);
      if(empty($this->_config['auth'])){
        $redis->auth($this->_config['auth']);
      }
      $redis->select($this->_config['index']);
    }catch(RedisException $e){
      throw new Exception($e->getMessage());
      return false;
    }
    return $redis;
  }
} // class end
?>

demo.php

<?php
Require 'RedisCounter.class.php';
// redis連接設定
$config = array(
  'host' => 'localhost',
  'port' => 6379,
  'index' => 0,
  'auth' => '',
  'timeout' => 1,
  'reserved' => NULL,
  'retry_interval' => 100,
);
// 創(chuàng)建RedisCounter對象
$oRedisCounter = new RedisCounter($config);
// 定義保存計數的健值
$key = 'mycounter';
// 執(zhí)行自增計數,獲取當前計數,重置計數
echo $oRedisCounter->get($key).PHP_EOL; // 0
echo $oRedisCounter->incr($key).PHP_EOL; // 1
echo $oRedisCounter->incr($key, 10).PHP_EOL; // 11
echo $oRedisCounter->reset($key).PHP_EOL; // 1
echo $oRedisCounter->get($key).PHP_EOL; // 0
?>

輸出:

0
1
11
1
0

2.并發(fā)調用計數器,檢查計數唯一性

測試代碼如下:

<?php
Require 'RedisCounter.class.php';
// redis連接設定
$config = array(
  'host' => 'localhost',
  'port' => 6379,
  'index' => 0,
  'auth' => '',
  'timeout' => 1,
  'reserved' => NULL,
  'retry_interval' => 100,
);
// 創(chuàng)建RedisCounter對象
$oRedisCounter = new RedisCounter($config);
// 定義保存計數的健值
$key = 'mytestcounter';
// 執(zhí)行自增計數并返回自增后的計數,記錄入臨時文件
file_put_contents('/tmp/mytest_result.log', $oRedisCounter->incr($key).PHP_EOL, FILE_APPEND);
?>

測試并發(fā)執(zhí)行,我們使用ab工具進行測試,設置執(zhí)行150次,15個并發(fā)。

ab -c 15 -n 150 http://localhost/test.php

執(zhí)行結果:

ab -c 15 -n 150 http://localhost/test.php
This is ApacheBench, Version 2.3 <$Revision: 1554214 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking home.rabbit.km.com (be patient).....done
Server Software:    nginx/1.6.3
Server Hostname:    localhost
Server Port:      80
Document Path:     /test.php
Document Length:    0 bytes
Concurrency Level:   15
Time taken for tests:  0.173 seconds
Complete requests:   150
Failed requests:    0
Total transferred:   24150 bytes
HTML transferred:    0 bytes
Requests per second:  864.86 [#/sec] (mean)
Time per request:    17.344 [ms] (mean)
Time per request:    1.156 [ms] (mean, across all concurrent requests)
Transfer rate:     135.98 [Kbytes/sec] received
Connection Times (ms)
       min mean[+/-sd] median  max
Connect:    0  0  0.2   0    1
Processing:   3  16  3.2   16   23
Waiting:    3  16  3.2   16   23
Total:     4  16  3.1   17   23
Percentage of the requests served within a certain time (ms)
 50%   17
 66%   18
 75%   18
 80%   19
 90%   20
 95%   21
 98%   22
 99%   22
 100%   23 (longest request)

檢查計數是否唯一

生成的總計數

wc -l /tmp/mytest_result.log
   150 /tmp/mytest_result.log

生成的唯一計數

sort -u /tmp/mytest_result.log | wc -l
   150

可以看到在并發(fā)調用的情況下,生成的計數也保證唯一。

更多關于PHP相關內容感興趣的讀者可查看本站專題:《php+redis數據庫程序設計技巧總結》、《php面向對象程序設計入門教程》、《PHP基本語法入門教程》、《PHP數組(Array)操作技巧大全》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總

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

相關文章

  • PHP 處理圖片的類實現代碼

    PHP 處理圖片的類實現代碼

    PHP 處理圖片的類實現代碼,需要的朋友可以參考下。
    2009-10-10
  • php多層數組與對象的轉換實例代碼

    php多層數組與對象的轉換實例代碼

    通過json_decode(json_encode($object)可以將對象一次性轉換為數組,但是object中遇到非utf-8編碼的非ascii字符則會出現問題,比如gbk的中文,何況json_encode和decode的性能也值得疑慮
    2013-08-08
  • php eval函數一句話木馬代碼

    php eval函數一句話木馬代碼

    這個是php常見的一句話木馬的源碼,通過post木馬程序來實現木馬的植入,eval()函數把字符串按照PHP代碼來計算。該字符串必須是合法的PHP代碼,且必須以分號結尾。如果沒有在代碼字符串中調用return語句,則返回NULL。如果代碼中存在解析錯誤,則eval()函數返回false。
    2015-05-05
  • php簡單對象與數組的轉換函數代碼(php多層數組和對象的轉換)

    php簡單對象與數組的轉換函數代碼(php多層數組和對象的轉換)

    最近用到一些簡單的對象與數組的相互轉換的問題,寫個兩個方法如下,需要的朋友可以參考下。
    2011-05-05
  • PHP中魔術變量__METHOD__與__FUNCTION__的區(qū)別

    PHP中魔術變量__METHOD__與__FUNCTION__的區(qū)別

    這篇文章主要介紹了PHP中魔術變量__METHOD__與__FUNCTION__的區(qū)別,是深入學習PHP程序設計所必須掌握的概念,非常具有實用價值,需要的朋友可以參考下
    2014-09-09
  • PHP網頁緩存技術優(yōu)點及代碼實例

    PHP網頁緩存技術優(yōu)點及代碼實例

    這篇文章主要介紹了PHP網頁緩存技術優(yōu)點及代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • PHP執(zhí)行普通shell命令流程解析

    PHP執(zhí)行普通shell命令流程解析

    這篇文章主要介紹了PHP執(zhí)行普通shell命令流程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • php學習筆記之面向對象編程

    php學習筆記之面向對象編程

    一個php初學者的一個學習筆記的面向對象編程實例,有需要學習的朋友可參考下,腳本之家也更新了很多大家可以查閱下
    2012-12-12
  • 將二維數組轉為一維數組的2種方法

    將二維數組轉為一維數組的2種方法

    在開發(fā)過程中,我們經常需要將二維數組轉為一維數組,個人總結了2種方法,分享給大家
    2014-05-05
  • php實現快速排序法函數代碼

    php實現快速排序法函數代碼

    取一個值與其他值進行比較,小的放在這個值的左邊,大的放在這個值的右邊,然后按照這個方式遞歸
    2012-08-08

最新評論

广饶县| 抚顺县| 伊川县| 长宁县| 卓资县| 宜宾县| 勐海县| 名山县| 长沙市| 五莲县| 泰兴市| 凌海市| 玉龙| 来宾市| 平远县| 于都县| 巴林右旗| 习水县| 磐安县| 图片| 望谟县| 永春县| 潞西市| 珲春市| 蕉岭县| 海宁市| 台湾省| 东平县| 米泉市| 洪雅县| 昌图县| 安阳县| 花莲县| 柏乡县| 怀远县| 城口县| 乃东县| 五台县| 安阳县| 平昌县| 曲松县|