Redis微博

——项目开始前请先配置redis,
    [荐] 开发时 windows下使用redis,具体方法 链接    http://blog.csdn.net/myboyli/article/details/52082050
                                   linux下使用redis具体方法 链接待更新                                                                                                                                            @Author 云天河Blog

更新时间  2016年8月1日 12:53:01

一.可行性研究

    >写个简单的模板熟练掌握redis的各种指令=>可行

    >当某些用户被关注的量过大的时候,比如超过一万了,推送系统负荷会特别大=>待修改

二、需求分析

    >目前这个模板,测试2~5个用户。1G内存的服务器内存应该是够了

三、设计概要

——数据先存到mysql,再存到redis

1.注册功能

    注册功能包括:

            >用户名是否存在

            >检验注册格式是否存在(因为此次是用来做测试的,所以不加入此功能)

            >录入用户名、密码、自增的用户ID

            >自动登录

    ​对应的key-value设计 //这里的前缀名,一般指的类似mysql中的表名

    ​key0://自增id

    u​id

    ​key1:

    ​前缀名:id:username  $username

    ​key2:

    ​前缀名:id:pwd  $pwd

    ​key3:

    ​前缀名:id:time  time()

    ​key4://登陆时需要

    ​前缀名:$username  $uid

    ​[示例] 供测试的php代码

DB.php

<?php
namespace HLZ;
function connect(){
    static $redis=0;
    if($redis!=0){//是否已经初始化过
        return $redis;
    }else{
    $redis = new \Redis();
    $redis -> connect("127.0.0.1","6379");
    $redis->select(1);  //初始选库
        return $redis;
    }
}
$r = connect();//返回连接后的对象

register.php

<?php
namespace HLZ;
function if_exists($name="云天河Blog",$pwd="hlzblog.top"){
    require 'lib/DB.php';//连接redis数据库,返回redis类的静态对象$r
    $uid=$r->get("user:".$name);
    if( $uid>0 ){//用户名->用户id>相关信息
        echo "该用户名已经存在!";
    }else{
        $uid=$r->incr("uid");
        $uidMix="user:".$name;
        $nameMix="user:".$uid.":username";
        $pwdMix= "user:".$uid.":pwd" ;
        $timeMix= "user:".$uid.":time" ;
        $user_info=array(
            $nameMix => $name,
            $pwdMix  => $pwd,
            $uidMix  => $uid,
            $timeMix -> time()
        );
        $r->mset($user_info);
        echo "亲爱的.".$name.", 欢迎您!";
    }
    echo "<br/>显示所有key<pre>";
    $keys=$r->keys("*");
    var_dump($keys);
    echo "<br/>显示所有key的值<pre>";
    var_dump($r->mget($keys));
}
if_exists("云天河Blog");


2.登陆功能

登陆功能包括:

            >用户名是否存在

            > 用户名与密码是否相对应

            >用户名写入cookies,记录当前时间戳字符串,做身份验证

setcookie("hash",$name.substr(str_shuffle(time()),0,16));//用户名加随机时间戳
$_SESSION['hash']=$_COOKIE['hash'];//供权限判断


3.互相关注功能

消息推送功能包括:

            >粉丝与粉主关系,即每个用户都得有两张集合表,如following与follwer

            ​    ​查询自己的粉丝smembers

    ​    ​    ​    ​key-value设计

            ​    key1://[个人]关注他人的表

            ​     following:uid:$uid $their_id

            ​    key2://[个人]文章

            ​     follower:uid:$uid $fans_id

            >用户与关注者的链表取交集,可知是否被关注


4.发布功能

发布功能包括:

            >是否用户本人,判断

            >队列存入[个人发布的队列、全局大队列],自己看的时候,截取20条可直接显示,后面的视为冷数据,存入mysql

            >每次用户发布的信息都会存入,全局大队列,设队列的前50条为热数据

            >关注的人信息的拉取,通过 前缀名,   存的顺序都是username->content->time,

            >涉及删除,所有的信息都要统一个pid

                key-value设计

            ​    key0://[全局]文章id,自增

            ​      pid 

            ​    key1://[个人]文章

            ​     msg:uid:$uid:content $msg

            ​    key2://[个人]时间,这里$time统一用一个time()时间戳

            ​     msg:uid:$uid:time $time

            ​    key3://[个人]用户名

            ​     msg:uid:$uid:name $username

            ​    key4://[个人]用户名

            ​     msg:uid:$uid:pid $pid

            ​    ​key5://[全局]时间

            ​     all::time $time

            ​    key6://[全局]用户名

            ​     all:name $username

            ​    key7://[全局]文章

            ​     all:content $content

            ​    key8://[自己看]文章

              show:uid:$uid:time

            ​    key9://[自己看]文章

    ​    ​    ​   show:uid:$uid:name $username

​​            ​    key10://[自己看]时间

            ​     show:uid:$uid:time $time

            ​    key11://[个人]用户名

            ​     msg:uid:$uid:pid $pid


            ​     


5.消息推送功能

消息推送功能包括:

            >消息队列【这里不适用redis消息订阅功能,因为消息需要被存储而且,而且这种广播的方式容易丢失数据】

            >这里用List类型即可解决





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值