Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,38 @@ curl http://localhost:8080/set/bucket001/foo
# List all list
curl http://localhost:8080/list/bucket001/key1?start=0&end=10
```

**modify example data**

You can modify the tests in the sample program by modifying the file "example/init.yaml".

The file format is as follows:

```yaml
# kv data
kv:
bucket-a: # bucket name
key-1: # key
str: value-1 # value
key-2: # key
base64: dW50c2Ri # data in base64 format
# list data
list:
bucket-b: # bucket name
key-1:
- str: value-1
- str: value-2
# set data
set:
bucket-c: # bucket name
key-1:
- str: value-1
- str: value-2
# sorted-set data
zset:
bucket-d: # bucket name
key-1:
- score: 1660575966082
str: value

```
4 changes: 4 additions & 0 deletions config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
users:
admin: admin
user1: user1
port: 8080
103 changes: 100 additions & 3 deletions core_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,111 @@ package nutshttp

import "github.com/xujiajun/nutsdb"

func (c *core) LRange(bucket string, key []byte, begin, offset int) ([][]byte, error) {
var items [][]byte
func (c *core) LRange(bucket string, key string, start, end int) ([]string, error) {
var items []string

err := c.db.Update(func(tx *nutsdb.Tx) (err error) {

items, err = tx.LRange(bucket, key, begin, offset)
itemsBytes, err := tx.LRange(bucket, []byte(key), start, end)
if err == nil {
for _, itemByte := range itemsBytes {
items = append(items, string(itemByte))
}
}
return err
})

return items, err
}

func (c *core) RPush(bucket, key, value string) error {
err := c.db.Update(func(tx *nutsdb.Tx) error {
err := tx.RPush(bucket, []byte(key), []byte(value))
return err
})
return err
}

func (c *core) LPush(bucket, key, value string) error {
err := c.db.Update(func(tx *nutsdb.Tx) error {
err := tx.LPush(bucket, []byte(key), []byte(value))
return err
})
return err
}

func (c *core) RPop(bucket, key string) (value string, err error) {
err = c.db.Update(func(tx *nutsdb.Tx) error {
resByte, err := tx.RPop(bucket, []byte(key))
if err == nil {
value = string(resByte)
}
return err
})
return value, err
}

func (c *core) LPop(bucket, key string) (value string, err error) {
err = c.db.Update(func(tx *nutsdb.Tx) error {
resByte, err := tx.RPop(bucket, []byte(key))
if err == nil {
value = string(resByte)
}
return err
})
return value, err
}

func (c *core) RPeek(bucket, key string) (value string, err error) {
err = c.db.View(func(tx *nutsdb.Tx) error {
resByte, err := tx.RPeek(bucket, []byte(key))
if err == nil {
value = string(resByte)
}
return nil
})
return value, err
}

func (c *core) LPeek(bucket, key string) (value string, err error) {
err = c.db.View(func(tx *nutsdb.Tx) error {
resByte, err := tx.LPeek(bucket, []byte(key))
if err == nil {
value = string(resByte)
}
return nil
})
return value, err
}

func (c *core) LRem(bucket, key, value string, count int) (num int, err error) {
err = c.db.Update(func(tx *nutsdb.Tx) error {
num, err = tx.LRem(bucket, []byte(key), count, []byte(value))
return err
})
return num, err
}

func (c *core) LSet(bucket, key, value string, index int) (err error) {
err = c.db.Update(func(tx *nutsdb.Tx) error {
err = tx.LSet(bucket, []byte(key), index, []byte(value))
return err
})
return err
}

func (c *core) LTrim(bucket, key string, start, end int) (err error) {
err = c.db.View(func(tx *nutsdb.Tx) error {
err = tx.LTrim(bucket, []byte(key), start, end)
return err
})
return err
}

func (c *core) LSize(bucket, key string) (size int, err error) {
err = c.db.View(func(tx *nutsdb.Tx) error {
size, err = tx.LSize(bucket, []byte(key))
return err
})
return size, err
}
66 changes: 66 additions & 0 deletions core_string.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package nutshttp

import "github.com/xujiajun/nutsdb"

// Update handle insert and update operation
func (c *core) Update(bucket string, key string, value string, ttl uint32) error {
err := c.db.Update(func(tx *nutsdb.Tx) error {
err := tx.Put(bucket, []byte(key), []byte(value), ttl)
return err
})
return err
}

// Delete handle delete operation
func (c *core) Delete(bucket string, key string) error {
err := c.db.Update(func(tx *nutsdb.Tx) error {
err := tx.Delete(bucket, []byte(key))
return err
})
return err
}

// Get handle get key operation
func (c *core) Get(bucket string, key string) (value string, err error) {
err = c.db.View(func(tx *nutsdb.Tx) error {
entry, err := tx.Get(bucket, []byte(key))
if err != nil {
return err
}
value = string(entry.Value)
return nil
})
return value, err
}

func (c *core) PrefixScan(bucket string, prefix string, offSet int, limNum int) (entries nutsdb.Entries, err error) {
err = c.db.View(func(tx *nutsdb.Tx) error {
entries, _, err = tx.PrefixScan(bucket, []byte(prefix), offSet, limNum)
return err
})
return entries, err
}

func (c *core) PrefixSearchScan(bucket, prefix string, reg string, offSet int, limNum int) (entries nutsdb.Entries, err error) {
err = c.db.View(func(tx *nutsdb.Tx) error {
entries, _, err = tx.PrefixSearchScan(bucket, []byte(prefix), reg, offSet, limNum)
return err
})
return entries, err
}

func (c *core) RangeScan(bucket string, start string, end string) (entries nutsdb.Entries, err error) {
err = c.db.View(func(tx *nutsdb.Tx) error {
entries, err = tx.RangeScan(bucket, []byte(start), []byte(end))
return err
})
return entries, err
}

func (c *core) GetAll(bucket string) (entries nutsdb.Entries, err error) {
err = c.db.View(func(tx *nutsdb.Tx) error {
entries, err = tx.GetAll(bucket)
return err
})
return entries, err
}
Loading