1. 程式人生 > 其它 >簡述php&&redis實現視訊點贊

簡述php&&redis實現視訊點贊

一、快取 vs 資料庫?

首先按照傳統思路會在資料庫裡面建個欄位放點贊數量,但是仔細一想,訪問資料量一大,頻繁對一個欄位訪問,肯定會造成資料庫堵塞,訪問介面超時,嚴重的時候伺服器會報404,這要是出現在線上,老闆肯定會叼你一頓。閒話少說。

在一些特殊的場景下,傳統的關係型資料庫很可能無法滿足我們的需求。比如,在訪問量較大的情況下,資料庫很可能會宕機或者訪問速度非常慢。這對使用者來說是不能容忍的。因此就有了非關係型資料庫,如 Redis 作為快取,將資料放到記憶體中,實現資料的快速獲取。下面我們就來看看如何使用 Redis 快取實現視訊點贊功能。

二、php實現視訊點贊

在配置檔案中把redis作為快取,這是實現後面的前提,切記改為redis!!!

1、php引入redis

2、使用redis命令實現點贊

Redis 可以儲存鍵與 5 種不同資料結構型別之間的對映,這 5 種資料結構型別分別為 String(字串)、List(列表)、Set(集合)、Hash(雜湊)和 Zset(有序集合)。

先來看一下他們的特點:

string(字串),採用鍵值對的方式儲存,不適合點贊

list(列表),按照順序排序,通常用在秒殺方面

set(集合),是string型別的無序集合,可以將使用者記錄進去

zset(有序集合),是string型別的有序集合,用在排名方面,

為什麼我們要用集合呢,因為他們的關係是一對多,一個視訊id對應多個點贊使用者,並且是無序的,也就不需要排序,所以我們用視訊id作為key,集合裡面放點贊使用者的id,實現點贊。用字串存視訊播放資料

3、程式碼實現部分

 1 //SISMEMBER方法主要用來判斷使用者在不在集合裡面
 2 $click = Cache::SISMEMBER('video'.'_'.$data['vid'],$data['uid']);
 3         if($has_click){
 4              //當用戶取消點贊時,將使用者從集合裡面移除
 5             $has = Cache::SREM('video.'_'.$data['vid'],$data['uid']);
 6             if($has){
 7                 return success('取消成功');
8 }else{ 9 return fail('失敗'); 10 } 11 }else{ 12 //加入使用者收藏列表 13 Cache::append('video'.'_'.$data['vid'],$data['uid']); 14 //視訊播放次數加一 15 Cache::INCR('play_'.$data['vid'].$data['uid']); 16 //還可以用佇列放到資料中 17 return success('收藏成功'); 18 }

三、總結

舉一反三,很多場景下的業務,都需要用到redis,比如簽到,排名,點贊,收藏,一些重要的資料可以放到資料庫裡面,不重要的資料放到快取裡面,可以減少資料庫的開銷。