{"id":26258766,"url":"https://github.com/changsongl/master-election","last_synced_at":"2026-05-10T05:32:46.964Z","repository":{"id":171087482,"uuid":"641943624","full_name":"changsongl/master-election","owner":"changsongl","description":"主从选举包，支持mysql, redis等...","archived":false,"fork":false,"pushed_at":"2023-05-30T18:04:02.000Z","size":50,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-12-18T08:39:37.411Z","etag":null,"topics":["master-election","master-slave","master-slave-architecture","mysql","redis"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/changsongl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-05-17T13:42:10.000Z","updated_at":"2023-05-30T18:25:23.000Z","dependencies_parsed_at":null,"dependency_job_id":"38370160-2ed1-400c-b7f9-1a1b4ee86369","html_url":"https://github.com/changsongl/master-election","commit_stats":null,"previous_names":["changsongl/master-election"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/changsongl%2Fmaster-election","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/changsongl%2Fmaster-election/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/changsongl%2Fmaster-election/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/changsongl%2Fmaster-election/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/changsongl","download_url":"https://codeload.github.com/changsongl/master-election/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243489829,"owners_count":20299001,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["master-election","master-slave","master-slave-architecture","mysql","redis"],"created_at":"2025-03-13T22:14:03.558Z","updated_at":"2026-05-10T05:32:46.913Z","avatar_url":"https://github.com/changsongl.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# master-election\n\nmaster-election是进行主从选举的工具包。在分布式场景，我们经常需要多个实例中的某一个实例去单独的运行某一串逻辑。\n此包可以帮助你快速上手，并且忽略掉选主的具体细节。\n\n### 支持组件\n- Mysql (已完成)\n- Redis (待开发)\n- PostgreSQL (待开发)\n- ETCD (待开发)\n- Consul (待开发)\n- Mongodb (待开发)\n\n### 安装\n````\ngo get github.com/changsongl/master-election\n````\n\n### 示例\n```` go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/changsongl/master-election\"\n\t\"github.com/changsongl/master-election/lock/mysql\"\n)\n\nfunc main() {\n\tm, err := master.New(\n\t\tmysql.NewMasterLock(\n\t\t\t\u0026mysql.Config{\n\t\t\t\tUser:      \"root\",\n\t\t\t\tPassword:  \"123456\",\n\t\t\t\tHost:      \"127.0.0.1\",\n\t\t\t\tPort:      3306,\n\t\t\t\tTableName: \"master_election_table\",\n\t\t\t\tDBName:    \"master_election_database\",\n\t\t\t\tCreateDB:  true,\n\t\t\t},\n\t\t),\n\t\tmaster.OptionHeartbeat(time.Second*2),\n\t\tmaster.OptionMasterStartHook(func(epoch uint64) {\n\t\t\tfmt.Printf(\"master start: epoch %d\\n\", epoch)\n\t\t}),\n\t\tmaster.OptionMasterEndHook(func(epoch uint64) {\n\t\t\tfmt.Printf(\"master end: epoch %d\\n\", epoch)\n\t\t}),\n\t\t// other option available\n\t)\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tgo func() {\n\t\terr = m.Start()\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t}()\n\n\tfor {\n\t\tif m.IsMaster() {\n\t\t\t// do some master logic\n\t\t} else {\n\t\t\t// do some slave logic or do nothing\n\t\t}\n\t}\n\n\t// m.Stop()\n}\n````\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchangsongl%2Fmaster-election","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchangsongl%2Fmaster-election","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchangsongl%2Fmaster-election/lists"}