redsrv: redka server (#46)

This commit is contained in:
Anton
2025-07-13 22:37:43 +05:00
parent 2215a0a3b3
commit 6bcbec5754
212 changed files with 394 additions and 295 deletions

View File

@@ -26,7 +26,7 @@ import (
_ "github.com/lib/pq"
"github.com/mattn/go-sqlite3"
"github.com/nalgeon/redka"
"github.com/nalgeon/redka/internal/server"
"github.com/nalgeon/redka/redsrv"
)
// set by the build process
@@ -188,13 +188,13 @@ func inferDriverName(path string) string {
}
// startServer starts the application server.
func startServer(config Config, db *redka.DB, ready chan error) *server.Server {
func startServer(config Config, db *redka.DB, ready chan error) *redsrv.Server {
// Create the server.
var srv *server.Server
var srv *redsrv.Server
if config.Sock != "" {
srv = server.New("unix", config.Sock, db)
srv = redsrv.New("unix", config.Sock, db)
} else {
srv = server.New("tcp", config.Addr(), db)
srv = redsrv.New("tcp", config.Addr(), db)
}
// Start the server.
@@ -208,11 +208,11 @@ func startServer(config Config, db *redka.DB, ready chan error) *server.Server {
}
// startDebugServer starts the debug server.
func startDebugServer(config Config, ready chan<- error) *server.DebugServer {
func startDebugServer(config Config, ready chan<- error) *redsrv.DebugServer {
if !config.Verbose {
return nil
}
srv := server.NewDebug("localhost", debugPort)
srv := redsrv.NewDebug("localhost", debugPort)
go func() {
if err := srv.Start(); err != nil {
ready <- fmt.Errorf("start debug server: %w", err)
@@ -222,7 +222,7 @@ func startDebugServer(config Config, ready chan<- error) *server.DebugServer {
}
// shutdown stops the main server and the debug server.
func shutdown(srv *server.Server, debugSrv *server.DebugServer) {
func shutdown(srv *redsrv.Server, debugSrv *redsrv.DebugServer) {
slog.Info("stopping redka")
// Stop the debug server.

View File

@@ -11,10 +11,13 @@ require (
github.com/mattn/go-sqlite3 v1.14.28
github.com/nalgeon/redka v0.0.0-00010101000000-000000000000
github.com/ncruces/go-sqlite3 v0.16.2
github.com/redis/go-redis/v9 v9.11.0
modernc.org/sqlite v1.29.5
)
require (
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/google/uuid v1.3.0 // indirect
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
@@ -23,6 +26,9 @@ require (
github.com/ncruces/julianday v1.0.0 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
github.com/tetratelabs/wazero v1.7.3 // indirect
github.com/tidwall/btree v1.7.0 // indirect
github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/redcon v1.6.2 // indirect
golang.org/x/sys v0.21.0 // indirect
golang.org/x/tools v0.19.0 // indirect
modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 // indirect

View File

@@ -1,3 +1,11 @@
github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ=
@@ -22,10 +30,19 @@ github.com/ncruces/julianday v1.0.0 h1:fH0OKwa7NWvniGQtxdJRxAgkBMolni2BjDHaWTxqt
github.com/ncruces/julianday v1.0.0/go.mod h1:Dusn2KvZrrovOMJuOt0TNXL6tB7U2E8kvza5fFc9G7g=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/redis/go-redis/v9 v9.11.0 h1:E3S08Gl/nJNn5vkxd2i78wZxWAPNZgUNTp8WIJUAiIs=
github.com/redis/go-redis/v9 v9.11.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/tetratelabs/wazero v1.7.3 h1:PBH5KVahrt3S2AHgEjKu4u+LlDbbk+nsGE3KLucy6Rw=
github.com/tetratelabs/wazero v1.7.3/go.mod h1:ytl6Zuh20R/eROuyDaGPkp82O9C/DJfXAwJfQ3X6/7Y=
github.com/tidwall/btree v1.1.0/go.mod h1:TzIRzen6yHbibdSfK6t8QimqbUnoxUSrZfeW7Uob0q4=
github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI=
github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY=
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
github.com/tidwall/redcon v1.6.2 h1:5qfvrrybgtO85jnhSravmkZyC0D+7WstbfCs3MmPhow=
github.com/tidwall/redcon v1.6.2/go.mod h1:p5Wbsgeyi2VSTBWOcA5vRXrOb9arFTcU2+ZzFjqV75Y=
golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=

68
example/server/main.go Normal file
View File

@@ -0,0 +1,68 @@
// An example of running a Redka server
// within your own application.
package main
import (
"context"
"fmt"
_ "github.com/mattn/go-sqlite3"
"github.com/nalgeon/redka"
"github.com/nalgeon/redka/redsrv"
"github.com/redis/go-redis/v9"
)
func main() {
// Start a Redka server with an in-memory database.
db := mustOpen()
srv := mustStart(db)
defer func() {
_ = srv.Stop()
fmt.Println("redka server stopped")
}()
fmt.Println("redka server started")
// The server is now running and ready to accept connections.
// You can use the regular go-redis package to access Redka.
rdb := redis.NewClient(&redis.Options{Addr: ":6380"})
defer func() { _ = rdb.Close() }()
ctx := context.Background()
rdb.Set(ctx, "name", "alice", 0)
rdb.Set(ctx, "age", 25, 0)
name, _ := rdb.Get(ctx, "name").Result()
fmt.Println("name =", name)
age, _ := rdb.Get(ctx, "age").Int()
fmt.Println("age =", age)
}
// mustOpen opens an in-memory Redka database.
func mustOpen() *redka.DB {
db, err := redka.Open("file:/redka.db?vfs=memdb", nil)
if err != nil {
panic(err)
}
return db
}
// mustStart starts a Redka server on localhost:6380.
func mustStart(db *redka.DB) *redsrv.Server {
srv := redsrv.New("tcp", ":6380", db)
// The ready channel will receive a nil value when the server is ready,
// or an error if it fails to start.
ready := make(chan error, 1)
go func() {
if err := srv.Start(ready); err != nil {
ready <- err
return
}
}()
// Wait for the server to be ready.
if err := <-ready; err != nil {
panic(err)
}
return srv
}

View File

@@ -262,6 +262,11 @@ func (db *DB) ZSet() *rzset.DB {
return db.zsetDB
}
// Log returns the logger for the database.
func (db *DB) Log() *slog.Logger {
return db.log
}
// Update executes a function within a writable transaction.
func (db *DB) Update(f func(tx *Tx) error) error {
return db.act.Update(f)

View File

@@ -1,4 +1,4 @@
package server
package redsrv
import (
"fmt"

View File

@@ -1,26 +1,26 @@
package server
package redsrv
import (
"log/slog"
"time"
"github.com/nalgeon/redka"
"github.com/nalgeon/redka/internal/command"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/command"
"github.com/nalgeon/redka/redsrv/internal/redis"
"github.com/tidwall/redcon"
)
// createHandlers returns the server command handlers.
func createHandlers(db *redka.DB) redcon.HandlerFunc {
return logging(parse(multi(handle(db))))
return logging(parse(multi(handle(db))), db.Log())
}
// logging logs the command processing time.
func logging(next redcon.HandlerFunc) redcon.HandlerFunc {
func logging(next redcon.HandlerFunc, log *slog.Logger) redcon.HandlerFunc {
return func(conn redcon.Conn, cmd redcon.Command) {
start := time.Now()
next(conn, cmd)
slog.Debug("process command", "client", conn.RemoteAddr(),
log.Debug("process command", "client", conn.RemoteAddr(),
"name", string(cmd.Args[0]), "time", time.Since(start))
}
}
@@ -100,7 +100,7 @@ func handleMulti(conn redcon.Conn, state *connState, db *redka.DB) {
for _, pcmd := range state.cmds {
_, err := pcmd.Run(conn, redis.RedkaTx(tx))
if err != nil {
slog.Warn("run multi command", "client", conn.RemoteAddr(),
db.Log().Warn("run multi command", "client", conn.RemoteAddr(),
"name", pcmd.Name(), "err", err)
return err
}
@@ -108,7 +108,7 @@ func handleMulti(conn redcon.Conn, state *connState, db *redka.DB) {
return nil
})
if err != nil {
slog.Warn("run multi", "client", conn.RemoteAddr(), "err", err)
db.Log().Warn("run multi", "client", conn.RemoteAddr(), "err", err)
}
}
@@ -117,7 +117,7 @@ func handleSingle(conn redcon.Conn, state *connState, db *redka.DB) {
pcmd := state.pop()
_, err := pcmd.Run(conn, redis.RedkaDB(db))
if err != nil {
slog.Warn("run single command", "client", conn.RemoteAddr(),
db.Log().Warn("run single command", "client", conn.RemoteAddr(),
"name", pcmd.Name(), "err", err)
return
}

View File

@@ -1,4 +1,4 @@
package server
package redsrv
import (
"net"

View File

@@ -5,15 +5,15 @@ package command
import (
"strings"
"github.com/nalgeon/redka/internal/command/conn"
"github.com/nalgeon/redka/internal/command/hash"
"github.com/nalgeon/redka/internal/command/key"
"github.com/nalgeon/redka/internal/command/list"
"github.com/nalgeon/redka/internal/command/server"
"github.com/nalgeon/redka/internal/command/set"
str "github.com/nalgeon/redka/internal/command/string"
"github.com/nalgeon/redka/internal/command/zset"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/command/conn"
"github.com/nalgeon/redka/redsrv/internal/command/hash"
"github.com/nalgeon/redka/redsrv/internal/command/key"
"github.com/nalgeon/redka/redsrv/internal/command/list"
"github.com/nalgeon/redka/redsrv/internal/command/server"
"github.com/nalgeon/redka/redsrv/internal/command/set"
str "github.com/nalgeon/redka/redsrv/internal/command/string"
"github.com/nalgeon/redka/redsrv/internal/command/zset"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Parse parses a text representation of a command into a Cmd.

View File

@@ -3,8 +3,8 @@ package conn
import (
"testing"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/internal/testx"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func getRedka(tb testing.TB) redis.Redka {

View File

@@ -3,8 +3,8 @@ package conn
import (
"strings"
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Echo returns the given string.

View File

@@ -4,7 +4,7 @@ import (
"testing"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestEchoParse(t *testing.T) {

View File

@@ -1,8 +1,8 @@
package conn
import (
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
const (

View File

@@ -4,7 +4,7 @@ import (
"testing"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestPingParse(t *testing.T) {

View File

@@ -1,8 +1,8 @@
package conn
import (
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Changes the selected database.

View File

@@ -4,7 +4,7 @@ import (
"testing"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestSelectParse(t *testing.T) {

View File

@@ -3,8 +3,8 @@ package hash
import (
"testing"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/internal/testx"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func getRedka(tb testing.TB) redis.Redka {

View File

@@ -1,8 +1,8 @@
package hash
import (
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Deletes one or more fields and their values from a hash.

View File

@@ -5,7 +5,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestHDelParse(t *testing.T) {

View File

@@ -1,6 +1,6 @@
package hash
import "github.com/nalgeon/redka/internal/redis"
import "github.com/nalgeon/redka/redsrv/internal/redis"
// Determines whether a field exists in a hash.
// HEXISTS key field

View File

@@ -4,7 +4,7 @@ import (
"testing"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestHExistsParse(t *testing.T) {

View File

@@ -2,7 +2,7 @@ package hash
import (
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Returns the value of a field in a hash.

View File

@@ -5,7 +5,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestHGetParse(t *testing.T) {

View File

@@ -1,6 +1,6 @@
package hash
import "github.com/nalgeon/redka/internal/redis"
import "github.com/nalgeon/redka/redsrv/internal/redis"
// Returns all fields and values in a hash.
// HGETALL key

View File

@@ -5,7 +5,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestHGetAllParse(t *testing.T) {

View File

@@ -1,8 +1,8 @@
package hash
import (
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Increments the integer value of a field in a hash by a number.

View File

@@ -5,7 +5,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestHIncrByParse(t *testing.T) {

View File

@@ -1,8 +1,8 @@
package hash
import (
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Increments the floating point value of a field by a number.

View File

@@ -5,7 +5,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestHIncrByFloatParse(t *testing.T) {

View File

@@ -1,6 +1,6 @@
package hash
import "github.com/nalgeon/redka/internal/redis"
import "github.com/nalgeon/redka/redsrv/internal/redis"
// Returns all fields in a hash.
// HKEYS key

View File

@@ -5,7 +5,7 @@ import (
"testing"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestHKeysParse(t *testing.T) {

View File

@@ -1,6 +1,6 @@
package hash
import "github.com/nalgeon/redka/internal/redis"
import "github.com/nalgeon/redka/redsrv/internal/redis"
// Returns the number of fields in a hash.
// HLEN key

View File

@@ -4,7 +4,7 @@ import (
"testing"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestHLenParse(t *testing.T) {

View File

@@ -2,8 +2,8 @@ package hash
import (
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Returns the values of multiple fields in a hash.

View File

@@ -5,7 +5,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestHMGetParse(t *testing.T) {

View File

@@ -1,8 +1,8 @@
package hash
import (
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Sets the values of multiple fields in a hash.

View File

@@ -4,7 +4,7 @@ import (
"testing"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestHMSetParse(t *testing.T) {

View File

@@ -1,8 +1,8 @@
package hash
import (
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Iterates over fields and values of a hash.

View File

@@ -6,8 +6,8 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/internal/rhash"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestHScanParse(t *testing.T) {

View File

@@ -1,8 +1,8 @@
package hash
import (
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Sets the values of one ore more fields in a hash.

View File

@@ -4,7 +4,7 @@ import (
"testing"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestHSetParse(t *testing.T) {

View File

@@ -1,6 +1,6 @@
package hash
import "github.com/nalgeon/redka/internal/redis"
import "github.com/nalgeon/redka/redsrv/internal/redis"
// Sets the value of a field in a hash only when the field doesn't exist.
// HSETNX key field value

View File

@@ -4,7 +4,7 @@ import (
"testing"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestHSetNXParse(t *testing.T) {

View File

@@ -1,6 +1,6 @@
package hash
import "github.com/nalgeon/redka/internal/redis"
import "github.com/nalgeon/redka/redsrv/internal/redis"
// Returns all values in a hash.
// HVALS key

View File

@@ -6,7 +6,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestHValsParse(t *testing.T) {

View File

@@ -1,8 +1,8 @@
package key
import (
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Deletes one or more Keys.

View File

@@ -5,7 +5,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestDelParse(t *testing.T) {

View File

@@ -1,8 +1,8 @@
package key
import (
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Determines whether one or more keys exist.

View File

@@ -4,7 +4,7 @@ import (
"testing"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestExistsParse(t *testing.T) {

View File

@@ -4,8 +4,8 @@ import (
"time"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Sets the expiration time of a key in seconds.

View File

@@ -5,7 +5,7 @@ import (
"time"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestExpireParse(t *testing.T) {

View File

@@ -4,8 +4,8 @@ import (
"time"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Sets the expiration time of a key to a Unix timestamp.

View File

@@ -6,7 +6,7 @@ import (
"time"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestExpireAtParse(t *testing.T) {

View File

@@ -1,6 +1,6 @@
package key
import "github.com/nalgeon/redka/internal/redis"
import "github.com/nalgeon/redka/redsrv/internal/redis"
// Remove all keys from the current database.
// FLUSHDB

View File

@@ -4,7 +4,7 @@ import (
"testing"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestFlushDBParse(t *testing.T) {

View File

@@ -3,8 +3,8 @@ package key
import (
"testing"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/internal/testx"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func getRedka(tb testing.TB) redis.Redka {

View File

@@ -1,6 +1,6 @@
package key
import "github.com/nalgeon/redka/internal/redis"
import "github.com/nalgeon/redka/redsrv/internal/redis"
// Returns all key names that match a pattern.
// KEYS pattern

View File

@@ -5,7 +5,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestKeysParse(t *testing.T) {

View File

@@ -2,7 +2,7 @@ package key
import (
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Removes the expiration time of a key.

View File

@@ -5,7 +5,7 @@ import (
"time"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestPersistParse(t *testing.T) {

View File

@@ -5,7 +5,7 @@ import (
"time"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestPExpireParse(t *testing.T) {

View File

@@ -2,7 +2,7 @@ package key
import (
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Returns a random key name from the database.

View File

@@ -6,7 +6,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestRandomKeyParse(t *testing.T) {

View File

@@ -1,6 +1,6 @@
package key
import "github.com/nalgeon/redka/internal/redis"
import "github.com/nalgeon/redka/redsrv/internal/redis"
// Renames a key and overwrites the destination.
// RENAME key newkey

View File

@@ -5,7 +5,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestRenameParse(t *testing.T) {

View File

@@ -1,6 +1,6 @@
package key
import "github.com/nalgeon/redka/internal/redis"
import "github.com/nalgeon/redka/redsrv/internal/redis"
// Renames a key only when the target key name doesn't exist.
// RENAMENX key newkey

View File

@@ -5,7 +5,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestRenameNXParse(t *testing.T) {

View File

@@ -2,8 +2,8 @@ package key
import (
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
const (

View File

@@ -5,8 +5,8 @@ import (
"testing"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/internal/rkey"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestScanParse(t *testing.T) {

View File

@@ -4,7 +4,7 @@ import (
"time"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Returns the expiration time in seconds of a key.

View File

@@ -5,7 +5,7 @@ import (
"time"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestTTLParse(t *testing.T) {

View File

@@ -2,7 +2,7 @@ package key
import (
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Determines the type of value stored at a key.

View File

@@ -4,7 +4,7 @@ import (
"testing"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestTypeParse(t *testing.T) {

View File

@@ -2,8 +2,8 @@ package list
import (
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Returns an element from a list by its index.

View File

@@ -5,7 +5,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestLIndexParse(t *testing.T) {

View File

@@ -2,8 +2,8 @@ package list
import (
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
const (

View File

@@ -5,7 +5,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestLInsertParse(t *testing.T) {

View File

@@ -3,8 +3,8 @@ package list
import (
"testing"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/internal/testx"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func getRedka(tb testing.TB) redis.Redka {

View File

@@ -1,8 +1,8 @@
package list
import (
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Returns the length of a list.

View File

@@ -4,7 +4,7 @@ import (
"testing"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestLLenParse(t *testing.T) {

View File

@@ -2,8 +2,8 @@ package list
import (
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Returns the first element of a list after removing it.

View File

@@ -5,7 +5,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestLPopParse(t *testing.T) {

View File

@@ -1,8 +1,8 @@
package list
import (
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Prepends an element to a list.

View File

@@ -5,7 +5,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestLPushParse(t *testing.T) {

View File

@@ -1,8 +1,8 @@
package list
import (
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Returns a range of elements from a list.

View File

@@ -5,7 +5,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestLRangeParse(t *testing.T) {

View File

@@ -1,8 +1,8 @@
package list
import (
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Removes elements from a list.

View File

@@ -4,7 +4,7 @@ import (
"testing"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestLRemParse(t *testing.T) {

View File

@@ -2,8 +2,8 @@ package list
import (
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Sets the value of an element in a list by its index.

View File

@@ -5,7 +5,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestLSetParse(t *testing.T) {

View File

@@ -1,8 +1,8 @@
package list
import (
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Removes elements from both ends a list.

View File

@@ -4,7 +4,7 @@ import (
"testing"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestLTrimParse(t *testing.T) {

View File

@@ -2,8 +2,8 @@ package list
import (
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Returns the last element of a list after removing it.

View File

@@ -5,7 +5,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestRPopParse(t *testing.T) {

View File

@@ -2,8 +2,8 @@ package list
import (
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Returns the last element of a list after removing

View File

@@ -5,7 +5,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestRPopLPushParse(t *testing.T) {

View File

@@ -1,8 +1,8 @@
package list
import (
"github.com/nalgeon/redka/internal/parser"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/parser"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Appends an element to a list.

View File

@@ -5,7 +5,7 @@ import (
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/core"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestRPushParse(t *testing.T) {

View File

@@ -1,7 +1,7 @@
package server
import (
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
// Container command for runtime configuration commands.

View File

@@ -4,7 +4,7 @@ import (
"testing"
"github.com/nalgeon/be"
"github.com/nalgeon/redka/internal/redis"
"github.com/nalgeon/redka/redsrv/internal/redis"
)
func TestConfigParse(t *testing.T) {

Some files were not shown because too many files have changed in this diff Show More