컴퓨터 지식 네트워크 - 컴퓨터 프로그래밍 - 파이썬을 사용하여 mysql을 redis에 동기화하는 경우 데이터가 많아서 하나씩 읽고 redis에 쓰기에는 너무 느립니다.

파이썬을 사용하여 mysql을 redis에 동기화하는 경우 데이터가 많아서 하나씩 읽고 redis에 쓰기에는 너무 느립니다.

MYSQL은 데이터를 Redis에 빠르게 동기화합니다.

예제 시나리오: 게임 플레이어의 작업 데이터를 저장하고 게임 서버가 시작될 때 MySQL의 플레이어 데이터를 Redis에 동기화합니다.

MySQL의 데이터를 Redis의 해시 구조로 가져옵니다. 물론 가장 직접적인 방법은 MySQL 데이터를 탐색하여 하나씩 Redis에 쓰는 것입니다. 이것에는 아무런 문제가 없지만 매우 느릴 것입니다. MySQL 쿼리 출력 데이터를 Redis 명령줄의 입력 데이터 프로토콜과 직접 일치시키는 방법을 생각할 수 있다면 많은 소비를 절약하고 시간을 단축할 수 있습니다.

Mysql 데이터베이스 이름: GAME_DB, 테이블 구조 예:

CREATE TABLE TABLE_MISSION (

playerId int(11) unsigned NOT NULL,

MissionList varchar(255) NOT NULL,

PRIMARY KEY (playerId)

);

Redis의 데이터 구조는 해시 테이블을 사용합니다:

p> p>

키 KEY는 Mission이고, 해시 필드는 mysql의 해당 playerId이며, 해시 값은 mysql의 해당 MissionList입니다. 데이터는 다음과 같습니다:

[root@iZ23zcsdouzZ ~]# redis-cli

127.0.0.1:6379> hget Missions 36598

"{\" 10001\" :{\"상태\":1,\"진행\":0},\"10002\":{\"상태\":1,\"진행\":0},\"10003\ ":{ \"status\":1,\"progress\":0},\"10004\":{\"status\":1,\"progress\":0}}"

빠른 동기화 방법:

새 접미사 .sql 파일 생성: mysql2redis_mission.sql

내용은 다음과 같습니다:

SELECT CONCAT(

"*4 \r\n",

'$', LENGTH(redis_cmd), '\r\n',

redis_cmd, '\r\n ',

'$', LENGTH(redis_key), '\r\n',

redis_key, '\r\n',

'$ ', LENGTH(hkey), '\r\n',

hkey, '\r\n',

'$', LENGTH(hval), '\r\ n',

hval, '\r'

)

FROM (

SELECT

'HSET ' as redis_cmd,

'missions' AS redis_key,

playerId AS hkey,

MissionList AS hval

FROM TABLE_MISSION

) AS 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의 입력 데이터 형식 프로토콜과 일치시켜 동기화 시간을 크게 단축시킵니다.

테스트 후 위의 sql 파일과 셸 명령을 사용하면 데이터 형식을 한 번에 제거하고 수정하여 동일한 데이터를 동기화하고 Redis에 쓰는 데 약 5분이 소요됩니다. 데이터 동기화를 완료하는 데 3초가 걸립니다.

上篇: 호스트가 정상적으로 시작되는데 모니터 블랙 스크린은 어떻게 되나요? 下篇: 애플에 관한 이야기
관련 내용