最近有一個需求是從redis緩存中讀取日活,redis緩存中保存着天天每一個遊戲的日活與局數,類型是hashset,key是$game_id:$log_date,value是玩家ID以及對應的局數,結構以下:git
表示在2018-07-18日,game_id=1的遊戲的日活與對應局數以下:github
user_id | 局數 |
1 | 2 |
2 | 3 |
3 | 4 |
4 | 5 |
雖然可以知道全部的game_id,可是有些遊戲可能沒有日活,,一個一個game_id去取日活效率不是很高,因此能夠執行redis的keys命令來獲取有日活的全部key:golang
而後遍歷每一個key,調用hgetall命令來獲取每一個key對應的日活與局數信息,就能夠得出每一個遊戲的日活與局數,對應到golang的代碼以下:redis
import ( "testing" "github.com/garyburd/redigo/redis" ) func TestRedis(t *testing.T){ // 鏈接redis con,err := redis.Dial("tcp", "127.0.0.1:6379") if err != nil { t.Errorf("鏈接redis出錯:err:%v\n", err) } defer con.Close() // 查詢全部的keys cacheName := "*: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) } }
對應的輸出以下:緩存