Advertisement
Guest User

Untitled

a guest
Mar 18th, 2023
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.69 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "bytes"
  5.     "errors"
  6.     "fmt"
  7.     "log"
  8.     "net"
  9.     "strings"
  10. )
  11.  
  12. var ErrPingFailed = errors.New("Ping Failed")
  13.  
  14. type RedisClient struct {
  15.     conn net.Conn
  16. }
  17.  
  18. func NewRedisClient() *RedisClient {
  19.     return &RedisClient{}
  20. }
  21.  
  22. func (r *RedisClient) Ping() (bool, error) {
  23.  
  24.     _, err := r.conn.Write([]byte("PING\r\n"))
  25.  
  26.     if err != nil {
  27.         return false, err
  28.     }
  29.  
  30.     buf := make([]byte, 5)
  31.  
  32.     _, err = r.conn.Read(buf)
  33.  
  34.     if err != nil {
  35.         return false, err
  36.     }
  37.  
  38.     if !bytes.Equal(buf, []byte("+PONG")) {
  39.         return false, ErrPingFailed
  40.     }
  41.  
  42.     return true, nil
  43. }
  44.  
  45. func (r *RedisClient) Connect() error {
  46.  
  47.     conn, err := net.Dial("tcp", ":6379")
  48.  
  49.     if err != nil {
  50.         return err
  51.     }
  52.  
  53.     r.conn = conn
  54.     return nil
  55. }
  56.  
  57. func Format(strs ...string) string {
  58.  
  59.     str := fmt.Sprintf("*%d\r\n", len(strs))
  60.  
  61.     for _, s := range strs {
  62.         str += fmt.Sprintf("$%d\r\n%s\r\n", len(s), s)
  63.     }
  64.  
  65.     return str
  66. }
  67.  
  68. func (r *RedisClient) Set(k string, v string) error {
  69.  
  70.     _, err := r.conn.Write([]byte(Format("SET", k, v)))
  71.     return err
  72. }
  73.  
  74. func (r *RedisClient) Get(k string) (string, error) {
  75.  
  76.     buf := make([]byte, 255)
  77.  
  78.     _, err := r.conn.Write([]byte(Format("GET", k)))
  79.  
  80.     if err != nil {
  81.         return "", err
  82.     }
  83.  
  84.     n, err := r.conn.Read(buf)
  85.  
  86.     if err != nil {
  87.         return "", err
  88.     }
  89.  
  90.     resp := strings.Split(string(buf[:n]), "\r\n")
  91.  
  92.     return resp[3], nil
  93. }
  94.  
  95. func main() {
  96.  
  97.     r := NewRedisClient()
  98.  
  99.     err := r.Connect()
  100.  
  101.     if err != nil {
  102.         log.Fatal(err)
  103.     }
  104.  
  105.     ok, _ := r.Ping()
  106.  
  107.     fmt.Println(ok)
  108.  
  109.     err = r.Set("Hello", "World")
  110.  
  111.     if err != nil {
  112.         log.Fatal(err)
  113.     }
  114.  
  115.     v, err := r.Get("Hello")
  116.  
  117.     if err != nil {
  118.         log.Fatal(err)
  119.     }
  120.  
  121.     fmt.Printf("value: %s", v)
  122. }
  123.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement