Redis微博
更新時(shí)間 ?2016年8月1日 12:53:01
一.可行性研究
? ? >寫(xiě)個(gè)簡(jiǎn)單的模板熟練掌握redis的各種指令=>可行
? ? >當(dāng)某些用戶被關(guān)注的量過(guò)大的時(shí)候,比如超過(guò)一萬(wàn)了,推送系統(tǒng)負(fù)荷會(huì)特別大=>待修改
二、需求分析
? ? >目前這個(gè)模板,測(cè)試2~5個(gè)用戶。1G內(nèi)存的服務(wù)器內(nèi)存應(yīng)該是夠了
三、設(shè)計(jì)概要
——數(shù)據(jù)先存到mysql,再存到redis
1.注冊(cè)功能
????注冊(cè)功能包括:
? ? ? ? ? ? >用戶名是否存在
? ? ? ? ? ? >檢驗(yàn)注冊(cè)格式是否存在(因?yàn)榇舜问怯脕?lái)做測(cè)試的,所以不加入此功能)
? ? ? ? ? ? >錄入用戶名、密碼、自增的用戶ID
? ? ? ? ? ? >自動(dòng)登錄
?????對(duì)應(yīng)的key-value設(shè)計(jì) //這里的前綴名,一般指的類(lèi)似mysql中的表名
?????key0://自增id
? ? u?id
?????key1:
?????前綴名:id:username ?$username
?????key2:
?????前綴名:id:pwd??$pwd
?????key3:
?????前綴名:id:time??time()
? ? ?key4://登陸時(shí)需要
?????前綴名:$username? $uid
?????[示例]?供測(cè)試的php代碼
DB.php
<?php namespace HLZ; function connect(){static $redis=0;if($redis!=0){//是否已經(jīng)初始化過(guò)return $redis;}else{$redis = new \Redis();$redis -> connect("127.0.0.1","6379");$redis->select(1); //初始選庫(kù)return $redis;} } $r = connect();//返回連接后的對(duì)象register.php
<?php namespace HLZ; function if_exists($name="云天河Blog",$pwd="hlzblog.top"){require 'lib/DB.php';//連接redis數(shù)據(jù)庫(kù),返回redis類(lèi)的靜態(tài)對(duì)象$r$uid=$r->get("user:".$name);if( $uid>0 ){//用戶名->用戶id>相關(guān)信息echo "該用戶名已經(jīng)存在!";}else{$uid=$r->incr("uid");$uidMix="user:".$name;$nameMix="user:".$uid.":username";$pwdMix= "user:".$uid.":pwd" ;$timeMix= "user:".$uid.":time" ;$user_info=array($nameMix => $name,$pwdMix ?=> $pwd,$uidMix ?=> $uid,$timeMix -> time());$r->mset($user_info);echo "親愛(ài)的.".$name.", 歡迎您!";}echo "<br/>顯示所有key<pre>";$keys=$r->keys("*");var_dump($keys);echo "<br/>顯示所有key的值<pre>";var_dump($r->mget($keys)); } if_exists("云天河Blog");
2.登陸功能
登陸功能包括:
? ? ? ? ? ? >用戶名是否存在
? ? ? ? ? ? > 用戶名與密碼是否相對(duì)應(yīng)? ? ? ? ? ? >用戶名寫(xiě)入cookies,記錄當(dāng)前時(shí)間戳字符串,做身份驗(yàn)證
3.互相關(guān)注功能
消息推送功能包括:
? ? ? ? ? ? >粉絲與粉主關(guān)系,即每個(gè)用戶都得有兩張集合表,如following與follwer
? ???? ???? ???? ???查詢自己的粉絲smembers
? ???? ???? ???? ???key-value設(shè)計(jì)
?? ???? ???? ???? ??key1://[個(gè)人]關(guān)注他人的表
? ???? ???? ??? ? ??following:uid:$uid $their_id
?? ???? ???? ???? ??key2://[個(gè)人]文章
? ???? ???? ??? ? ??follower:uid:$uid $fans_id
4.發(fā)布功能
發(fā)布功能包括:
? ? ? ? ? ? >是否用戶本人,判斷
? ? ? ? ? ? >隊(duì)列存入[個(gè)人發(fā)布的隊(duì)列、全局大隊(duì)列],自己看的時(shí)候,截取20條可直接顯示,后面的視為冷數(shù)據(jù),存入mysql
? ? ? ? ? ? >每次用戶發(fā)布的信息都會(huì)存入,全局大隊(duì)列,設(shè)隊(duì)列的前50條為熱數(shù)據(jù)
? ? ? ? ? ? >關(guān)注的人信息的拉取,通過(guò) 前綴名, ? 存的順序都是username->content->time,
? ? ? ? ? ? >涉及刪除,所有的信息都要統(tǒng)一個(gè)pid
? ???? ???? ???? ???key-value設(shè)計(jì)
?? ???? ???? ???? ??key0://[全局]文章id,自增
? ???? ???? ??? ? ? ?pid?
?? ???? ???? ???? ??key1://[個(gè)人]文章
? ???? ???? ??? ? ? msg:uid:$uid:content $msg
??? ???? ???? ???? ??key2://[個(gè)人]時(shí)間,這里$time統(tǒng)一用一個(gè)time()時(shí)間戳
? ???? ???? ??? ? ??msg:uid:$uid:time $time
?? ???? ???? ???? ??key3://[個(gè)人]用戶名
? ???? ???? ??? ? ??msg:uid:$uid:name $username
?? ???? ???? ???? ??key4://[個(gè)人]用戶名
? ???? ???? ??? ? ??msg:uid:$uid:pid $pid
? ???? ???? ???? ???key5://[全局]時(shí)間
? ???? ???? ??? ? ??all::time $time
?? ???? ???? ???? ??key6://[全局]用戶名
? ???? ???? ??? ? ??all:name $username
?? ???? ???? ???? ??key7://[全局]文章
? ???? ???? ??? ? ? all:content $content
?? ???? ???? ???? ??key8://[自己看]文章
? ???? ???? ??? ? show:uid:$uid:time
?? ???? ???? ???? ??key9://[自己看]文章
? ???? ???? ??? ? show:uid:$uid:name $username
??? ???? ???? ???? ??key10://[自己看]時(shí)間
? ???? ???? ??? ? ??show:uid:$uid:time $time
?? ???? ???? ???? ??key11://[個(gè)人]用戶名
? ???? ???? ??? ? ??msg:uid:$uid:pid $pid
? ???? ???? ??? ? ??
5.消息推送功能
消息推送功能包括:
? ? ? ? ? ? >這里用List類(lèi)型即可解決
總結(jié)
- 上一篇: [windows版]搭建php的redi
- 下一篇: [全]php-redis函数使用