21天精品區塊鏈課程免費學習,深入實戰行家帶路,助力開發人員輕鬆玩轉區塊鏈!>>>
最近有一個需求是從redis緩衝中讀取日活,redis緩衝中儲存著每天每個遊戲的日活與局數,類型是hashset,key是$game_id:$log_date,value是玩家ID以及對應的局數,結構如下:
表示在2018-07-18日,game_id=1的遊戲的日活與對應局數如下:
user_id |
局數 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
雖然能夠知道所有的game_id,但是有些遊戲可能沒有日活,,一個一個game_id去取日活效率不是很高,所以可以執行redis的keys命令來擷取有日活的所有key:
然後遍曆每個key,調用hgetall命令來擷取每個key對應的日活與局數資訊,就可以得出每個遊戲的日活與局數,對應到golang的代碼如下:
import ("testing""github.com/garyburd/redigo/redis")func TestRedis(t *testing.T){// 串連rediscon,err := redis.Dial("tcp", "127.0.0.1:6379")if err != nil {t.Errorf("串連redis出錯:err:%v\n", err)}defer con.Close()// 查詢所有的keyscacheName := "*:20180718"keys,err := redis.Strings(con.Do("keys", cacheName))for _,key := range keys {activeInfo,err := redis.IntMap(con.Do("hgetall", key))if err != nil {t.Errorf("查詢單個key的日活資訊出錯:err:%v\n", err)}t.Logf("key-%v, activeInfo-%+v\n", key, activeInfo)}}
對應的輸出如下: