Skip to content

Commit

Permalink
add cache
Browse files Browse the repository at this point in the history
  • Loading branch information
acoshift committed Apr 6, 2017
1 parent bf3ebb1 commit c2c5ed9
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 8 deletions.
15 changes: 15 additions & 0 deletions cache.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package ds

import (
"cloud.google.com/go/datastore"
)

// Cache interface
type Cache interface {
Get(*datastore.Key, interface{}) error
GetMulti([]*datastore.Key, []interface{}) error
Set(*datastore.Key, interface{}) error
SetMulti([]*datastore.Key, []interface{}) error
Del(*datastore.Key) error
DelMulti([]*datastore.Key) error
}
1 change: 1 addition & 0 deletions ds.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
// Client type
type Client struct {
*datastore.Client
Cache Cache
}

// NewClient creates new ds client which wrap datastore client
Expand Down
3 changes: 3 additions & 0 deletions get.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ import (

// GetByKey retrieves model from datastore by key
func (client *Client) GetByKey(ctx context.Context, key *datastore.Key, dst interface{}) error {
if client.Cache != nil && client.Cache.Get(key, dst) == nil {
return nil
}
err := client.Get(ctx, key, dst)
SetKey(key, dst)
if err != nil {
Expand Down
18 changes: 14 additions & 4 deletions put.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,16 @@ import (

// PutModel puts a model to datastore
func (client *Client) PutModel(ctx context.Context, src interface{}) error {
x := src.(KeyGetSetter)
_, err := client.Put(ctx, x.GetKey(), x)
return err
key := src.(KeyGetSetter).GetKey()
key, err := client.Put(ctx, key, src)
SetKey(key, src)
if err != nil {
return err
}
if client.Cache != nil {
client.Cache.Del(key)
}
return nil
}

// PutModels puts models to datastore
Expand All @@ -23,5 +30,8 @@ func (client *Client) PutModels(ctx context.Context, src interface{}) error {
}
keys, err := client.PutMulti(ctx, keys, src)
SetKeys(keys, src)
return err
if err != nil {
return err
}
return nil
}
5 changes: 1 addition & 4 deletions save.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,7 @@ func beforeSave(src interface{}) {
// if key was not set in model, will call NewKey
func (client *Client) SaveModel(ctx context.Context, src interface{}) error {
beforeSave(src)

x := src.(KeyGetSetter)
key, err := client.Put(ctx, x.GetKey(), x)
x.SetKey(key)
err := client.PutModel(ctx, src)
if err != nil {
return err
}
Expand Down

0 comments on commit c2c5ed9

Please sign in to comment.