zoukankan      html  css  js  c++  java
  • blog

    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的人

  • 相关阅读:
    HDU 4278 Faulty Odometer 8进制转10进制
    hdu 4740 The Donkey of Gui Zhou bfs
    hdu 4739 Zhuge Liang's Mines 随机化
    hdu 4738 Caocao's Bridges tarjan
    Codeforces Gym 100187M M. Heaviside Function two pointer
    codeforces Gym 100187L L. Ministry of Truth 水题
    Codeforces Gym 100187K K. Perpetuum Mobile 构造
    codeforces Gym 100187J J. Deck Shuffling dfs
    codeforces Gym 100187H H. Mysterious Photos 水题
    windows服务名称不是单个单词的如何启动?
  • 原文地址:https://www.cnblogs.com/mrxiaohe/p/6700445.html
Copyright © 2011-2022 走看看