zoukankan      html  css  js  c++  java
  • 微博,and java 多线程编程 入门到精通 将cpu 的那个 张振华

    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堆内存模型
    java内存模型
    java垃圾回收过程
    找出给定的一个字符串中最长的不重复子串,不重复子串即一个子串中不出现两个相同的字符
    学习tomcat(八)
    学习Redis(二)
    学习k8s(四)
    学习docker(三)
    学习MySql(一)
  • 原文地址:https://www.cnblogs.com/mrxiaohe/p/6757456.html
Copyright © 2011-2022 走看看