topfreegames / podium

A leaderboard backend using redis
MIT License
49 stars 22 forks source link
golang ranking

Podium

Podium Coverage Status Go Report Card Docs GoDoc

A leaderboard system written in Go using Redis database. For more info, read the docs.

Features

Installation

Install Leaderboard using the "go get" command:

go get github.com/topfreegames/podium

And then run

make setup

Quickstart (for using as library)

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)
    }
}

Testing

make test

Coverage

make test-coverage test-coverage-html

Benchmarks

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.

License

© 2016, Top Free Games. Released under the MIT License.

Forked from: © 2013, Maxwell Dayvson da Silva.