Redcon

兼容 Redis 的 K/V 数据库
授权协议 MIT
开发语言 Google Go
所属分类 数据库相关、 NoSQL数据库
软件类型 开源软件
地区 不详
投 递 者 佟和安
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Redcon 是一个采用 Go 开发的兼容 Redis 的 Key/Value 数据库。特点是简单、快速。

支持 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)
  }
}
 相关资料
  • k 是一款基于 Electron 的 Redis 图形化客户端。 功能 k 目前支持 string、hash、list 等数据类型。 k 提供一个简易的命令行执行功能,可以执行一些常见的 redis 命令。 redis 订阅发布 提供命令行工具 黑色主题,来自 Arattian/element-theme-dark 背景图片自动切换(点击 logo 即可设置背景图片) 界面 相比常见的客户端程序,

  • 不知道Spring Data Elasticsearch 3.0.6支持哪个版本的Elasticsearch? 目前我正在使用Elasticsearch 6.2,这兼容吗?现在我正在使用Elasticsearch Rest Client进行Java,但是由于我使用的是Spring,所以我考虑使用Spring Data Elasticsearch。

  • 我使用的是spring boot 1.5.7。发布,spring data elasticsearch 3.0.2。释放和弹性搜索5.6.3。然而,当使用maven进行构建时,它似乎在加载elasticsearch 2.4.6。当我试图通过pom文件强制elasticsearch 5.6.3时,我收到运行时异常,该异常显示缺少运行时依赖项。有什么想法吗?

  • Redis 哨兵(Sentinel)是 Redis 的高可用性(Hight Availability)解决方案:由一个或多个 Sentinel 实例组成的 Sentinel 系统可以监视任意多个主服务器,以及这些主服务器的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。 Sentinel

  • 问题内容: 上面的代码不会给出任何错误/警告。但是为什么相同的方法不适用于以下提到的代码? 我的问题是,由于int可以容纳所有字节值,为什么数组不是这种情况? 他们俩毕竟都持有住址。如果这对于ref变量是可行的,那将是 令人沮丧的 。 问题答案: 语言规范在Sec 4.10.3中 定义了数组类型之间的子类型化: 以下规则定义了数组类型之间的直接超类型关系: 如果和都是引用类型,则。 如果是原始类型

  • CodeIgniter 提供了一系列兼容性函数可以让你使用,它们只有在高版本的 PHP 中才有, 或者需要依赖其他的扩展才有。 由于是自己实现的,这些函数本身也可能有它自己的依赖性,但如果你的 PHP 中不提供这些函数时, 这些函数还是有用的。 注解 和 公共函数 一样,兼容性函数也一直可以访问,只要满足了他们的依赖条件。 密码哈希 依赖性 常量 函数参考 哈希(信息摘要) 依赖性 函数参考 多字