使用redis實現獲取在線用戶列表

有時候我們在論壇或博客中,想知道哪些用戶在線,這個邏輯如果用php如何實現呢?

以下是我的一種思路


  • 1分鐘內沒有任何操作可以認爲是下線。
  • 用戶Id爲1,
  • $key = 'online:1';
  • $value = json_encode(['name':'wangxiao','gender':'male','level':3]);
  • $redis->setnx($key,$value);          //在線用戶不重複
  • $redis->expire($key,60);


  • 如果用戶訪問了某一個頁面,如果已經登錄超時則跳轉到登錄頁面,否則重新設置key的過期時間
  • 從session數據中獲取到當前用戶Id,然後重置過期時間。
  • $key = 'online:1';
  • $redis->expire($key,60);


  • 如果用戶一直未訪問任何頁面,則到了過期時間(1分鐘),則redis自動銷燬該key,表示不在線了


  • 如果想知道當前所有的在線用戶,則$redis->keys('online:*');
  • 獲取到結果之後,可以去掉前綴 'online:',只取後半截就行了,獲取到所有的用戶Id之後,可以針對該key值來獲取實際的用戶信息。
  • $json_value = $redis->get($key);
  • $userInfo = json_decode($json_value,TRUE);
  • 即可獲取其中的詳細信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章