Documentation ¶
Overview ¶
Package redcon implements a Redis compatible server framework
Index ¶
- Constants
- func AppendAny(b []byte, v interface{}) []byte
- func AppendArray(b []byte, n int) []byte
- func AppendBulk(b []byte, bulk []byte) []byte
- func AppendBulkFloat(dst []byte, f float64) []byte
- func AppendBulkInt(dst []byte, x int64) []byte
- func AppendBulkString(b []byte, bulk string) []byte
- func AppendBulkUint(dst []byte, x uint64) []byte
- func AppendError(b []byte, s string) []byte
- func AppendInt(b []byte, n int64) []byte
- func AppendNull(b []byte) []byte
- func AppendOK(b []byte) []byte
- func AppendString(b []byte, s string) []byte
- func AppendTile38(b []byte, data []byte) []byte
- func AppendUint(b []byte, n uint64) []byte
- func ListenAndServe(addr string, handler func(conn Conn, cmd Command), accept func(conn Conn) bool, ...) error
- func ListenAndServeNetwork(net, laddr string, handler func(conn Conn, cmd Command), ...) error
- func ListenAndServeNetworkTLS(net, laddr string, handler func(conn Conn, cmd Command), ...) error
- func ListenAndServeTLS(addr string, handler func(conn Conn, cmd Command), accept func(conn Conn) bool, ...) error
- func Serve(ln net.Listener, handler func(conn Conn, cmd Command), ...) error
- type Command
- type Conn
- type DetachedConn
- type Handler
- type HandlerFunc
- type Kind
- type Marshaler
- type PubSub
- type RESP
- type Reader
- type ServeMux
- type Server
- type SimpleError
- type SimpleInt
- type SimpleString
- type TLSServer
- type Type
- type Writer
- func (w *Writer) Buffer() []byte
- func (w *Writer) Flush() error
- func (w *Writer) SetBuffer(raw []byte)
- func (w *Writer) WriteAny(v interface{})
- func (w *Writer) WriteArray(count int)
- func (w *Writer) WriteBulk(bulk []byte)
- func (w *Writer) WriteBulkString(bulk string)
- func (w *Writer) WriteError(msg string)
- func (w *Writer) WriteInt(num int)
- func (w *Writer) WriteInt64(num int64)
- func (w *Writer) WriteNull()
- func (w *Writer) WriteRaw(data []byte)
- func (w *Writer) WriteString(msg string)
- func (w *Writer) WriteUint64(num uint64)
Constants ¶
const ( Integer = ':' String = '+' Bulk = '$' Array = '*' Error = '-' )
Various RESP kinds
Variables ¶
This section is empty.
Functions ¶
func AppendAny ¶ added in v1.3.0
AppendAny appends any type to valid Redis type.
nil -> null error -> error (adds "ERR " when first word is not uppercase) string -> bulk-string numbers -> bulk-string []byte -> bulk-string bool -> bulk-string ("0" or "1") slice -> array map -> array with key/value pairs SimpleString -> string SimpleInt -> integer Marshaler -> raw bytes everything-else -> bulk-string representation using fmt.Sprint()
func AppendArray ¶
AppendArray appends a Redis protocol array to the input bytes.
func AppendBulk ¶
AppendBulk appends a Redis protocol bulk byte slice to the input bytes.
func AppendBulkFloat ¶ added in v1.0.2
AppendBulkFloat appends a float64, as bulk bytes.
func AppendBulkInt ¶ added in v1.0.2
AppendBulkInt appends an int64, as bulk bytes.
func AppendBulkString ¶
AppendBulkString appends a Redis protocol bulk string to the input bytes.
func AppendBulkUint ¶ added in v1.0.2
AppendBulkUint appends an uint64, as bulk bytes.
func AppendError ¶
AppendError appends a Redis protocol error to the input bytes.
func AppendNull ¶
AppendNull appends a Redis protocol null to the input bytes.
func AppendString ¶
AppendString appends a Redis protocol string to the input bytes.
func AppendTile38 ¶
AppendTile38 appends a Tile38 message to the input bytes.
func AppendUint ¶
AppendUint appends a Redis protocol uint64 to the input bytes.
func ListenAndServe ¶
func ListenAndServe(addr string, handler func(conn Conn, cmd Command), accept func(conn Conn) bool, closed func(conn Conn, err error), ) error
ListenAndServe creates a new server and binds to addr configured on "tcp" network net.
func ListenAndServeNetwork ¶
func ListenAndServeNetwork( net, laddr string, handler func(conn Conn, cmd Command), accept func(conn Conn) bool, closed func(conn Conn, err error), ) error
ListenAndServeNetwork creates a new server and binds to addr. The network net must be a stream-oriented network: "tcp", "tcp4", "tcp6", "unix" or "unixpacket"
func ListenAndServeNetworkTLS ¶
func ListenAndServeNetworkTLS( net, laddr string, handler func(conn Conn, cmd Command), accept func(conn Conn) bool, closed func(conn Conn, err error), config *tls.Config, ) error
ListenAndServeNetworkTLS creates a new TLS server and binds to addr. The network net must be a stream-oriented network: "tcp", "tcp4", "tcp6", "unix" or "unixpacket"
Types ¶
type Command ¶
type Command struct { // Raw is a encoded RESP message. Raw []byte // Args is a series of arguments that make up the command. Args [][]byte }
Command represent a command
type Conn ¶
type Conn interface { // RemoteAddr returns the remote address of the client connection. RemoteAddr() string // Close closes the connection. Close() error // WriteError writes an error to the client. WriteError(msg string) // WriteString writes a string to the client. WriteString(str string) // WriteBulk writes bulk bytes to the client. WriteBulk(bulk []byte) // WriteBulkString writes a bulk string to the client. WriteBulkString(bulk string) // WriteInt writes an integer to the client. WriteInt(num int) // WriteInt64 writes a 64-bit signed integer to the client. WriteInt64(num int64) // WriteUint64 writes a 64-bit unsigned integer to the client. WriteUint64(num uint64) // WriteArray writes an array header. You must then write additional // sub-responses to the client to complete the response. // For example to write two strings: // // c.WriteArray(2) // c.WriteBulkString("item 1") // c.WriteBulkString("item 2") WriteArray(count int) // WriteNull writes a null to the client WriteNull() // WriteRaw writes raw data to the client. WriteRaw(data []byte) // WriteAny writes any type to the client. // nil -> null // error -> error (adds "ERR " when first word is not uppercase) // string -> bulk-string // numbers -> bulk-string // []byte -> bulk-string // bool -> bulk-string ("0" or "1") // slice -> array // map -> array with key/value pairs // SimpleString -> string // SimpleInt -> integer // everything-else -> bulk-string representation using fmt.Sprint() WriteAny(any interface{}) // Context returns a user-defined context Context() interface{} // SetContext sets a user-defined context SetContext(v interface{}) // SetReadBuffer updates the buffer read size for the connection SetReadBuffer(bytes int) // Detach return a connection that is detached from the server. // Useful for operations like PubSub. // // dconn := conn.Detach() // go func(){ // defer dconn.Close() // cmd, err := dconn.ReadCommand() // if err != nil{ // fmt.Printf("read failed: %v\n", err) // return // } // fmt.Printf("received command: %v", cmd) // hconn.WriteString("OK") // if err := dconn.Flush(); err != nil{ // fmt.Printf("write failed: %v\n", err) // return // } // }() Detach() DetachedConn // ReadPipeline returns all commands in current pipeline, if any // The commands are removed from the pipeline. ReadPipeline() []Command // PeekPipeline returns all commands in current pipeline, if any. // The commands remain in the pipeline. PeekPipeline() []Command // NetConn returns the base net.Conn connection NetConn() net.Conn }
Conn represents a client connection
type DetachedConn ¶
type DetachedConn interface { // Conn is the original connection Conn // ReadCommand reads the next client command. ReadCommand() (Command, error) // Flush flushes any writes to the network. Flush() error }
DetachedConn represents a connection that is detached from the server
type HandlerFunc ¶ added in v1.0.1
The HandlerFunc type is an adapter to allow the use of ordinary functions as RESP handlers. If f is a function with the appropriate signature, HandlerFunc(f) is a Handler that calls f.
func (HandlerFunc) ServeRESP ¶ added in v1.0.1
func (f HandlerFunc) ServeRESP(conn Conn, cmd Command)
ServeRESP calls f(w, r)
type Kind ¶
type Kind int
Kind is the kind of command
func ReadNextCommand ¶
func ReadNextCommand(packet []byte, argsbuf [][]byte) ( complete bool, args [][]byte, kind Kind, leftover []byte, err error, )
ReadNextCommand reads the next command from the provided packet. It's possible that the packet contains multiple commands, or zero commands when the packet is incomplete. 'argsbuf' is an optional reusable buffer and it can be nil. 'complete' indicates that a command was read. false means no more commands. 'args' are the output arguments for the command. 'kind' is the type of command that was read. 'leftover' is any remaining unused bytes which belong to the next command. 'err' is returned when a protocol error was encountered.
type Marshaler ¶ added in v1.3.3
type Marshaler interface {
MarshalRESP() []byte
}
Marshaler is the interface implemented by types that can marshal themselves into a Redis response type from an *Any call. The return value is not check for validity.
type PubSub ¶ added in v1.4.0
type PubSub struct {
// contains filtered or unexported fields
}
PubSub is a Redis compatible pub/sub server
func (*PubSub) Psubscribe ¶ added in v1.4.0
Psubscribe a connection to PubSub
type RESP ¶ added in v1.2.0
func ReadNextRESP ¶ added in v1.2.0
ReadNextRESP returns the next resp in b and returns the number of bytes the took up the result.
type Reader ¶
type Reader struct {
// contains filtered or unexported fields
}
Reader represent a reader for RESP or telnet commands.
func (*Reader) ReadCommand ¶
ReadCommand reads the next command.
func (*Reader) ReadCommands ¶ added in v1.4.1
ReadCommands reads the next pipeline commands.
type ServeMux ¶ added in v1.0.1
type ServeMux struct {
// contains filtered or unexported fields
}
ServeMux is an RESP command multiplexer.
func NewServeMux ¶ added in v1.0.1
func NewServeMux() *ServeMux
NewServeMux allocates and returns a new ServeMux.
func (*ServeMux) Handle ¶ added in v1.0.1
Handle registers the handler for the given command. If a handler already exists for command, Handle panics.
func (*ServeMux) HandleFunc ¶ added in v1.0.1
HandleFunc registers the handler function for the given command.
type Server ¶
type Server struct { // AcceptError is an optional function used to handle Accept errors. AcceptError func(err error) // contains filtered or unexported fields }
Server defines a server for clients for managing client connections.
func NewServer ¶
func NewServer(addr string, handler func(conn Conn, cmd Command), accept func(conn Conn) bool, closed func(conn Conn, err error), ) *Server
NewServer returns a new Redcon server configured on "tcp" network net.
func NewServerNetwork ¶
func NewServerNetwork( net, laddr string, handler func(conn Conn, cmd Command), accept func(conn Conn) bool, closed func(conn Conn, err error), ) *Server
NewServerNetwork returns a new Redcon server. The network net must be a stream-oriented network: "tcp", "tcp4", "tcp6", "unix" or "unixpacket"
func (*Server) Close ¶
Close stops listening on the TCP address. Already Accepted connections will be closed.
func (*Server) ListenAndServe ¶
ListenAndServe serves incoming connections.
func (*Server) ListenServeAndSignal ¶
ListenServeAndSignal serves incoming connections and passes nil or error when listening. signal can be nil.
func (*Server) Serve ¶ added in v1.0.0
Serve serves incoming connections with the given net.Listener.
func (*Server) SetIdleClose ¶ added in v1.4.0
SetIdleClose will automatically close idle connections after the specified duration. Use zero to disable this feature.
type SimpleError ¶ added in v1.6.0
type SimpleError error
SimpleError is for representing an error without adding the "ERR" prefix from an *Any call.
type SimpleInt ¶ added in v1.3.2
type SimpleInt int
SimpleInt is for representing a non-bulk representation of a int from an *Any call.
type SimpleString ¶ added in v1.3.2
type SimpleString string
SimpleString is for representing a non-bulk representation of a string from an *Any call.
type TLSServer ¶
type TLSServer struct { *Server // contains filtered or unexported fields }
TLSServer defines a server for clients for managing client connections.
func NewServerNetworkTLS ¶
func NewServerNetworkTLS( net, laddr string, handler func(conn Conn, cmd Command), accept func(conn Conn) bool, closed func(conn Conn, err error), config *tls.Config, ) *TLSServer
NewServerNetworkTLS returns a new TLS Redcon server. The network net must be a stream-oriented network: "tcp", "tcp4", "tcp6", "unix" or "unixpacket"
func NewServerTLS ¶
func NewServerTLS(addr string, handler func(conn Conn, cmd Command), accept func(conn Conn) bool, closed func(conn Conn, err error), config *tls.Config, ) *TLSServer
NewServerTLS returns a new Redcon TLS server configured on "tcp" network net.
func (*TLSServer) Close ¶
Close stops listening on the TCP address. Already Accepted connections will be closed.
func (*TLSServer) ListenAndServe ¶
ListenAndServe serves incoming connections.
func (*TLSServer) ListenServeAndSignal ¶
ListenServeAndSignal serves incoming connections and passes nil or error when listening. signal can be nil.
type Writer ¶
type Writer struct {
// contains filtered or unexported fields
}
Writer allows for writing RESP messages.
func BaseWriter ¶
BaseWriter returns the underlying connection writer, if any
func (*Writer) Buffer ¶
Buffer returns the unflushed buffer. This is a copy so changes to the resulting []byte will not affect the writer.
func (*Writer) WriteAny ¶ added in v1.3.0
func (w *Writer) WriteAny(v interface{})
WriteAny writes any type to client.
nil -> null error -> error (adds "ERR " when first word is not uppercase) string -> bulk-string numbers -> bulk-string []byte -> bulk-string bool -> bulk-string ("0" or "1") slice -> array map -> array with key/value pairs SimpleString -> string SimpleInt -> integer everything-else -> bulk-string representation using fmt.Sprint()
func (*Writer) WriteArray ¶
WriteArray writes an array header. You must then write additional sub-responses to the client to complete the response. For example to write two strings:
c.WriteArray(2) c.WriteBulkString("item 1") c.WriteBulkString("item 2")
func (*Writer) WriteBulkString ¶
WriteBulkString writes a bulk string to the client.
func (*Writer) WriteError ¶
WriteError writes an error to the client.
func (*Writer) WriteInt64 ¶
WriteInt64 writes a 64-bit signed integer to the client.
func (*Writer) WriteString ¶
WriteString writes a string to the client.
func (*Writer) WriteUint64 ¶ added in v1.0.1
WriteUint64 writes a 64-bit unsigned integer to the client.