mirror of
https://github.com/gofiber/storage.git
synced 2025-11-03 02:43:22 +08:00
🧹 introduce reset and close
This commit is contained in:
@@ -51,10 +51,10 @@ type Config struct {
|
|||||||
// Optional. Default is "127.0.0.1:11211"
|
// Optional. Default is "127.0.0.1:11211"
|
||||||
Servers string
|
Servers string
|
||||||
|
|
||||||
// Clear any existing keys in existing Table
|
// Reset clears any existing keys in existing Table
|
||||||
//
|
//
|
||||||
// Optional. Default is false
|
// Optional. Default is false
|
||||||
Clear bool
|
Reset bool
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -10,10 +10,10 @@ type Config struct {
|
|||||||
// Optional. Default is "127.0.0.1:11211"
|
// Optional. Default is "127.0.0.1:11211"
|
||||||
Servers string
|
Servers string
|
||||||
|
|
||||||
// Clear any existing keys in existing Table
|
// Reset clears any existing keys in existing Table
|
||||||
//
|
//
|
||||||
// Optional. Default is false
|
// Optional. Default is false
|
||||||
Clear bool
|
Reset bool
|
||||||
|
|
||||||
// The socket read/write timeout.
|
// The socket read/write timeout.
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ func New(config ...Config) *Storage {
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if cfg.Clear {
|
if cfg.Reset {
|
||||||
if err := db.DeleteAll(); err != nil {
|
if err := db.DeleteAll(); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@@ -93,11 +93,16 @@ func (s *Storage) Delete(key string) error {
|
|||||||
return s.db.Delete(key)
|
return s.db.Delete(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear all keys
|
// Reset all keys
|
||||||
func (s *Storage) Clear() error {
|
func (s *Storage) Reset() error {
|
||||||
return s.db.DeleteAll()
|
return s.db.DeleteAll()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Close the database
|
||||||
|
func (s *Storage) Close() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Acquire item from pool
|
// Acquire item from pool
|
||||||
func (s *Storage) acquireItem() *mc.Item {
|
func (s *Storage) acquireItem() *mc.Item {
|
||||||
return s.items.Get().(*mc.Item)
|
return s.items.Get().(*mc.Item)
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ func Test_Memcache_Clear(t *testing.T) {
|
|||||||
err = testStore.Set("john2", val, 0)
|
err = testStore.Set("john2", val, 0)
|
||||||
utils.AssertEqual(t, nil, err)
|
utils.AssertEqual(t, nil, err)
|
||||||
|
|
||||||
err = testStore.Clear()
|
err = testStore.Reset()
|
||||||
utils.AssertEqual(t, nil, err)
|
utils.AssertEqual(t, nil, err)
|
||||||
|
|
||||||
result, err := testStore.Get("john1")
|
result, err := testStore.Get("john1")
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ var ErrNotExist = errors.New("key does not exist")
|
|||||||
func (s *Storage) Get(key string) ([]byte, error)
|
func (s *Storage) Get(key string) ([]byte, error)
|
||||||
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
|
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
|
||||||
func (s *Storage) Delete(key string) error
|
func (s *Storage) Delete(key string) error
|
||||||
func (s *Storage) Clear() error
|
func (s *Storage) Reset() error
|
||||||
```
|
```
|
||||||
|
|
||||||
### Installation
|
### Installation
|
||||||
|
|||||||
@@ -75,14 +75,19 @@ func (s *Storage) Delete(key string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear all keys
|
// Reset all keys
|
||||||
func (s *Storage) Clear() error {
|
func (s *Storage) Reset() error {
|
||||||
s.mux.Lock()
|
s.mux.Lock()
|
||||||
s.db = make(map[string]entry)
|
s.db = make(map[string]entry)
|
||||||
s.mux.Unlock()
|
s.mux.Unlock()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Close the database
|
||||||
|
func (s *Storage) Close() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Storage) gc() {
|
func (s *Storage) gc() {
|
||||||
for t := range time.NewTicker(s.gcInterval).C {
|
for t := range time.NewTicker(s.gcInterval).C {
|
||||||
now := t.Unix()
|
now := t.Unix()
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ func Test_Memory_Clear(t *testing.T) {
|
|||||||
err = testStore.Set("john2", val, 0)
|
err = testStore.Set("john2", val, 0)
|
||||||
utils.AssertEqual(t, nil, err)
|
utils.AssertEqual(t, nil, err)
|
||||||
|
|
||||||
err = testStore.Clear()
|
err = testStore.Reset()
|
||||||
utils.AssertEqual(t, nil, err)
|
utils.AssertEqual(t, nil, err)
|
||||||
|
|
||||||
result, err := testStore.Get("john1")
|
result, err := testStore.Get("john1")
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ var ErrNotExist = errors.New("key does not exist")
|
|||||||
func (s *Storage) Get(key string) ([]byte, error)
|
func (s *Storage) Get(key string) ([]byte, error)
|
||||||
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
|
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
|
||||||
func (s *Storage) Delete(key string) error
|
func (s *Storage) Delete(key string) error
|
||||||
func (s *Storage) Clear() error
|
func (s *Storage) Reset() error
|
||||||
```
|
```
|
||||||
### Installation
|
### Installation
|
||||||
MongoDB is tested on the 2 last [Go versions](https://golang.org/dl/) with support for modules. So make sure to initialize one first if you didn't do that yet:
|
MongoDB is tested on the 2 last [Go versions](https://golang.org/dl/) with support for modules. So make sure to initialize one first if you didn't do that yet:
|
||||||
@@ -47,7 +47,7 @@ store := mongodb.New(mongodb.Config{
|
|||||||
Port: 27017,
|
Port: 27017,
|
||||||
Database: "fiber",
|
Database: "fiber",
|
||||||
Collection: "fiber_storage",
|
Collection: "fiber_storage",
|
||||||
Clear: false,
|
Reset: false,
|
||||||
GCInterval: 10 * time.Second,
|
GCInterval: 10 * time.Second,
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
@@ -85,10 +85,10 @@ type Config struct {
|
|||||||
// Optional. Default is "fiber_storage"
|
// Optional. Default is "fiber_storage"
|
||||||
Collection string
|
Collection string
|
||||||
|
|
||||||
// Clear any existing keys in existing Table
|
// Reset clears any existing keys in existing Table
|
||||||
//
|
//
|
||||||
// Optional. Default is false
|
// Optional. Default is false
|
||||||
Clear bool
|
Reset bool
|
||||||
|
|
||||||
// Time before deleting expired keys
|
// Time before deleting expired keys
|
||||||
//
|
//
|
||||||
@@ -104,7 +104,7 @@ var ConfigDefault = Config{
|
|||||||
Port: 27017,
|
Port: 27017,
|
||||||
Database: "fiber",
|
Database: "fiber",
|
||||||
Collection: "fiber_storage",
|
Collection: "fiber_storage",
|
||||||
Clear: false,
|
Reset: false,
|
||||||
GCInterval: 10 * time.Second,
|
GCInterval: 10 * time.Second,
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -36,10 +36,10 @@ type Config struct {
|
|||||||
// Optional. Default is "fiber_storage"
|
// Optional. Default is "fiber_storage"
|
||||||
Collection string
|
Collection string
|
||||||
|
|
||||||
// Clear any existing keys in existing Table
|
// Reset clears any existing keys in existing Table
|
||||||
//
|
//
|
||||||
// Optional. Default is false
|
// Optional. Default is false
|
||||||
Clear bool
|
Reset bool
|
||||||
|
|
||||||
// Time before deleting expired keys
|
// Time before deleting expired keys
|
||||||
//
|
//
|
||||||
@@ -53,7 +53,7 @@ var ConfigDefault = Config{
|
|||||||
Port: 27017,
|
Port: 27017,
|
||||||
Database: "fiber",
|
Database: "fiber",
|
||||||
Collection: "fiber_storage",
|
Collection: "fiber_storage",
|
||||||
Clear: false,
|
Reset: false,
|
||||||
GCInterval: 10 * time.Second,
|
GCInterval: 10 * time.Second,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -152,11 +152,16 @@ func (s *Storage) Delete(key string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear all keys by drop collection
|
// Reset all keys by drop collection
|
||||||
func (s *Storage) Clear() error {
|
func (s *Storage) Reset() error {
|
||||||
return s.col.Drop(context.Background())
|
return s.col.Drop(context.Background())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Close the database
|
||||||
|
func (s *Storage) Close() error {
|
||||||
|
return s.db.Client().Disconnect(context.Background())
|
||||||
|
}
|
||||||
|
|
||||||
// Acquire item from pool
|
// Acquire item from pool
|
||||||
func (s *Storage) acquireItem() *item {
|
func (s *Storage) acquireItem() *item {
|
||||||
return s.items.Get().(*item)
|
return s.items.Get().(*item)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var testStore = New(Config{
|
var testStore = New(Config{
|
||||||
Clear: true,
|
Reset: true,
|
||||||
})
|
})
|
||||||
|
|
||||||
func Test_MongoDB_Set(t *testing.T) {
|
func Test_MongoDB_Set(t *testing.T) {
|
||||||
@@ -106,7 +106,7 @@ func Test_MongoDB_Clear(t *testing.T) {
|
|||||||
err = testStore.Set("john2", val, 0)
|
err = testStore.Set("john2", val, 0)
|
||||||
utils.AssertEqual(t, nil, err)
|
utils.AssertEqual(t, nil, err)
|
||||||
|
|
||||||
err = testStore.Clear()
|
err = testStore.Reset()
|
||||||
utils.AssertEqual(t, nil, err)
|
utils.AssertEqual(t, nil, err)
|
||||||
|
|
||||||
result, err := testStore.Get("john1")
|
result, err := testStore.Get("john1")
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ var ErrNotExist = errors.New("key does not exist")
|
|||||||
func (s *Storage) Get(key string) ([]byte, error)
|
func (s *Storage) Get(key string) ([]byte, error)
|
||||||
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
|
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
|
||||||
func (s *Storage) Delete(key string) error
|
func (s *Storage) Delete(key string) error
|
||||||
func (s *Storage) Clear() error
|
func (s *Storage) Reset() error
|
||||||
```
|
```
|
||||||
### Installation
|
### Installation
|
||||||
MySQL is tested on the 2 last [Go versions](https://golang.org/dl/) with support for modules. So make sure to initialize one first if you didn't do that yet:
|
MySQL is tested on the 2 last [Go versions](https://golang.org/dl/) with support for modules. So make sure to initialize one first if you didn't do that yet:
|
||||||
@@ -47,7 +47,7 @@ store := mysql.New(mysql.Config{
|
|||||||
Port: 3306,
|
Port: 3306,
|
||||||
Database: "fiber",
|
Database: "fiber",
|
||||||
Table: "fiber_storage",
|
Table: "fiber_storage",
|
||||||
Clear: false,
|
Reset: false,
|
||||||
GCInterval: 10 * time.Second,
|
GCInterval: 10 * time.Second,
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
@@ -85,10 +85,10 @@ type Config struct {
|
|||||||
// Optional. Default is "fiber_storage"
|
// Optional. Default is "fiber_storage"
|
||||||
Table string
|
Table string
|
||||||
|
|
||||||
// Clear any existing keys in existing Table
|
// Reset clears any existing keys in existing Table
|
||||||
//
|
//
|
||||||
// Optional. Default is false
|
// Optional. Default is false
|
||||||
Clear bool
|
Reset bool
|
||||||
|
|
||||||
// Time before deleting expired keys
|
// Time before deleting expired keys
|
||||||
//
|
//
|
||||||
@@ -104,7 +104,7 @@ var ConfigDefault = Config{
|
|||||||
Port: 3306,
|
Port: 3306,
|
||||||
Database: "fiber",
|
Database: "fiber",
|
||||||
Table: "fiber_storage",
|
Table: "fiber_storage",
|
||||||
Clear: false,
|
Reset: false,
|
||||||
GCInterval: 10 * time.Second,
|
GCInterval: 10 * time.Second,
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -37,10 +37,10 @@ type Config struct {
|
|||||||
// Optional. Default is "fiber_storage"
|
// Optional. Default is "fiber_storage"
|
||||||
Table string
|
Table string
|
||||||
|
|
||||||
// Clear any existing keys in existing Table
|
// Reset clears any existing keys in existing Table
|
||||||
//
|
//
|
||||||
// Optional. Default is false
|
// Optional. Default is false
|
||||||
Clear bool
|
Reset bool
|
||||||
|
|
||||||
// Time before deleting expired keys
|
// Time before deleting expired keys
|
||||||
//
|
//
|
||||||
@@ -62,7 +62,7 @@ var ConfigDefault = Config{
|
|||||||
Port: 3306,
|
Port: 3306,
|
||||||
Database: "fiber",
|
Database: "fiber",
|
||||||
Table: "fiber_storage",
|
Table: "fiber_storage",
|
||||||
Clear: false,
|
Reset: false,
|
||||||
GCInterval: 10 * time.Second,
|
GCInterval: 10 * time.Second,
|
||||||
maxOpenConns: 100,
|
maxOpenConns: 100,
|
||||||
maxIdleConns: 100,
|
maxIdleConns: 100,
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ type Storage struct {
|
|||||||
sqlSelect string
|
sqlSelect string
|
||||||
sqlInsert string
|
sqlInsert string
|
||||||
sqlDelete string
|
sqlDelete string
|
||||||
sqlClear string
|
sqlReset string
|
||||||
sqlGC string
|
sqlGC string
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,7 +59,7 @@ func New(config ...Config) *Storage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Drop table if Clear set to true
|
// Drop table if Clear set to true
|
||||||
if cfg.Clear {
|
if cfg.Reset {
|
||||||
query := fmt.Sprintf(dropQuery, cfg.Table)
|
query := fmt.Sprintf(dropQuery, cfg.Table)
|
||||||
if _, err = db.Exec(query); err != nil {
|
if _, err = db.Exec(query); err != nil {
|
||||||
_ = db.Close()
|
_ = db.Close()
|
||||||
@@ -83,7 +83,7 @@ func New(config ...Config) *Storage {
|
|||||||
sqlSelect: fmt.Sprintf("SELECT v, e FROM %s WHERE k=?;", cfg.Table),
|
sqlSelect: fmt.Sprintf("SELECT v, e FROM %s WHERE k=?;", cfg.Table),
|
||||||
sqlInsert: fmt.Sprintf("INSERT INTO %s (k, v, e) VALUES (?,?,?) ON DUPLICATE KEY UPDATE v = ?, e = ?", cfg.Table),
|
sqlInsert: fmt.Sprintf("INSERT INTO %s (k, v, e) VALUES (?,?,?) ON DUPLICATE KEY UPDATE v = ?, e = ?", cfg.Table),
|
||||||
sqlDelete: fmt.Sprintf("DELETE FROM %s WHERE k=?", cfg.Table),
|
sqlDelete: fmt.Sprintf("DELETE FROM %s WHERE k=?", cfg.Table),
|
||||||
sqlClear: fmt.Sprintf("DELETE FROM %s;", cfg.Table),
|
sqlReset: fmt.Sprintf("DELETE FROM %s;", cfg.Table),
|
||||||
sqlGC: fmt.Sprintf("DELETE FROM %s WHERE e <= ?", cfg.Table),
|
sqlGC: fmt.Sprintf("DELETE FROM %s WHERE e <= ?", cfg.Table),
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,12 +142,17 @@ func (s *Storage) Delete(key string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear all keys
|
// Reset all keys
|
||||||
func (s *Storage) Clear() error {
|
func (s *Storage) Reset() error {
|
||||||
_, err := s.db.Exec(s.sqlClear)
|
_, err := s.db.Exec(s.sqlReset)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Close the database
|
||||||
|
func (s *Storage) Close() error {
|
||||||
|
return s.db.Close()
|
||||||
|
}
|
||||||
|
|
||||||
// Garbage collector to delete expired keys
|
// Garbage collector to delete expired keys
|
||||||
func (s *Storage) gc() {
|
func (s *Storage) gc() {
|
||||||
tick := time.NewTicker(s.gcInterval)
|
tick := time.NewTicker(s.gcInterval)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ var testStore = New(Config{
|
|||||||
Database: os.Getenv("MYSQL_DATABASE"),
|
Database: os.Getenv("MYSQL_DATABASE"),
|
||||||
Username: os.Getenv("MYSQL_USERNAME"),
|
Username: os.Getenv("MYSQL_USERNAME"),
|
||||||
Password: os.Getenv("MYSQL_PASSWORD"),
|
Password: os.Getenv("MYSQL_PASSWORD"),
|
||||||
Clear: true,
|
Reset: true,
|
||||||
})
|
})
|
||||||
|
|
||||||
func Test_MYSQL_Set(t *testing.T) {
|
func Test_MYSQL_Set(t *testing.T) {
|
||||||
@@ -110,7 +110,7 @@ func Test_MYSQL_Clear(t *testing.T) {
|
|||||||
err = testStore.Set("john2", val, 0)
|
err = testStore.Set("john2", val, 0)
|
||||||
utils.AssertEqual(t, nil, err)
|
utils.AssertEqual(t, nil, err)
|
||||||
|
|
||||||
err = testStore.Clear()
|
err = testStore.Reset()
|
||||||
utils.AssertEqual(t, nil, err)
|
utils.AssertEqual(t, nil, err)
|
||||||
|
|
||||||
result, err := testStore.Get("john1")
|
result, err := testStore.Get("john1")
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ var ErrNotExist = errors.New("key does not exist")
|
|||||||
func (s *Storage) Get(key string) ([]byte, error)
|
func (s *Storage) Get(key string) ([]byte, error)
|
||||||
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
|
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
|
||||||
func (s *Storage) Delete(key string) error
|
func (s *Storage) Delete(key string) error
|
||||||
func (s *Storage) Clear() error
|
func (s *Storage) Reset() error
|
||||||
```
|
```
|
||||||
### Installation
|
### Installation
|
||||||
Postgres is tested on the 2 last [Go versions](https://golang.org/dl/) with support for modules. So make sure to initialize one first if you didn't do that yet:
|
Postgres is tested on the 2 last [Go versions](https://golang.org/dl/) with support for modules. So make sure to initialize one first if you didn't do that yet:
|
||||||
@@ -47,7 +47,7 @@ store := postgres.New(postgres.Config{
|
|||||||
Port: 5432,
|
Port: 5432,
|
||||||
Database: "fiber",
|
Database: "fiber",
|
||||||
Table: "fiber_storage",
|
Table: "fiber_storage",
|
||||||
Clear: false,
|
Reset: false,
|
||||||
GCInterval: 10 * time.Second,
|
GCInterval: 10 * time.Second,
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
@@ -86,10 +86,10 @@ type Config struct {
|
|||||||
// Optional. Default is "fiber_storage"
|
// Optional. Default is "fiber_storage"
|
||||||
Table string
|
Table string
|
||||||
|
|
||||||
// Clear any existing keys in existing Table
|
// Reset clears any existing keys in existing Table
|
||||||
//
|
//
|
||||||
// Optional. Default is false
|
// Optional. Default is false
|
||||||
Clear bool
|
Reset bool
|
||||||
|
|
||||||
// Time before deleting expired keys
|
// Time before deleting expired keys
|
||||||
//
|
//
|
||||||
@@ -105,7 +105,7 @@ var ConfigDefault = Config{
|
|||||||
Port: 5432,
|
Port: 5432,
|
||||||
Database: "fiber",
|
Database: "fiber",
|
||||||
Table: "fiber_storage",
|
Table: "fiber_storage",
|
||||||
Clear: false,
|
Reset: false,
|
||||||
GCInterval: 10 * time.Second,
|
GCInterval: 10 * time.Second,
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -36,10 +36,10 @@ type Config struct {
|
|||||||
// Optional. Default is "fiber_storage"
|
// Optional. Default is "fiber_storage"
|
||||||
Table string
|
Table string
|
||||||
|
|
||||||
// Clear any existing keys in existing Table
|
// Reset clears any existing keys in existing Table
|
||||||
//
|
//
|
||||||
// Optional. Default is false
|
// Optional. Default is false
|
||||||
Clear bool
|
Reset bool
|
||||||
|
|
||||||
// Time before deleting expired keys
|
// Time before deleting expired keys
|
||||||
//
|
//
|
||||||
@@ -89,7 +89,7 @@ var ConfigDefault = Config{
|
|||||||
Port: 5432,
|
Port: 5432,
|
||||||
Database: "fiber",
|
Database: "fiber",
|
||||||
Table: "fiber_storage",
|
Table: "fiber_storage",
|
||||||
Clear: false,
|
Reset: false,
|
||||||
GCInterval: 10 * time.Second,
|
GCInterval: 10 * time.Second,
|
||||||
maxOpenConns: 100,
|
maxOpenConns: 100,
|
||||||
maxIdleConns: 100,
|
maxIdleConns: 100,
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ type Storage struct {
|
|||||||
sqlSelect string
|
sqlSelect string
|
||||||
sqlInsert string
|
sqlInsert string
|
||||||
sqlDelete string
|
sqlDelete string
|
||||||
sqlClear string
|
sqlReset string
|
||||||
sqlGC string
|
sqlGC string
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,7 +77,7 @@ func New(config ...Config) *Storage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Drop table if set to true
|
// Drop table if set to true
|
||||||
if cfg.Clear {
|
if cfg.Reset {
|
||||||
if _, err = db.Exec(fmt.Sprintf(dropQuery, cfg.Table)); err != nil {
|
if _, err = db.Exec(fmt.Sprintf(dropQuery, cfg.Table)); err != nil {
|
||||||
_ = db.Close()
|
_ = db.Close()
|
||||||
panic(err)
|
panic(err)
|
||||||
@@ -100,7 +100,7 @@ func New(config ...Config) *Storage {
|
|||||||
sqlSelect: fmt.Sprintf(`SELECT v, e FROM %s WHERE k=$1;`, cfg.Table),
|
sqlSelect: fmt.Sprintf(`SELECT v, e FROM %s WHERE k=$1;`, cfg.Table),
|
||||||
sqlInsert: fmt.Sprintf("INSERT INTO %s (k, v, e) VALUES ($1, $2, $3) ON CONFLICT (k) DO UPDATE SET v = $4, e = $5", cfg.Table),
|
sqlInsert: fmt.Sprintf("INSERT INTO %s (k, v, e) VALUES ($1, $2, $3) ON CONFLICT (k) DO UPDATE SET v = $4, e = $5", cfg.Table),
|
||||||
sqlDelete: fmt.Sprintf("DELETE FROM %s WHERE k=$1", cfg.Table),
|
sqlDelete: fmt.Sprintf("DELETE FROM %s WHERE k=$1", cfg.Table),
|
||||||
sqlClear: fmt.Sprintf("DELETE FROM %s;", cfg.Table),
|
sqlReset: fmt.Sprintf("DELETE FROM %s;", cfg.Table),
|
||||||
sqlGC: fmt.Sprintf("DELETE FROM %s WHERE e <= $1", cfg.Table),
|
sqlGC: fmt.Sprintf("DELETE FROM %s WHERE e <= $1", cfg.Table),
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,12 +156,17 @@ func (s *Storage) Delete(key string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear all entries, including unexpired
|
// Reset all entries, including unexpired
|
||||||
func (s *Storage) Clear() error {
|
func (s *Storage) Reset() error {
|
||||||
_, err := s.db.Exec(s.sqlClear)
|
_, err := s.db.Exec(s.sqlReset)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Close the database
|
||||||
|
func (s *Storage) Close() error {
|
||||||
|
return s.db.Close()
|
||||||
|
}
|
||||||
|
|
||||||
// GC deletes all expired entries
|
// GC deletes all expired entries
|
||||||
func (s *Storage) gc() {
|
func (s *Storage) gc() {
|
||||||
tick := time.NewTicker(s.gcInterval)
|
tick := time.NewTicker(s.gcInterval)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ var testStore = New(Config{
|
|||||||
Database: os.Getenv("POSTGRES_DATABASE"),
|
Database: os.Getenv("POSTGRES_DATABASE"),
|
||||||
Username: os.Getenv("POSTGRES_USERNAME"),
|
Username: os.Getenv("POSTGRES_USERNAME"),
|
||||||
Password: os.Getenv("POSTGRES_PASSWORD"),
|
Password: os.Getenv("POSTGRES_PASSWORD"),
|
||||||
Clear: true,
|
Reset: true,
|
||||||
})
|
})
|
||||||
|
|
||||||
func Test_Postgres_Set(t *testing.T) {
|
func Test_Postgres_Set(t *testing.T) {
|
||||||
@@ -110,7 +110,7 @@ func Test_Postgres_Clear(t *testing.T) {
|
|||||||
err = testStore.Set("john2", val, 0)
|
err = testStore.Set("john2", val, 0)
|
||||||
utils.AssertEqual(t, nil, err)
|
utils.AssertEqual(t, nil, err)
|
||||||
|
|
||||||
err = testStore.Clear()
|
err = testStore.Reset()
|
||||||
utils.AssertEqual(t, nil, err)
|
utils.AssertEqual(t, nil, err)
|
||||||
|
|
||||||
result, err := testStore.Get("john1")
|
result, err := testStore.Get("john1")
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ var ErrNotExist = errors.New("key does not exist")
|
|||||||
func (s *Storage) Get(key string) ([]byte, error)
|
func (s *Storage) Get(key string) ([]byte, error)
|
||||||
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
|
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
|
||||||
func (s *Storage) Delete(key string) error
|
func (s *Storage) Delete(key string) error
|
||||||
func (s *Storage) Clear() error
|
func (s *Storage) Reset() error
|
||||||
```
|
```
|
||||||
### Installation
|
### Installation
|
||||||
Redis is tested on the 2 last [Go versions](https://golang.org/dl/) with support for modules. So make sure to initialize one first if you didn't do that yet:
|
Redis is tested on the 2 last [Go versions](https://golang.org/dl/) with support for modules. So make sure to initialize one first if you didn't do that yet:
|
||||||
@@ -48,7 +48,7 @@ store := redis.New(redis.Config{
|
|||||||
Username: "",
|
Username: "",
|
||||||
Password: "",
|
Password: "",
|
||||||
Database: 0,
|
Database: 0,
|
||||||
Clear: false,
|
Reset: false,
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -80,10 +80,10 @@ type Config struct {
|
|||||||
// Optional. Default is 0
|
// Optional. Default is 0
|
||||||
Database int
|
Database int
|
||||||
|
|
||||||
// Clear any existing keys in existing Collection
|
// Reset clears any existing keys in existing Collection
|
||||||
//
|
//
|
||||||
// Optional. Default is false
|
// Optional. Default is false
|
||||||
Clear bool
|
Reset bool
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -96,6 +96,6 @@ var ConfigDefault = Config{
|
|||||||
Username: "",
|
Username: "",
|
||||||
Password: "",
|
Password: "",
|
||||||
Database: 0,
|
Database: 0,
|
||||||
Clear: false,
|
Reset: false,
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -27,10 +27,10 @@ type Config struct {
|
|||||||
// Optional. Default is 0
|
// Optional. Default is 0
|
||||||
Database int
|
Database int
|
||||||
|
|
||||||
// Clear any existing keys in existing Collection
|
// Reset clears any existing keys in existing Collection
|
||||||
//
|
//
|
||||||
// Optional. Default is false
|
// Optional. Default is false
|
||||||
Clear bool
|
Reset bool
|
||||||
|
|
||||||
////////////////////////////////////
|
////////////////////////////////////
|
||||||
// Adaptor related config options //
|
// Adaptor related config options //
|
||||||
@@ -46,7 +46,7 @@ var ConfigDefault = Config{
|
|||||||
Username: "",
|
Username: "",
|
||||||
Password: "",
|
Password: "",
|
||||||
Database: 0,
|
Database: 0,
|
||||||
Clear: false,
|
Reset: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper function to set default values
|
// Helper function to set default values
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ func New(config ...Config) *Storage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Empty collection if Clear is true
|
// Empty collection if Clear is true
|
||||||
if cfg.Clear {
|
if cfg.Reset {
|
||||||
if err := db.FlushDB(context.Background()).Err(); err != nil {
|
if err := db.FlushDB(context.Background()).Err(); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@@ -71,7 +71,12 @@ func (s *Storage) Delete(key string) error {
|
|||||||
return s.db.Del(context.Background(), key).Err()
|
return s.db.Del(context.Background(), key).Err()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear all keys
|
// Reset all keys
|
||||||
func (s *Storage) Clear() error {
|
func (s *Storage) Reset() error {
|
||||||
return s.db.FlushDB(context.Background()).Err()
|
return s.db.FlushDB(context.Background()).Err()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Close the database
|
||||||
|
func (s *Storage) Close() error {
|
||||||
|
return s.db.Close()
|
||||||
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var testStore = New(Config{
|
var testStore = New(Config{
|
||||||
Clear: true,
|
Reset: true,
|
||||||
})
|
})
|
||||||
|
|
||||||
func Test_Redis_Set(t *testing.T) {
|
func Test_Redis_Set(t *testing.T) {
|
||||||
@@ -105,7 +105,7 @@ func Test_Redis_Clear(t *testing.T) {
|
|||||||
err = testStore.Set("john2", val, 0)
|
err = testStore.Set("john2", val, 0)
|
||||||
utils.AssertEqual(t, nil, err)
|
utils.AssertEqual(t, nil, err)
|
||||||
|
|
||||||
err = testStore.Clear()
|
err = testStore.Reset()
|
||||||
utils.AssertEqual(t, nil, err)
|
utils.AssertEqual(t, nil, err)
|
||||||
|
|
||||||
result, err := testStore.Get("john1")
|
result, err := testStore.Get("john1")
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ var ErrNotExist = errors.New("key does not exist")
|
|||||||
func (s *Storage) Get(key string) ([]byte, error)
|
func (s *Storage) Get(key string) ([]byte, error)
|
||||||
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
|
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
|
||||||
func (s *Storage) Delete(key string) error
|
func (s *Storage) Delete(key string) error
|
||||||
func (s *Storage) Clear() error
|
func (s *Storage) Reset() error
|
||||||
```
|
```
|
||||||
### Installation
|
### Installation
|
||||||
SQLite3 is tested on the 2 last [Go versions](https://golang.org/dl/) with support for modules. So make sure to initialize one first if you didn't do that yet:
|
SQLite3 is tested on the 2 last [Go versions](https://golang.org/dl/) with support for modules. So make sure to initialize one first if you didn't do that yet:
|
||||||
@@ -45,7 +45,7 @@ store := sqlite3.New()
|
|||||||
store := sqlite3.New(sqlite3.Config{
|
store := sqlite3.New(sqlite3.Config{
|
||||||
Database: "./fiber.sqlite3",
|
Database: "./fiber.sqlite3",
|
||||||
Table: "fiber_storage",
|
Table: "fiber_storage",
|
||||||
Clear: false,
|
Reset: false,
|
||||||
GCInterval: 10 * time.Second,
|
GCInterval: 10 * time.Second,
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
@@ -63,10 +63,10 @@ type Config struct {
|
|||||||
// Optional. Default is "fiber_storage"
|
// Optional. Default is "fiber_storage"
|
||||||
Table string
|
Table string
|
||||||
|
|
||||||
// Clear any existing keys in existing Table
|
// Reset clears any existing keys in existing Table
|
||||||
//
|
//
|
||||||
// Optional. Default is false
|
// Optional. Default is false
|
||||||
Clear bool
|
Reset bool
|
||||||
|
|
||||||
// Time before deleting expired keys
|
// Time before deleting expired keys
|
||||||
//
|
//
|
||||||
@@ -80,7 +80,7 @@ type Config struct {
|
|||||||
var ConfigDefault = Config{
|
var ConfigDefault = Config{
|
||||||
Database: "./fiber.sqlite3",
|
Database: "./fiber.sqlite3",
|
||||||
Table: "fiber_storage",
|
Table: "fiber_storage",
|
||||||
Clear: false,
|
Reset: false,
|
||||||
GCInterval: 10 * time.Second,
|
GCInterval: 10 * time.Second,
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -14,10 +14,10 @@ type Config struct {
|
|||||||
// Optional. Default is "fiber_storage"
|
// Optional. Default is "fiber_storage"
|
||||||
Table string
|
Table string
|
||||||
|
|
||||||
// Clear any existing keys in existing Table
|
// Reset clears any existing keys in existing Table
|
||||||
//
|
//
|
||||||
// Optional. Default is false
|
// Optional. Default is false
|
||||||
Clear bool
|
Reset bool
|
||||||
|
|
||||||
// Time before deleting expired keys
|
// Time before deleting expired keys
|
||||||
//
|
//
|
||||||
@@ -38,7 +38,7 @@ var ConfigDefault = Config{
|
|||||||
// General config options
|
// General config options
|
||||||
Database: "./fiber.sqlite3",
|
Database: "./fiber.sqlite3",
|
||||||
Table: "fiber_storage",
|
Table: "fiber_storage",
|
||||||
Clear: false,
|
Reset: false,
|
||||||
GCInterval: 10 * time.Second,
|
GCInterval: 10 * time.Second,
|
||||||
|
|
||||||
// Adaptor related config options
|
// Adaptor related config options
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ type Storage struct {
|
|||||||
sqlSelect string
|
sqlSelect string
|
||||||
sqlInsert string
|
sqlInsert string
|
||||||
sqlDelete string
|
sqlDelete string
|
||||||
sqlClear string
|
sqlReset string
|
||||||
sqlGC string
|
sqlGC string
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,7 +60,7 @@ func New(config ...Config) *Storage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Drop table if set to true
|
// Drop table if set to true
|
||||||
if cfg.Clear {
|
if cfg.Reset {
|
||||||
if _, err = db.Exec(fmt.Sprintf(dropQuery, cfg.Table)); err != nil {
|
if _, err = db.Exec(fmt.Sprintf(dropQuery, cfg.Table)); err != nil {
|
||||||
_ = db.Close()
|
_ = db.Close()
|
||||||
panic(err)
|
panic(err)
|
||||||
@@ -83,7 +83,7 @@ func New(config ...Config) *Storage {
|
|||||||
sqlSelect: fmt.Sprintf(`SELECT v, e FROM %s WHERE k=?;`, cfg.Table),
|
sqlSelect: fmt.Sprintf(`SELECT v, e FROM %s WHERE k=?;`, cfg.Table),
|
||||||
sqlInsert: fmt.Sprintf("INSERT OR REPLACE INTO %s (k, v, e) VALUES (?,?,?)", cfg.Table),
|
sqlInsert: fmt.Sprintf("INSERT OR REPLACE INTO %s (k, v, e) VALUES (?,?,?)", cfg.Table),
|
||||||
sqlDelete: fmt.Sprintf("DELETE FROM %s WHERE k=?", cfg.Table),
|
sqlDelete: fmt.Sprintf("DELETE FROM %s WHERE k=?", cfg.Table),
|
||||||
sqlClear: fmt.Sprintf("DELETE FROM %s;", cfg.Table),
|
sqlReset: fmt.Sprintf("DELETE FROM %s;", cfg.Table),
|
||||||
sqlGC: fmt.Sprintf("DELETE FROM %s WHERE e <= ?", cfg.Table),
|
sqlGC: fmt.Sprintf("DELETE FROM %s WHERE e <= ?", cfg.Table),
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,12 +135,17 @@ func (s *Storage) Delete(key string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear all entries, including unexpired
|
// Reset all entries, including unexpired
|
||||||
func (s *Storage) Clear() error {
|
func (s *Storage) Reset() error {
|
||||||
_, err := s.db.Exec(s.sqlClear)
|
_, err := s.db.Exec(s.sqlReset)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Close the database
|
||||||
|
func (s *Storage) Close() error {
|
||||||
|
return s.db.Close()
|
||||||
|
}
|
||||||
|
|
||||||
// GC deletes all expired entries
|
// GC deletes all expired entries
|
||||||
func (s *Storage) gc() {
|
func (s *Storage) gc() {
|
||||||
tick := time.NewTicker(s.gcInterval)
|
tick := time.NewTicker(s.gcInterval)
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var testStore = New(Config{
|
var testStore = New(Config{
|
||||||
Clear: true,
|
Reset: true,
|
||||||
})
|
})
|
||||||
|
|
||||||
func Test_SQLite3_Set(t *testing.T) {
|
func Test_SQLite3_Set(t *testing.T) {
|
||||||
@@ -107,7 +107,7 @@ func Test_SQLite3_Clear(t *testing.T) {
|
|||||||
err = testStore.Set("john2", val, 0)
|
err = testStore.Set("john2", val, 0)
|
||||||
utils.AssertEqual(t, nil, err)
|
utils.AssertEqual(t, nil, err)
|
||||||
|
|
||||||
err = testStore.Clear()
|
err = testStore.Reset()
|
||||||
utils.AssertEqual(t, nil, err)
|
utils.AssertEqual(t, nil, err)
|
||||||
|
|
||||||
result, err := testStore.Get("john1")
|
result, err := testStore.Get("john1")
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ type Storage interface {
|
|||||||
// The key must not be "".
|
// The key must not be "".
|
||||||
Delete(key string) error
|
Delete(key string) error
|
||||||
|
|
||||||
// Clear storage
|
// Reset the storage
|
||||||
Clear() error
|
Reset() error
|
||||||
|
|
||||||
|
// Close the storage
|
||||||
|
Close() error
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user