123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- package redis_data
- import (
- "encoding/json"
- "fmt"
- "github.com/gomodule/redigo/redis"
- "miads/adslib"
- "miads/adslib/ads_redis"
- "time"
- )
- type ChannelFlag struct {
- Weigth int `json:"weigth""`
- ChannelFlag int `json:"channel_flag"`
- }
- type FreqControlConfItem struct {
- BeginHour int `json:"begin_hour"`
- EndHour int `json:"end_hour"`
- FreqTime int `json:"freq_time"`
- }
- type FreqControlConf struct {
- confs []FreqControlConfItem
- }
- func (self *FreqControlConf) GetControlTime(hour int) (int, bool) {
- for _, v := range self.confs {
- if v.BeginHour <= hour && hour <= v.EndHour {
- return v.FreqTime, true
- }
- }
- return 0, false
- }
- // 获取渠道的标记
- func GetChannelFlag(reqSource string, business string) (*ChannelFlag, error) {
- conn := ads_redis.RedisConn.Get()
- defer conn.Close()
- redisKey := fmt.Sprintf("acfv2_{%s}_{%s}", reqSource, business)
- rsp, err := conn.Do("GET", redisKey)
- if err != nil {
- return nil, err
- }
- if rsp == nil {
- return nil, nil
- }
- rspBytes, _ := redis.Bytes(rsp, err)
- channelFlag := ChannelFlag{}
- err = json.Unmarshal(rspBytes, &channelFlag)
- if err != nil {
- return nil, err
- }
- return &channelFlag, nil
- }
- // 获取渠道频率信息
- func GetFreqCrontolConf(reqSource string) (*FreqControlConf, error) {
- conn := ads_redis.RedisConn.Get()
- defer conn.Close()
- redisKey := "rsfreq_" + reqSource
- rsp, err := conn.Do("GET", redisKey)
- if err != nil {
- return nil, err
- }
- if rsp == nil {
- return nil, nil
- }
- rspBytes, _ := redis.Bytes(rsp, err)
- f := FreqControlConf{}
- err = json.Unmarshal(rspBytes, &f.confs)
- if err != nil {
- return nil, err
- }
- return &f, nil
- }
- // 获取该广告的总请求次数
- func GetAdsRequestNum(advertiser string, adsBannerId int) (int, error) {
- if advertiser == "" {
- return 0, nil
- }
- conn := ads_redis.RedisConn.Get()
- defer conn.Close()
- redisKey := fmt.Sprintf("adsv2_%s_%d", advertiser, adsBannerId)
- rsp, err := conn.Do("GET", redisKey)
- if err != nil {
- return 0, err
- }
- if rsp == nil {
- return 0, nil
- }
- number, err := redis.Int(rsp, err)
- return number, nil
- }
- // 获取回调广告的动作请求次数
- func GetAdsFeedbackNum(advertiser string, action string, bannerid int) (int, error) {
- if advertiser == "" {
- return 0, nil
- }
- conn := ads_redis.RedisConn.Get()
- defer conn.Close()
- redisKey := fmt.Sprintf("adsv3_%s_%s_%d", advertiser, action, bannerid)
- if time.Now().Unix()%100 == 0 {
- conn.Do("DELETE", redisKey)
- }
- rsp, err := conn.Do("GET", redisKey)
- if err != nil {
- return 0, err
- }
- if rsp == nil {
- return 0, nil
- }
- number, _ := redis.Int(rsp, err)
- return number, nil
- }
- // 获取流量百分比
- func GetFlowPercentDuration(advertiser string, action string) *adslib.FlogControlItem {
- config := adslib.GetConf()
- flowConf, ok := config.FlowPercent[advertiser]
- if !ok {
- return nil
- }
- actionConf, ok := flowConf[action]
- if !ok {
- return nil
- }
- return &actionConf
- }
- // 设置回调回来的广告动作的次数
- func SetDistributeActionNum(advertiser string, action string, bannerid int) {
- if advertiser == "" {
- return
- }
- conn := ads_redis.RedisConn.Get()
- defer conn.Close()
- redisKey := fmt.Sprintf("adsv3_%s_%s_%d", advertiser, action, bannerid)
- curTime := int(time.Now().Unix())
- if curTime%100 == 0 {
- conn.Do("delete", redisKey)
- }
- conn.Do("INCR", redisKey)
- }
- // 获取设备+ip上报是否可以
- func GetDeviceIpReport(deviceid string, ip string) (bool, error) {
- conn := ads_redis.RedisConn.Get()
- defer conn.Close()
- redisKey := fmt.Sprintf("dim2_%s_'%s'", deviceid, ip)
- rsp, err := conn.Do("GET", redisKey)
- if err != nil {
- return false, err
- }
- lastReportTime := int64(0)
- if rsp != nil {
- lastReportTime, _ = redis.Int64(rsp, err)
- }
- if time.Now().Unix()-lastReportTime >= 3*86400 {
- return true, nil
- }
- return false, nil
- }
- // 设置设备+ip上报的时间点
- func SetDeviceIpReport(deviceid string, ip string) {
- conn := ads_redis.RedisConn.Get()
- defer conn.Close()
- redisKey := fmt.Sprintf("dim2_%s_'%s'", deviceid, ip)
- conn.Do("SET", redisKey, time.Now().Unix(), 3*86400)
- }
- // 设置总请求到广告的次数
- func SetAdsRequestNum(advertiser string, bannerid int) {
- if advertiser == "" {
- return
- }
- conn := ads_redis.RedisConn.Get()
- defer conn.Close()
- redisKey := fmt.Sprintf("adsv2_%s_%d", advertiser, bannerid)
- if time.Now().Unix() %100==0 {
- conn.Do("delete", redisKey)
- }
- conn.Do("incr", redisKey)
- }
- // 设置skipredis
- func SetSkipInfo(md5Skip string, skipUrl string) {
- conn := ads_redis.RedisConn.Get()
- defer conn.Close()
- redisKey:="su_" + md5Skip
- conn.Do("set" , redisKey, skipUrl, 300)
- }
- // 通过advertiser获取最小的script_order
- func GetMinScriptOrderByAdv(advertiser string) (string, error){
- conn := ads_redis.RedisConn.Get()
- defer conn.Close()
- redisKey := "adv_script_" + advertiser
- rsp, err := conn.Do("GET", redisKey)
- if err != nil {
- return "", err
- }
- if rsp == nil {
- return "", err
- }
- scriptOrder, _ := redis.String(rsp, err)
- return scriptOrder, nil
- }
|