http://down.51cto.com/data/2263476 java 多線程編程 入門到精通 將cpu 的那個 張振華
多個用戶能夠同時用一個 vhost,可是vhost之間是隔離的。
不錯的rabbitmq系列教程
http://blog.csdn.net/chwshuang/article/category/6066031
在sort過程當中,會把獲得的結果,循環的替換*,而後在獲取值。 這個很相似於mysql中的左鏈接
微博關注關係
進入某一個用戶的頁面(傳一個參數,參數爲用戶的用戶名),獲取該用戶的uid
$proid = get user:username:"userName":userid
查看咱們是否已經關注了該用戶
sismember(followee:"咱們本身的id",$proid)//咱們已經登陸了,故咱們本身的id從cookie或者session中是能夠得到的
根據是否已關注,來決定頁面顯示的是「已關注」仍是「關注ta」,不管取消關注,仍是關注ta,咱們都須要傳兩個參數一個是 你要關注或者取消關注用戶的id,和選中的關注狀態 0 1
關注邏輯
1.不能本身關注本身,要關注 ,或者取消關注的人,是否存在
2.
sadd follwee:"當前登錄者的id" 地址欄上接收到的uid
3.
sadd follower:"地址欄上接收到的uid" 當前登錄者的id
4.獲取你要粉的用戶的用戶名,或者這個的目的是爲了跳轉到你粉的人的頁面。由於你粉的人的頁面,須要傳該用戶的用戶名
get user:userid:"從地址欄獲取到的uid":username
5.取消關注
srem follwee:"當前登錄者的id" 地址欄上接收到的uid
srem follower:"地址欄上接收到的uid" 當前登錄者的id
使用推的方式,發送給粉絲
1.查找本身的粉絲集合
get smembers follower:"本身的uid"
2.咱們爲每個用戶都設置一個集合 receivepost:userid,這個集合裏面放置的都是該用戶本身和他關注的人的微博
當咱們發微博的時候咱們會循環執行
lpush receivepost:fansid $postid 把你發的微博的id,發送給你的粉絲們。也就是說你發了一條微博,其實是發了不少條,你有多少粉絲,就發了多少條
設置一下鏈表中,最大能保持的數據了
3.把本身接受到的微博id,都取出來,其中有本身的,本身關注的人的
ltrim receivepost:"本身的id" 0 49
排序?
4.經過微博id,把全部微博的內容,時間,發佈人都取出來。這裏出了一個問題,咱們要獲得一條微博,須要訪問3次redis,有點兒過分設計了,把微博拆的太開了。咱們應該把
微博id,時間,發佈者,作成一個hash就行了
本身的粉絲數 和本身的關注數
求集合的個數
scart follower:"本身的uid"
我關注的人的個數
scard followee:"本身的id"
共同關注,求交集便可
3天前的微博,入mysql
剛纔咱們是經過推的方式去實現粉絲和粉主之間的微博推送,就是說,當粉主發出一條微博的時候,向他的粉絲,一一的推送。每一個粉絲推送一份。使用for循環實現。
這就產生了一個問題,有的大V,他們的粉絲上千萬,若是他們發一條微博,咱們的redis中就會瞬間多出上千萬條數據。不合適。
因此比較適合的方式是使用拉的方式。當粉絲登陸的時候,自動去獲取本身粉主發的微博。咱們能夠設置一個最多能夠關注多少人。2000,這樣,最多也就2000次。
加強cookie安全
用戶登陸的時候,爲每個用戶設置一個編碼
set user:userid:"用戶的id":authsecret authsecret
在登陸持續期間,一直判斷cookie的用戶名 用戶id 和authsecret
因此在判斷是否登陸的時候,須要判斷用戶名和密碼外還須要判斷 authsecret
退出的時候: 須要把cookie銷燬,同時須要把redis中的authsecret銷燬掉
set user:userid:"用戶的id":authsecret ""
使用hash結構 更改blog
hmset post:postid (userid =>發微博用戶的id,time=>time(),content=>內容)
發微博的時候順便把username存進去
拉取模式
在咱們發微博的同時,維護一個有序的set,該set中維護這咱們最新發布的20條微博,zset的權重就是 postid
在每次添加的時候,使用zcard判斷zset的數量是否達到20,若是達到20,那麼使用Zremrangebyrank starpost:userid:用戶的id, 0 ,0把末尾的數據去掉(把權重最小的數據去掉)
Zremrangebyrank 命令用於移除有序集中,指定排名(rank)區間內的全部成員。
每當一個用戶登陸後,循環他所關注的star的userid,而後從starpost:userid:star的id 裏面取出 微博,而後存儲在一塊兒,再排序
微博冷數據如mysql
每個用戶在發佈微博的同時,維護一個鏈表,mypost:userid:本身的id,而後把發佈的微博id使用lpush命令 推動去
push以後,判斷該鏈表數量是否大於某個值(本身設定,該值即表明着某一個用戶本身所發的微博在redis中存多少,1000足以),若是大於這個值,則使用rpoplpush命令,把
多餘的數據推到全局鏈表global:store中,該鏈表中存儲的是全部用戶的非熱微博數據,待向mysql中寫入。
寫一個定時任務,定時查看global:store的數量,而後每次去除1000條,拼成sql語句,寫入mysql
查看followee:
aid 關注 bid
followee:aid aid關注的人
follower:bid 關注了bid的人java