A leaderboard system written in Go using Redis database. For more info, read the docs.
year2016week01
or year2016month06
is all you need to create seasonal leaders. I'm serious! That's all there is to it;Install Leaderboard using the "go get" command:
go get github.com/topfreegames/podium
And then run
make setup
import (
"context"
"fmt"
"log"
"github.com/topfreegames/podium/leaderboard"
)
func main() {
leaderboards, err := leaderboard.NewClient("localhost", 6379, "", 0, 200)
if err != nil {
log.Fatalf("leaderboard.NewClient failed: %v", err)
}
const leaderboardID = "myleaderboardID"
//setting player scores
players := leaderboard.Members{
&leaderboard.Member{Score: 10, PublicID: "player1"},
&leaderboard.Member{Score: 20, PublicID: "player2"},
}
err = leaderboards.SetMembersScore(context.Background(), leaderboardID, players, false, "")
if err != nil {
log.Fatalf("leaderboards.SetMembersScore failed: %v", err)
}
//getting the leaders of the leaderboard
leaders, err := leaderboards.GetLeaders(context.Background(), leaderboardID, 10, 1, "desc")
if err != nil {
log.Fatalf("leaderboards.GetLeaders failed: %v", err)
}
for _, player := range leaders {
fmt.Printf("Player(id: %s, score: %d rank: %d)\n", player.PublicID, player.Score, player.Rank)
}
}
make test
make test-coverage test-coverage-html
Podium benchmarks prove it's blazing fast:
BenchmarkSetMemberScore-8 30000 284307 ns/op 0.32 MB/s 5635 B/op 81 allocs/op
BenchmarkSetMembersScore-8 5000 1288746 ns/op 3.01 MB/s 51452 B/op 583 allocs/op
BenchmarkIncrementMemberScore-8 30000 288306 ns/op 0.32 MB/s 5651 B/op 81 allocs/op
BenchmarkRemoveMember-8 50000 202398 ns/op 0.08 MB/s 4648 B/op 68 allocs/op
BenchmarkGetMember-8 30000 215802 ns/op 0.33 MB/s 4728 B/op 68 allocs/op
BenchmarkGetMemberRank-8 50000 201367 ns/op 0.28 MB/s 4712 B/op 68 allocs/op
BenchmarkGetAroundMember-8 20000 397849 ns/op 3.14 MB/s 8703 B/op 69 allocs/op
BenchmarkGetTotalMembers-8 50000 192860 ns/op 0.16 MB/s 4536 B/op 64 allocs/op
BenchmarkGetTopMembers-8 20000 306186 ns/op 3.85 MB/s 8585 B/op 66 allocs/op
BenchmarkGetTopPercentage-8 1000 10011287 ns/op 11.88 MB/s 510300 B/op 77 allocs/op
BenchmarkSetMemberScoreForSeveralLeaderboards-8 1000 106129629 ns/op 1.03 MB/s 516103 B/op 98 allocs/op
BenchmarkGetMembers-8 2000 3931289 ns/op 9.13 MB/s 243755 B/op 76 allocs/op
To run the benchmarks: make bench-redis bench-podium-app bench-run
.
Our builds also show the difference to the previous build.
© 2016, Top Free Games. Released under the MIT License.
Forked from: © 2013, Maxwell Dayvson da Silva.