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