<prompt> Tengeneza API ya Golang RESTful inayoingiliana na hifadhidata ya Redis ili kuhifadhi na kurejesha jozi za thamani kuu. API inapaswa kusaidia shughuli za msingi za CRUD Unda, Soma, Sasisha, Futa.PLINFORMAT  <response>: kifurushi kikuukuagiza muktadhausimbajijsonfmtloginethttpgithub.comgo-redisredisv8github.comgorillamuxvar ctx muktadha.Usulivar rdb redis.Mtejafunc main rdb redis.NewClientredis.ChaguoAddr: localhost:6379,Nenosiri: ,DB: 0,kipanga njia : mux.NewRouterrouter.HandleFunckeyskey, CreateOrUpdateKey.NjiaPUT.router.HandleFunckeyskey, GetKey.NjiaGET.router.HandleFunckeyskey, DeleteKey.NjiaFUTA.log.Fatalhttp.ListenAndServe:8080, kipanga njiachapa muundo wa KeyValue Mfuatano wa ufunguo json:ufunguoMfuatano wa thamani json:thamanifunc CreateOrUpdateKeyw http.ResponseWriter, r http.Ombi vars : mux.Varsrkey : varskeyvar kv Thamani kuukosa : json.NewDecoderr.Body.Simbuakvikiwa makosa ! nil http.Errorw, err.Error, http.StatusBadRequestkurudierr rdb.Setctx, key, kv.Value, 0.Errikiwa makosa ! nil http.Errorw, err.Error, http.StatusInternalServerErrorkurudiw.AndikaKichwahttp.StatusOKfmt.Fprintfw, Ufunguo s umewekwa kwa thamani s, ufunguo, kv.Thamanifunc GetKeyw http.ResponseWriter, r http.Ombi vars : mux.Varsrkey : varskeythamani, kosa : rdb.Getctx, key.Resultikikosea redis.Nil Hitilafu ya http.w, Ufunguo haujapatikana, http.StatusNotFoundkurudi vinginevyo ikiwa makosa ! nil http.Errorw, err.Error, http.StatusInternalServerErrorkurudikv : Thamani muhimuUfunguo: ufunguo, Thamani: thamanijson.NewEncoderw.Encoderkvfunc DeleteKeyw http.ResponseWriter, r http.Ombi vars : mux.Varsrkey : varskeytokeo, kosa : rdb.Delctx, key.Resultikiwa makosa ! nil http.Errorw, err.Error, http.StatusInternalServerErrorkurudiikiwa matokeo 0 Hitilafu ya http.w, Ufunguo haujapatikana, http.StatusNotFoundkurudiw.AndikaKichwahttp.StatusOKfmt.Fprintfw, Ufunguo s umefutwa, ufunguo 