1. 程式人生 > >【小鎮的技術天梯】微信投票實戰,利用Redis儲存session效能優化。

【小鎮的技術天梯】微信投票實戰,利用Redis儲存session效能優化。

【為什麼要用Redis?Redis快啊!而且Redis適合儲存session這種不重要的資訊,伺服器斷電session消失了就消失了】

【大家好,小鎮又來了,自從上次解決了投票人數過多導致渣渣伺服器卡死問題之後,小鎮就一直在用瀏覽器F12 Network檢視各種可以優化速度的方法】

【小鎮優化的頁面是點選進去後的頁面,第一個頁面圖太多速度慢也沒有辦法,不過下次可以用Jquery的lazyload來按需載入就行了。不過小鎮懶得弄了!重複的技術小鎮不想用,慢就慢點吧~】

進入正題,微信開發中一個比較重要和核心的環節就是獲取使用者的openid(等於是使用者的唯一識別符號),然而獲取openid的方法比較麻煩。要獲取openid,必須要通過OAuth2.0來完成網頁授權才能完成的,通過OAuth2.0來完成網頁授權後,在經過使用者許可後,就可以通過授權頁面,獲得使用者的openid。

【小鎮說的大白話一點就是,你的網頁帶些必要的引數傳送到微信的伺服器後,微信伺服器根據你的引數進行授權並攜帶相應的授權引數跳轉到你原來的頁面】

如何通過OAuth2.0網頁授權呢?要先通過申請高階介面功能,然後請自己看文件奮鬥


反正就是你要獲取使用者openid,你要跳轉兩次網頁,這真是浪費時間。然後小鎮就想到了用mysql記錄下使用者的sessionid,然後用sessionid對應一個openid就是了。

【但是!小鎮不喜歡做這種無聊的碼農活兒,咱這次用記憶體資料庫Redis,在單機上Redis的效能要比memcached要好點,而且redis支援的資料結構也多】

首先是安裝Redis,單位的伺服器是Linux,就按照老一套的方法安裝就是了,就是這裡需要改個原始碼中的c檔案,在Windows中安裝就簡單多了。然後安裝php的redis擴充套件外掛,生成so動態共享庫放到php的擴充套件目錄下就行了,這個大家應該都會的,不會的百度下哦~

然後在Linux中把Redis的伺服器啟動,命令麼,./redis-sever -c redis.conf 之類的,然後試試./redis-cli,看看能不能進入redis的命令列,如果能進入的話Redis就算是裝好了。

最後在php中敲入程式碼就行了。小鎮這裡的程式碼是這樣的:

<span style="font-size:18px;">session_start();
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$openId = $redis->get(session_id());

if (!$openId) {
//獲取使用者openid
    $tools = new JsApiPay();
    $openId = $tools->GetOpenid();
    $redis->set(session_id(), $openId);
}</span>
【哈哈哈,很簡單把。就是儲存個鍵值對唄,網上還有高階點的方法,就是改php的配置檔案,讓session的儲存路徑直接存到redis伺服器的地址上去,不過小鎮就不煩著弄這個了,反正效能也不會快到哪裡去】