记一次golang读取redis缓存,统计日活的过程

Valiben · · 3436 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

最近有一个需求是从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){
	// 连接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)
	}
}

对应的输出如下:


有疑问加站长微信联系(非本文作者)

本文来自:开源中国博客

感谢作者:Valiben

查看原文:记一次golang读取redis缓存,统计日活的过程

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3436 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传