天天看點

遊戲服務端架構之使用Redis實作跨服排行榜

跨服排行榜

遊戲裡為了刺激玩家的攀比心理,經常有各種各樣的排行榜。排行榜又可以分為本服排行榜以及跨服排行榜。

簡單說來,本服排行榜上的記錄來自本服的玩家,而跨服排行榜上的記錄是來自所有伺服器前N名玩家。通常,跨服排行榜含金量更大,獎勵也更為豐富。從技術上而言,實作起來也更為麻煩。

典型地,實作跨服排行榜有一下幾種思路。

  • 取其中某個伺服器作為中心服,用來收集各服排行榜資料并進行廣播;
  • 使用獨立程序,例如web背景,向各個服務拉取排行榜資料;
  • 利用Redis的SortedSet,由Redis自己實作排序

本文詳細介紹如何使用Redis實作跨服排行榜

Redis叢集的簡單用法

Redis是一個Key-Value的緩存資料庫。這裡不做過多介紹。為了提高IO效率,最新的Redis支援叢集服務。官方的Redis是不支援Windows環境,是以本文開發環境是在Linux Ubuntu上。Redis的java用戶端實作是Jedis。下面的對RedisCluster的簡單封裝,包括對Redis的各種資料操作。

public  enum RedisCluster {

	INSTANCE;

	private JedisCluster cluster;

	public  void init() {
		String url = "127.0.0.1:8001";
		HashSet<HostAndPort> hostAndPorts = new HashSet<>();
		String[] hostPort = url.split(":");
		HostAndPort hostAndPort = new HostAndPort(