반응형
Go에서 Redis 사용하기
Client 선정
- go-redis : https://github.com/go-redis/redis
- 장점 : 문서화가 잘되어있고 쓰기가 편함
- 단점 : 확장성이 낮다(내가 사용하고 싶은 명령어가 없을 수도..)
- Redigo : https://github.com/gomodule/redigo
- 장점 : 확장성이 높다(명령어 내가 쓰고싶은거 다 쓸수있음)
- 단점 : 문서화가 잘 안되어있고, 타입 변환 등 불편한 점 존재
- https://godoc.org/github.com/gomodule/redigo/redis)
사용 예
package main
import (
"log"
"net/http"
"github.com/gomodule/redigo/redis"
"github.com/labstack/echo/v4"
)
func main() {
e := echo.New()
e.POST("/insert/:key", insert)
e.GET("/delete/:key", delete)
e.GET("/get/:key", get)
e.Logger.Fatal(e.Start(":5000"))
}
func connection() redis.Conn {
c, err := redis.Dial("tcp", ":6379")
if err != nil {
log.Fatal(err.Error())
}
// 커넥션 체크!
pong, err := redis.String(c.Do("PING"))
if err != nil {
c.Close()
log.Fatal(err.Error())
}
fmt.Printf("PING Response = %s\n", pong)
return c
}
func insert(c echo.Context) error {
// 데이터
conn := connection()
defer conn.Close()
key := c.Param("key")
value := c.QueryParam("value")
reply, err := conn.Do("SET", key, value)
if err != nil {
return c.String(http.StatusBadRequest, err.Error())
}
return c.JSON(http.StatusOK, reply)
}
func delete(c echo.Context) error {
// 데이터 삭제
conn := connection()
defer conn.Close()
key := c.Param("key")
reply, err := conn.Do("DEL", key)
if err != nil {
return c.String(http.StatusOK, err.Error())
}
return c.JSON(http.StatusOK, reply)
}
func get(c echo.Context) error {
// 데이터 조회
conn := connection()
defer conn.Close()
key := c.Param("key")
reply, err := redis.String(conn.Do("GET", key))
if err != nil {
return c.String(http.StatusOK, err.Error())
}
return c.JSON(http.StatusOK, reply)
}
반응형
댓글