1. 程式人生 > >web開發之線上人數統計

web開發之線上人數統計

需求:

統計當前線上人數(當前訪問網站的使用者)

思路:

第一步,把訪客的資訊存入到資料庫,每次訪問或者重新整理頁面的時候,都更新該訪客在資料庫中的記錄,也就是更新該訪客的最後活動時間。

第二步,刪除很長時間 “無動作” 的訪客記錄,保證資料表裡面的資料最新。

問題:

思路中的第一步沒有問題,問題在於第二步。假設我的應用訪客併發數為100萬,那麼我的資料訪客表中的資料至少有100萬條,如果每個使用者每次訪問都要遍歷整張表,找出“無動作”的使用者,然後把他的記錄刪掉,所耗資源太大。

解決方法:

模仿session的回收機制。php處理session的機制是,設定一個概率,讓使用者有一定概率觸發php的垃圾回收程式,從而刪除沒用的session檔案。php的配置檔案裡面有session.gc_probability = 1;session.gc_divisor     = 100;這兩個設定,這裡表示有1/100的概率觸發gc程序。就是說,100個使用者訪問,當呼叫session_start()的時候,可能會有一次觸發gc程序,從而刪除無用的session檔案。

所以,我們也可以採用這個思想,設定一個概率,讓使用者訪問的時候,有概率地觸發【刪除“無動作”的使用者】的操作。

具體程式碼實現:

   建立資料庫:test

建立資料庫表:pre_online

session_id,activity_time

php程式碼:

<?php
    session_start();
    header('Content-Type:text/html;charset=utf8');
    date_default_timezone_set('UTC');
    $conn = @mysql_connect('127.0.0.1','root','') or die('connect fail');
    $db = mysql_select_db('test');
    mysql_query('set names utf8');

    $time = 20;//過期時間
    $rand = rand(1,10);//生成1到10隨機數,表示1/10的概率
    /* 更新線上使用者最後活動時間 */
    $info_sql = mysql_query('select * from online where session_id="'.session_id().'"');
    if(mysql_affected_rows()>0){
    	$sql = 'UPDATE online set active_time='.time().' where session_id="'.session_id().'"';
    }else{
    	$sql = 'INSERT into online(session_id,active_time) VALUES("'.session_id().'",'.time().')';	
    }
    mysql_query($sql);
    /* 有概率地刪除離線使用者,類似於session的垃圾回收機制 */
    if($rand==1){
    	mysql_query('DELETE FROM online WHERE active_time<'.(time()-$time));
    }
?>

相關推薦

web開發線上人數統計

需求: 統計當前線上人數(當前訪問網站的使用者) 思路: 第一步,把訪客的資訊存入到資料庫,每次訪問或者重新整理頁面的時候,都更新該訪客在資料庫中的記錄,也就是更新該訪客的最後活動時間。 第二步,刪

REDIS實踐線上人數統計幾種方案分析

線上人數統計業務是我們開發web肯定要設計的業務邏輯,本文就會給出幾種設計方案,來分析下各個方案的優缺點: 使用有序集合這種方案能夠同時儲存線上的使用者 和 使用者上線時間,能夠執行非常多的聚合計算,但是所消耗的記憶體也是非常可觀的。 使用集合這種方案能儲存線上的使用者,

移動web開發像素和DPR

javascript element 英語單詞 計算機 web開發 定義  像素,又稱畫素,是圖像顯示的基本單位,譯自英文“pixel”,pix是英語單詞picture的常用簡寫,加上英語單詞“元素”element,就得到pixel,故“像素”表示“圖像元素”之意,有時亦被稱為pel(pi

web開發菜鳥的代碼規範

好的編碼 ray function 指定 參數說明 原則 特殊 第一個 約定 筆者菜鳥裏最不會飛的那個,所以這些基礎的習慣都沒養成,正好抽時間特意做個筆記以方便自己規範代碼, 有興趣的大佬多多指點. 養成好的編碼習慣收益良多, 總結下編碼時應註意的細節《借鑒高程裏代碼約束》

移動WEB開發JS內置touch事件[轉]

調用 位置 .com 構造 turn listener 附件 cli 瀏覽器 iOS上的Safari也支持click 和mouseover等傳統的交互事件,只是不推薦在iOS的瀏覽器應用上使用click和mouseover,因為這兩個事件是為了支持鼠標點擊而設計 出來的。

Web開發404小結

eba 場景 服務器 ffffff 頁面 round 分析 根目錄 str 404算是Web工程裏最常見的錯誤代號了。今天做一個小結: 場景:【Tomcat運行正常,但無法訪問自己建的項目:404】 結果:在URL拼寫正確的情況下,無法訪問目標工程任何頁面 信息:【40

web開發負載均衡的簡單架構

linu live relative iptable 方案 ont tex pad 心跳 負載均衡 負載均衡的核心思想就是:請求分擔 最簡單的配置: 一臺負載均衡服務器 兩臺webserver服務器 兩臺webserver服務器需要配置相同的服務器環境,設置相同的域名指向

python web開發flask框架學習(2) 加載模版

模版文件 簡書 nbsp 什麽 blog python 目錄 pan col 上次學習了flask的helloword項目的創建,這次來學習flask項目的模版加載: 第一步:創建一個flask項目 第二步:在項目目錄的templates文件夾下創建一個html文件

Python Web開發

markdown OS utils ask href .cn http www. class Flask相關 1、DBUtils數據庫連接池 2、Flask之初體驗 Python Web開發之路

Flask web開發路二

一個 del 入口 return 計算機 span fig 服務器 pos 今天創建第一個flask項目,主app文件代碼如下: # 從flask這個框架導入Flask這個類 from flask import Flask #初始化一個Flask對象 # Flasks()

Flask web開發路三

用戶訪問 abc gpo 得到 int bsp -a route ask 今天寫一個URL傳參、反轉URL、頁面跳轉和重定向 URL傳參 主app文件代碼: from flask import Flask app = Flask(__name__) @app.ro

Flask web開發路四

color ase 如果 utf-8 pos char 渲染 turn pan jinjia2模板 模板渲染和參數傳遞 項目結構如下: 主app文件代碼: from flask import Flask,render_template app = Flask(__na

Flask web開發路六

RM AR rac 默認 行修改 mysq ase style mysqldb 今天寫SQLAlchemy數據庫 首先介紹ORM的概念: ORM,Object類,Relationship:關系,Mapping:映射,也就是模型關系映射 flask-sqlalchemy是一

Flask web開發路九

world art 更改 vertical all alc 綁定 integer scripts 首先介紹循環引用的問題: 當一個模塊需要引用另一個模塊的類,而另一個模塊又需要引用這個模塊的類時,就出現了循環引用,而沒法導入類,這時候可以切斷其中一條引用路徑,增加一個模塊

Flask web開發路十四

format 數據模型 檢索 HA 分享 mysql ora add 數據庫初始 今天開始Flask的實戰,創建一個項目,實現包括用戶登錄、註冊、註銷、發表博客、評論以及檢索等功能 首先給出項目結構: 1.config.py文件: 存放各種配置信息 import os

go web開發url路由設計

概述 最近在搞自己的go web開發框架, 反正也沒打算私藏, 所以現在先拿出url路由設計這塊來寫一篇部落格. 做過web開發的都知道, 一個好的url路由可以讓使用者瀏覽器的位址列總有規律可循, 可以讓我們開發的網站更容易讓搜尋引擎收錄, 可以讓我們開發者更加方便的MVC. 我們

web開發小白的入門

https://blog.csdn.net/maoxunxing/article/details/79798664 ** 框架的選擇 前端框架有以下幾種: JQuery 最強大的JS庫,最基本的,應該掌握。 Bootstrap CSS框架 Angul

JavaWeb實訓專案案例開發線上圖書網站開發【非常適合初學者】

須知: 本篇教程僅限功能性開發,不包括真實業務邏輯,非常適合初學者上手開發。 手寫程式碼從前臺貫串後臺,沒有花哨的介面和友好性的js指令碼提示 由於功能性較多,目前隻手寫了新增和查詢功能。 修改和刪除功能後續上線 — 有疑問、或者又更簡單、更優秀的方法請在下方評論區留言!感謝

web開發flask簡介

文章目錄 1. 基本概念 1.1 初始化 1.2 路由和檢視函式 1.3 上下文 1.4 響應和重定向 1.5 Flash訊息傳遞 2. 模板 2.1 渲染過程 2.2 控制結構 2.3 bootstrap 3

【SpringBoot學習路】10.Web開發靜態資源的對映規則

轉載宣告:商業轉載請聯絡作者獲得授權,非商業轉載請註明出處.原文來自 © 呆萌鍾【SpringBoot學習之路】10.Web開發之靜態資源的對映規則  簡介 使用SpringBoot 建立SpringBoot應用,選中我們需要的模組; S