更新缓存模块
This commit is contained in:
@@ -2,23 +2,51 @@ package drive
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/elastic/go-elasticsearch/v8"
|
||||
"github.com/gogf/gf/v2/container/gvar"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/os/gcache"
|
||||
"github.com/gogf/gf/v2/os/gctx"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
adapterElasticsearchClient gcache.Adapter
|
||||
)
|
||||
|
||||
type AdapterElasticsearch struct {
|
||||
//FilePath string
|
||||
Addresses []string
|
||||
client *elasticsearch.TypedClient
|
||||
name string
|
||||
}
|
||||
|
||||
func (a AdapterElasticsearch) Set(ctx context.Context, key interface{}, value interface{}, duration time.Duration) error {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
func (a AdapterElasticsearch) Set(ctx context.Context, _key interface{}, value interface{}, duration time.Duration) (err error) {
|
||||
key := gconv.String(_key)
|
||||
data := gconv.Map(value)
|
||||
if duration > 0 {
|
||||
data["delete_time"] = time.Now().Add(duration)
|
||||
}
|
||||
_, err = a.client.Index(a.name).Id(key).
|
||||
Document(data).Do(ctx)
|
||||
if err != nil {
|
||||
fmt.Printf("indexing document failed, err:%v\n", err)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (a AdapterElasticsearch) SetMap(ctx context.Context, data map[interface{}]interface{}, duration time.Duration) error {
|
||||
//TODO implement me
|
||||
for k, v := range data {
|
||||
save := gconv.Map(v)
|
||||
if duration > 0 {
|
||||
save["delete_time"] = time.Now().Add(duration)
|
||||
}
|
||||
key := gconv.String(k)
|
||||
a.client.Index(a.name).Id(key).
|
||||
Document(save).Do(ctx)
|
||||
}
|
||||
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
@@ -37,9 +65,17 @@ func (a AdapterElasticsearch) SetIfNotExistFuncLock(ctx context.Context, key int
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (a AdapterElasticsearch) Get(ctx context.Context, key interface{}) (*gvar.Var, error) {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
func (a AdapterElasticsearch) Get(ctx context.Context, key interface{}) (res *gvar.Var, err error) {
|
||||
_key := gconv.String(key)
|
||||
resp, err := a.client.Get(a.name, _key).
|
||||
Do(context.Background())
|
||||
if err != nil {
|
||||
fmt.Printf("get document by id failed, err:%v\n", err)
|
||||
return
|
||||
}
|
||||
fmt.Printf("fileds:%s\n", resp.Source_)
|
||||
res = gvar.New(resp.Source_)
|
||||
return
|
||||
}
|
||||
|
||||
func (a AdapterElasticsearch) GetOrSet(ctx context.Context, key interface{}, value interface{}, duration time.Duration) (result *gvar.Var, err error) {
|
||||
@@ -82,9 +118,26 @@ func (a AdapterElasticsearch) Values(ctx context.Context) (values []interface{},
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (a AdapterElasticsearch) Update(ctx context.Context, key interface{}, value interface{}) (oldValue *gvar.Var, exist bool, err error) {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
func (a AdapterElasticsearch) Update(ctx context.Context, _key interface{}, value interface{}) (oldValue *gvar.Var, exist bool, err error) {
|
||||
key := gconv.String(_key)
|
||||
data := gconv.Map(value)
|
||||
oldValue, err = a.Get(ctx, key)
|
||||
if err != nil {
|
||||
exist = false
|
||||
} else {
|
||||
for k, v := range oldValue.Map() {
|
||||
if _, ok := data[k]; !ok {
|
||||
data[k] = v
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_, err = a.client.Update(a.name, key).
|
||||
Doc(data).Do(context.Background())
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (a AdapterElasticsearch) UpdateExpire(ctx context.Context, key interface{}, duration time.Duration) (oldDuration time.Duration, err error) {
|
||||
@@ -98,8 +151,15 @@ func (a AdapterElasticsearch) GetExpire(ctx context.Context, key interface{}) (t
|
||||
}
|
||||
|
||||
func (a AdapterElasticsearch) Remove(ctx context.Context, keys ...interface{}) (lastValue *gvar.Var, err error) {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
//获取keys最后一个
|
||||
lastKey := keys[len(keys)-1]
|
||||
lastValue, _ = a.Get(ctx, lastKey)
|
||||
|
||||
for k := range keys {
|
||||
key := gconv.String(k)
|
||||
a.client.Delete(a.name, key).Do(ctx)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (a AdapterElasticsearch) Clear(ctx context.Context) error {
|
||||
@@ -112,8 +172,17 @@ func (a AdapterElasticsearch) Close(ctx context.Context) error {
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func NewAdapterElasticsearch(addresses []string) gcache.Adapter {
|
||||
return &AdapterElasticsearch{
|
||||
Addresses: addresses,
|
||||
func NewAdapterElasticsearch(name string) gcache.Adapter {
|
||||
|
||||
if adapterElasticsearchClient == nil {
|
||||
_cfg, _ := g.Cfg().Get(gctx.New(), "elasticsearch")
|
||||
var cfg elasticsearch.Config
|
||||
_cfg.Scan(&cfg)
|
||||
es, _ := elasticsearch.NewTypedClient(cfg)
|
||||
adapterElasticsearchClient = &AdapterElasticsearch{
|
||||
client: es,
|
||||
name: name,
|
||||
}
|
||||
}
|
||||
return adapterElasticsearchClient
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user