有時候我們在論壇或博客中,想知道哪些用戶在線,這個邏輯如果用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);
- 即可獲取其中的詳細信息。