반죽 숙주
예제 장면: 게임 서버가 시작될 때 MySQL 의 플레이어 데이터를 redis 와 동기화하는 게이머의 작업 데이터를 저장합니다.
MySQL 의 데이터를 Redis 의 해시 구조로 가져옵니다. 물론 가장 직접적인 방법은 MySQL 데이터를 하나씩 Redis 에 기록하는 것입니다. 이것은 문제없지만 속도가 느려질 것이다. MySQL 쿼리 출력 데이터를 Redis 명령줄의 입력 데이터 프로토콜과 직접 일치시키는 방법을 강구할 수 있다면 많은 소비를 절약하고 시간을 단축할 수 있습니다.
Mysql 데이터베이스 이름은 GAME_DB 이고 테이블 구조는 다음과 같습니다.
테이블 TABLE_MISSION (
Playeridint (11) unsignednot null
MissionList varchar(255) 가 비어 있지 않습니다.
기본 키 (playerId)
);
Redis 의 데이터 구조는 해시 테이블을 사용합니다.
키 키는 mission, 해시 필드는 MySQL 의 해당 playerId, 해시 값은 MySQL 의 해당 missionList 입니다. 데이터는 다음과 같습니다.
[root@iZ23zcsdouzZ ~]# redis-cli
127.0.0.1:6379 > hget 작업 36598
"{\"10001\ ":{\" status \ ":1,\" progreer "10003 \": {\ "status \":1,\ "progress\":0}, \
빠른 동기화 방법:
새 꼬리말을 작성합니다. Sql 파일: mysql2redis_mission.sql
내용은 다음과 같습니다.
연결 선택 (
"*4\r\n",
$', 길이 (redis _ cmd),' \r\n',
Redis_cmd,' \r\n' ,
$', 길이 (redis _ key),' \r\n',
Redis_key,' \r\n' ,
$', 길이 (HKEY),' \r\n',
Hkey,' \r\n',
$', 길이 (hval),' \r\n',
Hval,' \r'
) 을 참조하십시오
에서 (
고르다
HSET 는 redis_cmd 로 사용됩니다.
대표단은 redis_key 로서
PlayerId 는 HKEY 입니다.
선교사
From table _ task
) 를 t 로 사용합니다
셸 스크립트 mysql2redis_mission.sh 를 생성합니다
콘텐츠:
Mysql game _ db-skip-column-names-raw < Mission.sql | redis-cli-pipe
Linux 시스템 터미널은 셸 스크립트를 실행하거나 시스템 명령을 직접 실행하여 MySQL 데이터베이스 GAME_DB 의 TABLE_MISSION 데이터를 redis 의 미션 크리티컬 데이터와 동기화할 수 있습니다. Mysql2redis_mission.sql 파일은 MySQL 데이터의 출력 데이터 형식을 redis 의 입력 데이터 형식 프로토콜과 일치시켜 동기화 시간을 크게 단축합니다.
테스트 후 개별 파일을 체크 아웃하고 데이터 형식을 수정하며 동일한 데이터를 redis 에 동기화하는 데 5 분이 소요됩니다. 위의 SQL 파일과 셸 명령을 사용하면 데이터를 동기화하는 데 약 3 초 밖에 걸리지 않습니다.