代码改变世界

计数器

2013-03-07 16:21  ggzwtj  阅读(422)  评论(0编辑  收藏  举报

Feed

减少Feed评论数

  • CommentManagerImpl.deleteComment——删除评论接口
    • FeedCountRelatedManagerImpl.decrCommentCount——减少Feed评论数(数据库+缓存)
      • FeedDAOImpl.decrCommentCount——减少数据库中的计数
      • FeedBodyManagerImpl.get——从缓存中取到FeedDO
      • FeedDO评论数减一;
      • FeedBodyManagerImpl.put——将FeedDO插入缓存

增加Feed评论数

  • CommentManagerImpl.addComment——发表评论接口
    • FeedCountRelatedManagerImpl.incrCommentCount——增加Feed评论数(数据库+缓存)
      • FeedDAOImpl.incrCommentCount——增加数据库中的计数
      • FeedBodyManagerImpl.get——从缓存中取到FeedDO
      • FeedDO评论数加一;
      • FeedBodyManagerImpl.put——将FeedDO插入缓存

FeedlikeCountrecentCountcommentCount的逻辑是一样的:

likeCount

  • LikeManagerImpl.addLike
  • LikeManagerImpl.deleteLike

resendCount:

  • FeedManagerImpl.resendFeed
  • FeedManagerImpl.deleteFeedByFeedId

User

增加关注数,关注的同时被关注者的粉丝数也会增加:

  • WsnsRelationManagerImpl.addFollowPerson——加关注接口
    • UserManagerImpl.incrFollowsCount——增加关注数(数据库+缓存)
      • UserExtraDAOImpl.incrFollowsCountByUserId——增加数据库中用户表上的关注数
      • UserCacheManager.incrFollowsCount——增加缓存中的计数
        • UserCacheManager.doGetUser——取得UserCacheDO
        • UserCacheDO中关注数加一;
        • UserCacheManager.doPutUser——把UserCacheDO放回缓存
      • UserCacheManager.incrFansCount——增加操作用户的粉丝数

取消关注:

  • WsnsRelationManagerImpl.unFollowPerson

用户喜欢数的增加(减少的接口几乎一致,代码位置也一样):

  • LikeManagerImpl.addLike——加喜欢接口
    • UserManagerImpl.incrLikesCount——增加喜欢数(数据库+缓存)
      • UserExtraDAOImpl.incrLikesCountByUserId——增加数据库中的喜欢数
      • UserCacheManager.incrLikesCount——增加缓存中的喜欢计数
      • UserCacheManager.doGetUser——取得UserCacheDO
      • UserCacheDO中喜欢数加一;
      • UserCacheManager.doPutUser——把UserCacheDO放回缓存

用户喜欢数的减少:

  • LikeManagerImpl.deleteLike

取得用户的Feed数:

  • FeedManagerImpl.getMyFeedCount——取得用户发表的Feed数
    • DistributedCacheManagerImpl.get——取到缓存的Feed数,缓存时间为5*60(后面发表Feed的时候会更新这个数目,那么为什么不把缓存的时间设置的长一些?)
      • 取到:返回
      • 未取到:
        • FeedDAOImpl.countByUserId——从数据库中计算出发表的Feed总数
        • DistributedCacheManagerImpl.put——将这个总数插入缓存中

FeedDAOImpl.countByUserIdsql

select count(id) from wsns_feed where creator_id=#userId# and deleted=0

用户在发表Feed的时候会增加缓存中的计数(统计今天发表的Feed数也大致相同,不过在KEY中增加了日期,忘记这个接口在什么地方用到了。。):

  • FeedManagerImpl.publishFeed——发表Feed
    • FeedCountRelatedManagerImpl.incrPublishCount——增加计数
      • WsnsCountCacheManager.incr——增减缓存中的计数

用户发表Feed数的减少:

  • 目测没有。

Message

发消息时:

  • MessageStoreManagerImpl.stroeSNSMessage——发消息接口
    • MessageStoreManagerImpl.setUnReadCount
      • 将缓存中userId对应的消息未读数加一
      • 将缓存中userId+typeId对应的消息未读数加一
    • MessageCountCacheManager.initCount
      • MessageCountCacheManager.getTypeCount——从缓存中根据userId+type获取count数
        • WsnsCountCacheManager.get——从Tair中获取计数(这个封装感觉意义不大)
          • WsnsCacheManagerImpl.get——对应TairManager的操作
      • 如果取到的消息数为0(不管是出现异常还是Tair中没有这个值都返回0。。。。。)
        • SnsmessageDAOImpl.getSnsMessageTotalCountByType2——从数据库中获取指定类型的消息数
        • WsnsCountCacheManager.incr——将DB中取到的消息数加到缓存中的该类型的消息计数上(其实这里的作用同put)
        • WsnsCountCacheManager.incr——将DB中取到的消息数加到缓存中的该用户的消息计数上
    • MessageCountCacheManager.incr——增加缓存中该类型消息的计数和该用户消息的计数
      • WsnsCountCacheManager.incr——增加该类型消息的计数
      • WsnsCountCacheManager.incr——增加该用户消息的计数(如果上一步失败了还需要执行下一步吗?)

取得用户的消息数(取得指定类型的消息数时只是在getCount的时候加上了type类型而已):

  • MessageReadManagerImpl.getSnsMessageTotalCount——获取用户的消息数
    • MessageCountCacheManager.initCount——在取到0的时候就去数据库里面捞一把不是很妥(具体过程上面有)
    • MessageCountCacheManager.getCount——从缓存中取出消息数(具体过程上面有)

根据userId+messageId删除消息的时候减少消息数:

  • MessageWriteManagerImpl.deleteById——根据messageId删除消息
    • MessageCountCacheManager.initCount
    • MessageCountCacheManager.decr——将缓存中的计数减一

在读过消息之后,就要将对应的计数器进行修改:

  • MessageReadManagerImpl.getSnsMessage——根据userId+type+pagination来获得消息
    • SnsmessageDAOImpl.getSnSMessage
    • 统计未读数
    • SnsmessageDAOImpl.updateReadState——修改未读标志
    • MessageWriteManagerImpl.updateNewMessageCount——更新新消息数
      • DistributeCacheManagerImpl.getFromCachePersistence——从缓存中取出计数
      • 修改计数
      • DistributeCacheManagerImpl.putToCachePersistence——把新的计数值插入到缓存中
    • MessageConstant.isTypeNeedStore——类型是否需要保存???这个可能有问题
      • DistributeCacheManagerImpl.putToCachePersistence——将为读数设置为0,那这个函数不就是清零的操作吗?

TimeLine

获取TimeLine中的总数:

  • TimeLineManagerImpl.getTimeLineCount——获取TimeLine中的Feed数(不会超过480,也就是如果超过480就返回480)
  • WsnsRelationManagerImpl.queryFollowStarFromCache——从缓存中获取关注的明星的列表
  • MySendQueueManagerImpl.localCacheget——获取明星发表的Feed(本地缓存+Tair)
    • MySendQueueManagerImpl.mgetLastTime——获取上次更新的时间
      • DistributedCacheManagerImpl.mGet——从Tair中获取
    • LocalCache.getLocalCache——从本地缓存中获取发表的Feed的列表和上次更新的时间
      • 如果更新时间Tair中取得的上次的更新时间一致(也就是本地缓存和Tair中列表是一致的)
      • 如果不一致,从Tair中获取,并更新本地缓存
    • TimelineManagerImpl.get——获取用户接收队列中的Feed数
    • 返回总的Feed数

获取TimeLine中新Feed的数目:

  • TimeLineManagerImpl.getTimeLineNewCount——获取新Feed数
    • TimeLineManagerImpl.getTimelineFast——获取timeline
      • WsnsRelationManagerImpl.queryFollowStarFromCache——取得关注的明星列表(本地缓存)
      • MySendQueueManagerImpl.mgetLastTime——从本地缓存获取明星的发送队列(本地不是最新的话从Tair中获取)
      • WsnsRelationManagerImpl.queryChannelFollowStarFromCache——获取关注的明星频道列表
      • MySendQueueManagerImpl.mgetChannel——获取明星频道的发送队列
      • TimeLineManagerImpl.get——获取用户自己的接收队列
    • FeedExtCacheManagerImpl.get——从缓存中获取FeedRelationBO,在用户调用getTimeline的时候放入缓存
    • 根据时间二分计算得到未读数并返回

----- -- -

end