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

微博,and java 多线程编程 入门到精通 将cpu 的那个 张振华的更多相关文章

  1. Java入门-浅析Java学习从入门到精通【转】

    一. JDK (Java Development Kit)  JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库 ...

  2. GPU 编程入门到精通(五)之 GPU 程序优化进阶

    博主因为工作其中的须要,開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识.鉴于之前没有接触过 GPU 编程.因此在这里特地学习一下 GPU 上面的编程. 有志同道合的小伙 ...

  3. Java多线程编程实战指南(核心篇)读书笔记(五)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76730459冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  4. Java多线程编程实战指南(核心篇)读书笔记(四)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76690961冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  5. Java多线程编程实战指南(核心篇)读书笔记(三)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76686044冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  6. Java多线程编程实战指南(核心篇)读书笔记(二)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76651408冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  7. Java多线程编程实战指南(核心篇)读书笔记(一)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76422930冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  8. 真正的Java学习从入门到精通

    http://www.it.com.cn/f/edu/059/6/169189.htm 一. 工具篇JDK (Java Development Kit) JDK是整个Java的核心,包括了Java运行 ...

  9. Java学习从入门到精通(2) [转载]

    Java Learning Path(二).书籍篇 学习一门新的知识,不可能指望只看一本,或者两本书就能够完全掌握.需要有一个循序渐进的阅读过程.我推荐Oreilly出版的Java系列书籍. 在这里我 ...

随机推荐

  1. OpenGL入门学习(五)

    http://developer.178.com/201103/94955548786.html 今天要讲的是三维变换的内容,课程比较枯燥.主要是因为很多函数在单独使用时都不好描述其效果,我只好在最后 ...

  2. 华为上机测试题(MP3光标移动-java)

    PS:此题满分,可参考 描述: MP3 Player因为屏幕较小,显示歌曲列表的时候每屏只能显示几首歌曲,用户要通过上下键才能浏览所有的歌曲.为了简化处理,假设每屏只能显示4首歌曲,光标初始的位置为第 ...

  3. git的使用01

    直接下载安装git,这里就不演示了,如果安装成功,在桌面任意空白处单击鼠标右键,会多出两个选项 Git Gui Here和Git Bash Here,我们一般使用git bash here 右键之后点 ...

  4. C#集合类:动态数组、队列、栈、哈希表、字典(转)

    1.动态数组:ArrayList 主要方法:Add.AddRange.RemoveAt.Remove 2.队列:Queue 主要方法:Enqueue入队列.Dequeue出队列.Peek返回Queue ...

  5. [BZOJ1051][HAOI2006] 受欢迎的牛 tarjan求联通分量

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5687  Solved: 3016[Submit][Sta ...

  6. hdu6038

    hdu6038 分析 求函数 \(f\) 的构成方案,\(f\) 确定下来后,\(f\) 和 \(b\) 的值也是一一对应的了( \(f(i)=b_{f(a_i)}\) ),观察 \(a\) 数组,代 ...

  7. Codeforces 208E - Blood Cousins(树上启发式合并)

    208E - Blood Cousins 题意 给出一棵家谱树,定义从 u 点向上走 k 步到达的节点为 u 的 k-ancestor.多次查询,给出 u k,问有多少个与 u 具有相同 k-ance ...

  8. Union与UnionAll

    UNION指令的目的是将两个SQL语句的结果合并起来.从这个角度来看, 我们会产生这样的感觉,UNION跟JOIN似乎有些许类似,因为这两个指令都可以由多个表格中撷取资料. UNION的一个限制是两个 ...

  9. [POI2015]Kinoman

    题目大意: 给你一个长度为n的数列f,f中共有m种不同的数,每种数都有一个权值w[i]. 你可以选定一个f中的区间,定义区间的权值为这一区间只出现一次的数的权值和. 问权值最大的区间的权值是多少? 思 ...

  10. springboot 2.0+ 自定义拦截器

    之前项目的springboot自定义拦截器使用的是继承WebMvcConfigurerAdapter重写常用方法的方式来实现的. 以下WebMvcConfigurerAdapter 比较常用的重写接口 ...