PHP+redis 마이크로 보 의 라 모델 사례 상세 설명

본 논문 의 사례 는 PHP+redis 가 마이크로 보 를 실현 하 는 라 모델 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
지난번 에 한 편모형 의 내용 을 밀다을 썼 는데,이번 에는 모형 을 끄 는 내용 을 공유 했다.
모형 을 당기다
라 모델 은 웨 이 보 를 전시 할 때 자신의 모든 관심 을 가 진 사람 을 얻 고 관심 을 가 진 사람 중에서 최신 웨 이 보 를 끌 어 올 리 는 것 이다.
웨 이 보 프로젝트 데이터 구조 디자인
사용자 테이블 디자인
등록 할 때 user 데 이 터 를 redis 에 기록 합 니 다.key 는 다음 과 같 습 니 다.
user 데이터 의 key
사용자 이름=user:uesrid:$uesrid:username
비밀번호=user:userid:$userid:password
사용자 이름 으로 로그 인 해 야 하기 때문에 사용자 이름 에 따라 사용자 id 를 조회 할 수 있 습 니 다.

user:username:userid:$userid
관심 있 는 사람과 팬 디자인.
모든 사용자 가 관심 을 가 지 는 동작 을 한 후에 redis 에서 두 개의 무질서 한 집합 set 를 유지 합 니 다.하 나 는 following 이 고 하 나 는 follower 입 니 다.following 집합 은 제 가 관심 을 가 지 는 사람 이 고 follower 집합 은 제 팬 입 니 다.모든 사용자 가 이러한 두 집합 을 유지 하고 userid 로 구별 해 야 합 니 다.
단일 마이크로 블 로그 디자인
모든 웨 이 보 의 정 보 는 hash 구조 로 저장 되 고 서로 다른 웨 이 보 id 에 따라 구분 된다.모든 웨 이 보 는 다음 과 같은 정보 가 있다.발표 자 id,발표 자 닉네임,발표 시간,웨 이 보 내용 이다.
관심 사 마이크로 블 로그 디자인
사용자 마다 웨 이 보 를 발표 한 후 20 개의 최신 웨 이 보 를 유지 하고 질서 있 는 집합 sorted set 에 저장 하 며 서로 다른 userid 로 구분 합 니 다.
메모:질서 있 게 집합 한 score 는 마이크로 블 로 이 드 로 집합 하여 저장 하 는 것 도 마이크로 블 로 이 드 입 니 다.
개인
모든 사용 자 는 자신의 웨 이 보 를 유지 하고 링크 에 저장 하 며 1000 개 만 저장 합 니 다.redis 에 1000 개의 웨 이 보 데이터 만 저장 합 니 다.더 많은 것 을 조회 하려 면 데이터 베이스 에 가서 조회 합 니 다.
개인 이미 시계 디자인
모든 사용자 가 마이크로 보 를 당 긴 후에 마이크로 보 를 이미 당 긴 시계 에 저장 합 니 다.이 시 계 는 하나의 링크 구조 로 최대 1000 개의 마이크로 보 를 저장 합 니 다.
발표 하 다
먼저 웨 이 보 를 hash 구조 로 저장 한 다음 에 웨 이 보 를 당 김 표 에 저장 하고 개인 웨 이 보 표 에 저장 합 니 다.

//1、    
$conn = connredis();
$postid = $conn->incr('global:postid');
$conn->hmset('post:postid:'.$postid,['userid'=>$user['userid'],'username'=>$user['username'],'time'=>time(),'content'=>$content]);
//2、     20     ,        
$conn->zadd('starpost:userid:'.$user['userid'],$postid,$postid);
if($conn->zcard('starpost:userid:'.$user['userid']) > 20){
  $conn->zremrangebyrank('starpost:userid:'.$user['userid'],0,0);
}
//3、     1000   ,      
$conn->lpush('mypost:userid:'.$user['userid'],$postid);
if($conn->llen('mypost:userid:'.$user['userid']) > 1000){
  $conn->rpoplpush('mypost:userid:'.$user['userid'],'global:post');
}

전시 하 다
먼저 모든 관심 을 가 진 사람 을 얻 고 지난번 에 웨 이 보 를 끌 어 올 린 위 치 를 얻 으 며 지난번 에 끌 어 올 린 웨 이 보 위치 에 따라 데 이 터 를 끌 어 옵 니 다.그 다음 에 웨 이 보 에 정렬 을 하고 새로운 끌 어 당 기 는 위 치 를 설정 하여 끌 어 당 긴 표 에 기록 하고 웨 이 보 의 상세 한 내용 을 얻 으 며 마지막 으로 팬 과 관심 수 를 얻 습 니 다.보 여주 시 면 됩 니 다.

//1、      
$stars = $conn->smembers('following:'.$user['userid']);//        
$stars[] = $user['userid'];//         
//2、         
$lastpull = $conn->get('lastpull:userid:'.$user['userid']);
if(!$lastpull){
$lastpull = 0;
}
//3、     
$latest = [];
foreach($stars as $star){
$latest = array_merge($latest,$conn->zrangebyscore('starpost:userid:'.$star,$lastpull+1,1<<32-1));
}
//4、     
sort($latest,SORT_NUMERIC);
//5、       
if(!empty($latest)){
  $conn->set('lastpull:userid:'.$user['userid'],end($latest));
}
//6、        
foreach($latest as $l){
  $conn->lpush('receivepost:'.$user['userid'],$l);
}
$conn->ltrim('receivepost:'.$user['userid'],0,999);//    1000   
//7、         
$postids = $conn->sort('receivepost:'.$user['userid'],['sort'=>'desc']);
$posts = [];
foreach($postids as $postid){
  $posts[] = $conn->hmget('post:postid:'.$postid,['userid','username','time','content']);
}
//8、        
$fansnum = $conn->scard('follower:'.$user['userid']);
$follownum = $conn->scard('following:'.$user['userid']);

Q&A
어떻게 끌 어 올 린 데 이 터 를 최신 으로 보증 합 니까?
끌 어 올 릴 때 최근 에 끌 어 온 웨 이 보 id 를 redis 에 저장 한 다음 에 우 리 는 이번에 저 장 된 웨 이 보 id 보다 큰 웨 이 보 를 끌 어 올 리 기만 하면 끌 어 올 린 데 이 터 는 이전에 끌 어 올 리 지 않 았 다 는 것 을 보증 할 수 있다.
어떻게 모든 관심 자의 데 이 터 를 끌 어 옵 니까?
관심 자 를 옮 겨 다 니 며 데 이 터 를 끌 어 옵 니 다.
만약 에 A 팔 로 워 의 웨 이 보 1,4,5 B 팔 로 워 2,3 을 끌 어 낸다 고 가정 하면 그들의 발표 시간 이 엇 갈 리 고 데 이 터 를 어떻게 보 여 줍 니까?
모든 관심 자의 최신 웨 이 보 를 꺼 내 웨 이 보 id 에 따라 정렬 합 니 다.
더 많은 PHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기