redis_data.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. package redis_data
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/gomodule/redigo/redis"
  6. "miads/adslib"
  7. "miads/adslib/ads_redis"
  8. "strconv"
  9. "time"
  10. )
  11. type ChannelFlag struct {
  12. Weigth int `json:"weigth""`
  13. ChannelFlag int `json:"channel_flag"`
  14. }
  15. type FreqControlConfItem struct {
  16. BeginHour int `json:"begin_hour"`
  17. EndHour int `json:"end_hour"`
  18. FreqTime int `json:"freq_time"`
  19. }
  20. type FreqControlConf struct {
  21. confs []FreqControlConfItem
  22. }
  23. func (self *FreqControlConf) GetControlTime(hour int) (int, bool) {
  24. for _, v := range self.confs {
  25. if v.BeginHour <= hour && hour <= v.EndHour {
  26. return v.FreqTime, true
  27. }
  28. }
  29. return 0, false
  30. }
  31. // 获取渠道的标记
  32. func GetChannelFlag(reqSource string, business string) (*ChannelFlag, error) {
  33. conn := ads_redis.RedisConn.Get()
  34. defer conn.Close()
  35. redisKey := fmt.Sprintf("acfv2_{%s}_{%s}", reqSource, business)
  36. rsp, err := conn.Do("GET", redisKey)
  37. if err != nil {
  38. return nil, err
  39. }
  40. if rsp == nil {
  41. return nil, nil
  42. }
  43. rspBytes, _ := redis.Bytes(rsp, err)
  44. channelFlag := ChannelFlag{}
  45. err = json.Unmarshal(rspBytes, &channelFlag)
  46. if err != nil {
  47. return nil, err
  48. }
  49. return &channelFlag, nil
  50. }
  51. // 获取渠道频率信息
  52. func GetFreqCrontolConf(reqSource string) (*FreqControlConf, error) {
  53. conn := ads_redis.RedisConn.Get()
  54. defer conn.Close()
  55. redisKey := "rsfreq_" + reqSource
  56. rsp, err := conn.Do("GET", redisKey)
  57. if err != nil {
  58. return nil, err
  59. }
  60. if rsp == nil {
  61. return nil, nil
  62. }
  63. rspBytes, _ := redis.Bytes(rsp, err)
  64. f := FreqControlConf{}
  65. err = json.Unmarshal(rspBytes, &f.confs)
  66. if err != nil {
  67. return nil, err
  68. }
  69. return &f, nil
  70. }
  71. // 获取该广告的总请求次数
  72. func GetAdsRequestNum(advertiser string, adsBannerId int) (int, error) {
  73. if advertiser == "" {
  74. return 0, nil
  75. }
  76. conn := ads_redis.RedisConn.Get()
  77. defer conn.Close()
  78. redisKey := fmt.Sprintf("adsv2_%s_%d", advertiser, adsBannerId)
  79. rsp, err := conn.Do("GET", redisKey)
  80. if err != nil {
  81. return 0, err
  82. }
  83. if rsp == nil {
  84. return 0, nil
  85. }
  86. number, err := redis.Int(rsp, err)
  87. return number, nil
  88. }
  89. // 获取回调广告的动作请求次数
  90. func GetAdsFeedbackNum(advertiser string, action string, bannerid int) (int, error) {
  91. if advertiser == "" {
  92. return 0, nil
  93. }
  94. conn := ads_redis.RedisConn.Get()
  95. defer conn.Close()
  96. redisKey := fmt.Sprintf("adsv3_%s_%s_%d", advertiser, action, bannerid)
  97. if time.Now().Unix()%100 == 0 {
  98. conn.Do("DELETE", redisKey)
  99. }
  100. rsp, err := conn.Do("GET", redisKey)
  101. if err != nil {
  102. return 0, err
  103. }
  104. if rsp == nil {
  105. return 0, nil
  106. }
  107. number, _ := redis.Int(rsp, err)
  108. return number, nil
  109. }
  110. // 获取流量百分比
  111. func GetFlowPercentDuration(advertiser string, action string) *adslib.FlogControlItem {
  112. config := adslib.GetConf()
  113. flowConf, ok := config.FlowPercent[advertiser]
  114. if !ok {
  115. return nil
  116. }
  117. actionConf, ok := flowConf[action]
  118. if !ok {
  119. return nil
  120. }
  121. return &actionConf
  122. }
  123. // 设置回调回来的广告动作的次数
  124. func SetDistributeActionNum(advertiser string, action string, bannerid int) {
  125. if advertiser == "" {
  126. return
  127. }
  128. conn := ads_redis.RedisConn.Get()
  129. defer conn.Close()
  130. redisKey := fmt.Sprintf("adsv3_%s_%s_%d", advertiser, action, bannerid)
  131. curTime := int(time.Now().Unix())
  132. if curTime%100 == 0 {
  133. conn.Do("delete", redisKey)
  134. }
  135. conn.Do("INCR", redisKey)
  136. }
  137. // 获取设备+ip上报是否可以
  138. func GetDeviceIpReport(deviceid string, ip string) (bool, error) {
  139. conn := ads_redis.RedisConn.Get()
  140. defer conn.Close()
  141. redisKey := fmt.Sprintf("dim2_%s_'%s'", deviceid, ip)
  142. rsp, err := conn.Do("GET", redisKey)
  143. if err != nil {
  144. return false, err
  145. }
  146. lastReportTime := int64(0)
  147. if rsp != nil {
  148. lastReportTime, _ = redis.Int64(rsp, err)
  149. }
  150. if time.Now().Unix()-lastReportTime >= 3*86400 {
  151. return true, nil
  152. }
  153. return false, nil
  154. }
  155. // 设置设备+ip上报的时间点
  156. func SetDeviceIpReport(deviceid string, ip string) {
  157. conn := ads_redis.RedisConn.Get()
  158. defer conn.Close()
  159. redisKey := fmt.Sprintf("dim2_%s_'%s'", deviceid, ip)
  160. conn.Do("SET", redisKey, time.Now().Unix(), 3*86400)
  161. }
  162. // 设置总请求到广告的次数
  163. func SetAdsRequestNum(advertiser string, bannerid int) {
  164. if advertiser == "" {
  165. return
  166. }
  167. conn := ads_redis.RedisConn.Get()
  168. defer conn.Close()
  169. redisKey := fmt.Sprintf("adsv2_%s_%d", advertiser, bannerid)
  170. if time.Now().Unix()%100 == 0 {
  171. conn.Do("delete", redisKey)
  172. }
  173. conn.Do("incr", redisKey)
  174. }
  175. // 设置skipredis
  176. func SetSkipInfo(md5Skip string, skipUrl string) {
  177. conn := ads_redis.RedisConn.Get()
  178. defer conn.Close()
  179. redisKey := "su_" + md5Skip
  180. conn.Do("set", redisKey, skipUrl, 300)
  181. }
  182. // 通过advertiser获取最小的script_order
  183. func GetMinScriptOrderByAdv(advertiser string) (string, error) {
  184. conn := ads_redis.RedisConn.Get()
  185. defer conn.Close()
  186. redisKey := "adv_script_" + advertiser
  187. rsp, err := conn.Do("GET", redisKey)
  188. if err != nil {
  189. return "", err
  190. }
  191. if rsp == nil {
  192. return "", err
  193. }
  194. scriptOrder, _ := redis.String(rsp, err)
  195. return scriptOrder, nil
  196. }
  197. // 设置来源的曝光次数
  198. func SetReqSourceView(adv string, reqSource string, source string) {
  199. conn := ads_redis.RedisConn.Get()
  200. defer conn.Close()
  201. dateInt, _ := strconv.Atoi(time.Now().Format("20060102"))
  202. key := fmt.Sprintf("view3_%s_%s_%d_%s", adv, reqSource, dateInt, source)
  203. conn.Do("incr", key)
  204. }