redis下高併發投票設計

2021-07-23 14:41:40 字數 2641 閱讀 7718

最近閒來無事,研究了下redis,看過書籍之後,為了理解的更透徹,就實踐寫乙個例子。

先說寫投票吧,具體的流程是使用者可以發起投票,發起成功後,其他使用者可以投票,首頁顯示話題標題,票數和時間等資訊。

我使用的redis設計了五個表乙個是文章表,儲存話題的相關資訊,乙個評分表,乙個話題被投票評分就增加,乙個是時間表,用來後期按時間對話題進行排序,乙個是投票表,用的是單ip限制,乙個ip一天只能投一次票,最後乙個次數表,乙個ip一天最多發布5個話題。

好了資料庫設計完我們就開始做吧,我用的是php寫的,主要功能:

(1)使用者可以發布投票,單ip一天最多發布5個話題;

(2)使用者投票,單ip一天只能投一次;

(3)發布人不能對自己的文章投票;

(4)可以按照話題評分和發布時間進行排序;

下面附上主要**和截圖(投票介面樣式太差就不展示了

資料庫設計

核心**:

//獲取投票文章

public function vote_list(request

$request)if

(!empty

($result))}

//發布文章投票

//每個ip發布最多5個

$k =

'counts:';if

($this

->get_zadd_any($k,

$ip))

$this

->update_zadd_any($k,

1,$ip);

}else

$article_id

= $this

->get_incr_id();

//把發布文章使用者ip寫到已投票名單並設定時間為一天

$voted

= 'voted:'

. $article_id

;$this

->sadd_add(

$voted

,$ip

);$this

->set_time(

$voted

,env(

'article_end'

));$now

= time

();$article

= 'article:'

. $article_id

;//儲存文章資訊

$value

= array

('article_id'

=>

$article

,'title:'

=>

$title

,'poster:'

=>

$user

,'time:'

=>

$now

,'votes:'

=> 1,

);$resdata

= returnapi

::addresult

();foreach

($value

as $k

=>$v)

return response()

->json(

$resdata);}

//將文章儲存在根據時間和評分排序的有序集合

$this

->zadd_add(

'score:'

,env(

'vote_score'

),$article

);$this

->zadd_add(

'time:'

,$now

,$article

);$resdata

= returnapi

::addresult

($id=2

);return response()

->json(

$resdata);}

}//投票

public function votes(request

$request

)$article_id

= substr

($article,-

1);# 使用者第一次投票就增加投票數

$resdata

= returnapi

::addresult

($id=4

);if

($this

->sadd_add(

'voted:'

. $article_id

, $ip

))return response()

->json(

$resdata);}

}

springboot下redis高併發下的快取穿透

public responsebody string getclassesbyid pathvariable id integer id return redistemplate.opsforvalue get classes 從redis中拿 這樣看單機條件下沒有問題但是高併發下還是會存在多個使用...

Redis高併發和高可用

如何保證 redis 的高併發和高可用?redis 的主從複製原理能介紹一下麼?redis 的哨兵原理能介紹一下麼?其實問這個問題,主要是考考你,redis 單機能承載多高併發?如果單機扛不住如何擴容扛更多的併發?redis 會不會掛?既然 redis 會掛那怎麼保證 redis 是高可用的?其實針...

Redis 高可用高併發集群配置

高可用 24小時對外提供服務 高併發 同一時間段能處理的請求數 意思是所有的節點都要有乙個主節點 缺點 中心掛了,服務就掛了 中心處理資料的能力有限,不能把節點效能發揮到最大 特點 就是乙個路由作用 特點 去掉路由,我自己來路由 以上通俗的就是 中心化 幾個經過認證的嘉賓在 講話 所有其他人在聽。去...