Redis의 생방송 장면에서의 실천 방안에 대해 간단히 이야기하다

3115 단어 Redis생방송

배경 정보


영상 생방송은 생방송 시스템의 대외적인 표현 형식으로서 전체 시스템의 핵심 중 하나이다.영상 생방송 창을 제외하고 생방송 사이의 온라인 사용자, 선물, 댓글, 좋아요, 차트 등 데이터 정보는 시효성이 높고 상호작용성이 강하며 시스템의 시간 지연에 대한 요구가 매우 높기 때문에 Redis 캐시 서비스로 처리하기에 매우 적합하다.
이 모범 사례는 Redis 버전을 사용하여 영상 생방송 간 정보 시스템을 구축하는 예시를 보여 줍니다.다음과 같은 세 가지 정보 구축 방법에 대해 알아볼 수 있습니다.
  • 실시간 순위 정보
  • 계수류 정보
  • 타임라인 정보
  • 실시간 차트 클래스 정보


    실시간 차트 정보는 생방송 간 온라인 사용자 목록, 각종 선물의 차트, 탄막 메시지(메시지 차원에 따라 정렬된 메시지 차트와 유사) 등을 포함하여 Redis의 질서정연한 집합(sorted set) 구조를 사용하여 저장하기에 적합하다.
    Redis 집합은 빈 값 산열 목록 (hash table) 을 사용하여 이루어지기 때문에 집합에 대한 삭제 수정 작업의 시간 복잡도는 모두 O (1) 이다.질서정연한 집합 중의 모든 구성원은 하나의 점수(score)를 연결하여 정렬 등 조작을 편리하게 할 수 있다.다음은 탄막 메시지를 추가하고 되돌리는 것을 예로 삼아 생방송 정보 시스템에 질서정연하게 집합된 실제 운용에 대해 설명한다.
    유닉스timestamp+밀리초수를 점수로 하여 user55의 생방송 사이에 추가된 5개의 탄막을 기록합니다.
    
    redis> ZADD user55:_danmu 1523959031601166 message111111111111
    (integer) 1
    11.160.24.14:3003> ZADD user55:_danmu 1523959031601266 message222222222222
    (integer) 1
    11.160.24.14:3003> ZADD user55:_danmu 1523959088894232 message33333
    (integer) 1
    11.160.24.14:3003> ZADD user55:_danmu 1523959090390160 message444444
    (integer) 1
    11.160.24.14:3003> ZADD user55:_danmu 1523959092951218 message5555
    (integer) 1
    
    
    최신 3개의 탄막 정보를 반환합니다.
    
    redis> ZREVRANGEBYSCORE user55:_danmu +inf -inf LIMIT 0 3
    1) "message5555"
    2) "message444444"
    3) "message33333"
    지정된 시간 동안 3개의 탄막 정보를 반환합니다.
    
    redis> ZREVRANGEBYSCORE user55:_danmu 1523959088894232 -inf LIMIT 0 3
    1) "message33333"
    2) "message222222222222"
    3) "message111111111111"
    
    

    계수류 정보


    계수류 정보는 사용자 관련 데이터를 예로 들면 읽지 않은 메시지 수, 관심 수, 팬 수, 경험치 등이 있다.이러한 메시지는 Redis의 해시 구조로 저장하기에 적합합니다.예를 들어 관심수는 다음과 같은 방법으로 처리할 수 있다.
    
    redis> HSET user:55 follower 5
    (integer) 1
    redis> HINCRBY user:55 follower 1 // +1
    (integer) 6 
    redis> HGETALL user:55
    1) "follow"
    2) "6"
    

    타임라인 정보


    시간선 정보는 시간을 차원으로 하는 정보 목록으로 전형적인 앵커 동태, 신첩 등이 있다.이러한 정보는 일정한 시간 순서에 따라 배열되며, 목록 (list) 이나 시퀀스 테이블을 사용하여 저장할 수 있습니다. 예는 다음과 같습니다.
    
    redis> LPUSH user:55_recent_activitiy  '{datetime:201804112010,type:publish,title: ,content: }'
    (integer) 1
    redis> LPUSH user:55_recent_activitiy '{datetime:201804131910,type:publish,title: ,content: , }'
    (integer) 2
    redis> LRANGE user:55_recent_activitiy 0 10
    1) "{datetime:201804131910,type:publish,title:\xe8\xaf\xb7\xe5\x81\x87\",content:\xe6\x8a\xb1\xe6\xad\x89\xef\xbc\x8c\xe4\xbb\x8a\xe5\xa4\xa9\xe6\x9c\x89\xe4\xba\x8b\xe9\xb8\xbd\xe4\xb8\x80\xe5\xa4\xa9}"
    2) "{datetime:201804112010,type:publish,title:\xe5\xbc\x80\xe6\x92\xad\xe5\x95\xa6,content:\xe5\x8a\xa0\xe6\xb2\xb9}"
    
    Redis가 생방송 장면에서 실천 방안을 간단히 이야기하는 이 글은 여기까지 소개되었습니다. 더 많은 Redis 생방송 장면의 실천 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

    좋은 웹페이지 즐겨찾기