<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Redcon兼容 Redis 的 K/V 數(shù)據(jù)庫

          聯(lián)合創(chuàng)作 · 2023-10-01 01:36

          Redcon 是一個采用 Go 開發(fā)的兼容 Redis 的 Key/Value 數(shù)據(jù)庫。特點是簡單、快速。

          支持 Redis 的命令包括:

          • SET key value

          • GET key

          • DEL key

          • PING

          • QUIT

          示例代碼:

          package main
          
          import (
            "log"
            "strings"
            "sync"
          
            "github.com/tidwall/redcon"
          )
          
          var addr = ":6380"
          
          func main() {
            var mu sync.RWMutex
            var items = make(map[string][]byte)
            go log.Printf("started server at %s", addr)
            err := redcon.ListenAndServe(addr,
              func(conn redcon.Conn, cmd redcon.Command) {
                switch strings.ToLower(string(cmd.Args[0])) {
                default:
                  conn.WriteError("ERR unknown command '" + string(cmd.Args[0]) + "'")
                case "ping":
                  conn.WriteString("PONG")
                case "quit":
                  conn.WriteString("OK")
                  conn.Close()
                case "set":
                  if len(cmd.Args) != 3 {
                    conn.WriteError("ERR wrong number of arguments for '" + string(cmd.Args[0]) + "' command")
                    return
                  }
                  mu.Lock()
                  items[string(cmd.Args[1])] = cmd.Args[2]
                  mu.Unlock()
                  conn.WriteString("OK")
                case "get":
                  if len(cmd.Args) != 2 {
                    conn.WriteError("ERR wrong number of arguments for '" + string(cmd.Args[0]) + "' command")
                    return
                  }
                  mu.RLock()
                  val, ok := items[string(cmd.Args[1])]
                  mu.RUnlock()
                  if !ok {
                    conn.WriteNull()
                  } else {
                    conn.WriteBulk(val)
                  }
                case "del":
                  if len(cmd.Args) != 2 {
                    conn.WriteError("ERR wrong number of arguments for '" + string(cmd.Args[0]) + "' command")
                    return
                  }
                  mu.Lock()
                  _, ok := items[string(cmd.Args[1])]
                  delete(items, string(cmd.Args[1]))
                  mu.Unlock()
                  if !ok {
                    conn.WriteInt(0)
                  } else {
                    conn.WriteInt(1)
                  }
                }
              },
              func(conn redcon.Conn) bool {
                // use this function to accept or deny the connection.
                // log.Printf("accept: %s", conn.RemoteAddr())
                return true
              },
              func(conn redcon.Conn, err error) {
                // this is called when the connection has been closed
                // log.Printf("closed: %s, err: %v", conn.RemoteAddr(), err)
              },
            )
            if err != nil {
              log.Fatal(err)
            }
          }
          瀏覽 25
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久精品苍井空免费一区 | 特级西西人体444.444人体聚色 | 久久r| 哪里有免费的国产在线黄色电影 | 九七在线无码视频 |