redhub

package module
v0.0.0-...-eb80b56 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 7, 2024 License: Apache-2.0 Imports: 5 Imported by: 0

README

REDHUB

RedHub

GoDoc FOSSA Status

High-performance RESP-Server multi-threaded framework, based on RawEpoll model.

  • Ultra high performance
  • Fully multi-threaded support
  • Low CPU resource consumption
  • Compatible with redis protocol
  • Create a Redis compatible server with RawEpoll model in Go

Installing

go get -u github.com/IceFireDB/redhub

Example

Here is a simple framework usage example,support the following redis commands:

  • SET key value
  • GET key
  • DEL key
  • PING
  • QUIT

You can run this example in terminal:

go run example/memory_kv/server.go

Benchmarks

Machine information
        OS : Debian Buster 10.6 64bit 
       CPU : 8 CPU cores
    Memory : 64.0 GiB

Go Version : go1.16.5 linux/amd64

【Redis-server5.0.3】 Single-threaded, no disk persistence.
$ ./redis-server --port 6380 --appendonly no
$ redis-benchmark -h 127.0.0.1 -p 6380 -n 50000000 -t set,get -c 512 -P 1024 -q
SET: 2306060.50 requests per second
GET: 3096742.25 requests per second
【Redis-server6.2.5】 Single-threaded, no disk persistence.
$ ./redis-server --port 6380 --appendonly no
$ redis-benchmark -h 127.0.0.1 -p 6380 -n 50000000 -t set,get -c 512 -P 1024 -q
SET: 2076325.75 requests per second
GET: 2652801.50 requests per second
【Redis-server6.2.5】 Multi-threaded, no disk persistence.
io-threads-do-reads yes
io-threads 8
$ ./redis-server redis.conf
$ redis-benchmark -h 127.0.0.1 -p 6379 -n 50000000 -t set,get -c 512 -P 1024 -q
SET: 1944692.88 requests per second
GET: 2375184.00 requests per second
【RedCon】 Multi-threaded, no disk persistence
$ go run example/clone.go
$ redis-benchmark -h 127.0.0.1 -p 6380 -n 50000000 -t set,get -c 512 -P 1024 -q
SET: 2332742.25 requests per second
GET: 14654162.00 requests per second
【RedHub】 Multi-threaded, no disk persistence
$ go run example/server.go
$ redis-benchmark -h 127.0.0.1 -p 6380 -n 50000000 -t set,get -c 512 -P 1024 -q
SET: 4087305.00 requests per second
GET: 16490765.00 requests per second

REDHUB Benchmarks

REDHUB Benchmarks

Disclaimers

When you use this software, you have agreed and stated that the author, maintainer and contributor of this software are not responsible for any risks, costs or problems you encounter. If you find a software defect or BUG, ​​please submit a patch to help improve it!

License

FOSSA Status

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ListenAndServe

func ListenAndServe(addr string, options Options, rh *RedHub) error

ListenAndServe starts the RedHub server

Types

type Action

type Action int

Action represents the type of action to be taken after an event

const (
	// None indicates that no action should occur following an event
	None Action = iota
	// Close indicates that the connection should be closed
	Close
	// Shutdown indicates that the server should be shut down
	Shutdown
)

type Conn

type Conn struct {
	gnet.Conn
}

Conn wraps a gnet.Conn

type Options

type Options struct {
	Multicore        bool
	LockOSThread     bool
	ReadBufferCap    int
	LB               gnet.LoadBalancing
	NumEventLoop     int
	ReusePort        bool
	Ticker           bool
	TCPKeepAlive     time.Duration
	TCPNoDelay       gnet.TCPSocketOpt
	SocketRecvBuffer int
	SocketSendBuffer int
	Codec            gnet.ICodec
}

Options defines the configuration options for the RedHub server

type RedHub

type RedHub struct {
	*gnet.EventServer
	// contains filtered or unexported fields
}

RedHub represents the main server structure

func NewRedHub

func NewRedHub(
	onOpened func(c *Conn) (out []byte, action Action),
	onClosed func(c *Conn, err error) (action Action),
	handler func(cmd resp.Command, out []byte) ([]byte, Action),
) *RedHub

NewRedHub creates a new RedHub instance

func (*RedHub) OnClosed

func (rs *RedHub) OnClosed(c gnet.Conn, err error) (action gnet.Action)

OnClosed is called when a connection is closed

func (*RedHub) OnOpened

func (rs *RedHub) OnOpened(c gnet.Conn) (out []byte, action gnet.Action)

OnOpened is called when a new connection is opened

func (*RedHub) React

func (rs *RedHub) React(frame []byte, c gnet.Conn) (out []byte, action gnet.Action)

React handles incoming data from connections

Directories

Path Synopsis
example
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL