http接口保存json到redis

cooolr 于 2020-12-21 发布
package main

import "fmt"
import "log"
import "time"
import "context"
import "net/http"
import "encoding/json"
import "github.com/tidwall/gjson"
import "github.com/go-redis/redis"

type Body struct {
    Body string
}

var print = fmt.Println
var rdb *redis.Client

func initClient() (err error) {
    rdb = redis.NewClient(&redis.Options{
        Addr:"192.168.1.223:6379",
        Password: "",
        DB:4})
    ctx,cancel := context.WithTimeout(context.Background(),5*time.Second)
    defer cancel()
    _,err = rdb.Ping(ctx).Result()
    if err != nil {
        return err
    }
    return nil
}

func home(w http.ResponseWriter, r *http.Request) {
    decoder := json.NewDecoder(r.Body)
    var body Body
    err := decoder.Decode(&body)
    if err != nil {
        panic(err)
    }
    local,_ := time.LoadLocation("Asia/Shanghai")
    now := time.Now().In(local).Format("2006-01-02 15:04:05")
    data := gjson.Get(body.Body, "data")
    if err:=initClient();err!=nil {
            print(err)
            return
    }
    ctx := context.Background()
    if count := len(data.Array());count > 0 {
            _ = rdb.LPush(ctx, "toutiao_data", data.Raw)
    }
    print(now, len(data.Array()),rdb.LLen(ctx,"toutiao_data"))
    fmt.Fprintf(w, "ok")
}

func handleRequests() {
    http.HandleFunc("/redis", home)
    log.Fatal(http.ListenAndServe(":10000", nil))
}

func main() {
    handleRequests()
}