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