package GeoIPUtil import ( "dsDataex/Utils/CacheUtil" "dsDataex/Utils/RedisUtil" "github.com/yinheli/qqwry" "time" ) var DB *qqwry.QQwry var Province2260 map[string]string var City2260 map[string][]string func init() { //打开 纯真 IP离线库 DB = qqwry.NewQQwry("GeoLite2/qqwry.dat") //行政区划缓存 var sql = "SELECT area_code from t_dataex_gbt2260 where area_type=2 " var list, _, _ = CacheUtil.Page(sql, 5000, 0) Province2260 = make(map[string]string) for no := 0; no < len(list); no++ { Province2260[list[no]["area_code"].(string)] = list[no]["area_name"].(string) } City2260 = make(map[string][]string) for no := 0; no < len(list); no++ { City2260[list[no]["area_name"].(string)] = []string{list[no]["area_code"].(string), list[no]["area_name"].(string), "", ""} } sql = "SELECT area_code from t_dataex_gbt2260 where area_type=3 " list, _, _ = CacheUtil.Page(sql, 5000, 0) for no := 0; no < len(list); no++ { var provinceCode = list[no]["area_code"].(string)[0:2] + "0000" var provinceName = Province2260[provinceCode] City2260[provinceName+list[no]["area_name"].(string)] = []string{provinceCode, provinceName, list[no]["area_code"].(string), list[no]["area_name"].(string)} } } func GetGeo4IP(temp string) []string { //add by zhangjun 2020-08-04 使用 Redis 缓存,缓解 IP文件并发读问题!!! var city,err =RedisUtil.RedisClient.Get("Dataex_IP:"+temp).Result() if err==nil && city != "" { return City2260[ city ] } else { DB.Find(temp) RedisUtil.RedisClient.Set("Dataex_IP:"+temp, DB.Country, 10*time.Hour) //fmt.Println("qqwry :",DB.Country,DB.City) return City2260[DB.Country] } }