imporve some case
This commit is contained in:
parent
c8e513063c
commit
3c9d51a44a
41
basicrw.go
41
basicrw.go
@ -32,37 +32,54 @@ func (stack *StarStack) MustPop() interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Get(key string) (interface{}, error) {
|
func Get(key string) (interface{}, error) {
|
||||||
|
return globalMap.Get(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *StarMapKV) Get(key string) (interface{}, error) {
|
||||||
var err error
|
var err error
|
||||||
kvmu.RLock()
|
m.kvmu.RLock()
|
||||||
defer kvmu.RUnlock()
|
defer m.kvmu.RUnlock()
|
||||||
data, ok := kvMap[key]
|
data, ok := m.kvMap[key]
|
||||||
if !ok {
|
if !ok {
|
||||||
err = errors.New("key not exists")
|
err = errors.New("key not exists")
|
||||||
}
|
}
|
||||||
return data, err
|
return data, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func MustGet(key string) interface{} {
|
func (m *StarMapKV) MustGet(key string) interface{} {
|
||||||
result, _ := Get(key)
|
result, _ := m.Get(key)
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
func MustGet(key string) interface{} {
|
||||||
|
return globalMap.MustGet(key)
|
||||||
|
}
|
||||||
|
|
||||||
func Store(key string, value interface{}) error {
|
func Store(key string, value interface{}) error {
|
||||||
kvmu.Lock()
|
return globalMap.Store(key, value)
|
||||||
defer kvmu.Unlock()
|
}
|
||||||
kvMap[key] = value
|
func (m *StarMapKV) Store(key string, value interface{}) error {
|
||||||
|
m.kvmu.Lock()
|
||||||
|
defer m.kvmu.Unlock()
|
||||||
|
m.kvMap[key] = value
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func Delete(key string) error {
|
func Delete(key string) error {
|
||||||
kvmu.Lock()
|
return globalMap.Delete(key)
|
||||||
defer kvmu.Unlock()
|
}
|
||||||
delete(kvMap, key)
|
func (m *StarMapKV) Delete(key string) error {
|
||||||
|
m.kvmu.Lock()
|
||||||
|
defer m.kvmu.Unlock()
|
||||||
|
delete(m.kvMap, key)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func Range(run func(k string, v interface{}) bool) error {
|
func Range(run func(k string, v interface{}) bool) error {
|
||||||
for k, v := range kvMap {
|
return globalMap.Range(run)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *StarMapKV) Range(run func(k string, v interface{}) bool) error {
|
||||||
|
for k, v := range m.kvMap {
|
||||||
if !run(k, v) {
|
if !run(k, v) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
25
prorw.go
25
prorw.go
@ -15,9 +15,12 @@ func (sample StarMapSample) GetName() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GetMap(value StarMap) error {
|
func GetMap(value StarMap) error {
|
||||||
kvmuPro.RLock()
|
return globalMap.GetMap(value)
|
||||||
defer kvmuPro.RUnlock()
|
}
|
||||||
value, ok := kvMapPro[value.GetName()]
|
func (m *StarMapKV) GetMap(value StarMap) error {
|
||||||
|
m.kvmuPro.RLock()
|
||||||
|
defer m.kvmuPro.RUnlock()
|
||||||
|
value, ok := m.kvMapPro[value.GetName()]
|
||||||
if !ok {
|
if !ok {
|
||||||
return errors.New("key not exists")
|
return errors.New("key not exists")
|
||||||
}
|
}
|
||||||
@ -25,13 +28,21 @@ func GetMap(value StarMap) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func StoreMap(value StarMap) error {
|
func StoreMap(value StarMap) error {
|
||||||
kvmuPro.Lock()
|
return globalMap.StoreMap(value)
|
||||||
defer kvmuPro.Unlock()
|
}
|
||||||
kvMapPro[value.GetName()] = value
|
func (m *StarMapKV) StoreMap(value StarMap) error {
|
||||||
|
m.kvmuPro.Lock()
|
||||||
|
defer m.kvmuPro.Unlock()
|
||||||
|
m.kvMapPro[value.GetName()] = value
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func DeleteMap(value StarMap) error {
|
func DeleteMap(value StarMap) error {
|
||||||
delete(kvMapPro, value.GetName())
|
return globalMap.DeleteMap(value)
|
||||||
|
}
|
||||||
|
func (m *StarMapKV) DeleteMap(value StarMap) error {
|
||||||
|
m.kvmuPro.RLock()
|
||||||
|
defer m.kvmuPro.RUnlock()
|
||||||
|
delete(m.kvMapPro, value.GetName())
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@ type RemoteKv struct {
|
|||||||
setKeepAlive bool
|
setKeepAlive bool
|
||||||
TimeOut time.Duration
|
TimeOut time.Duration
|
||||||
ErrMsg string
|
ErrMsg string
|
||||||
|
kvmap StarMapKV
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewServer(addr string) (*RemoteKv, error) {
|
func NewServer(addr string) (*RemoteKv, error) {
|
||||||
@ -24,6 +25,7 @@ func NewServer(addr string) (*RemoteKv, error) {
|
|||||||
var err error
|
var err error
|
||||||
kv.addr = addr
|
kv.addr = addr
|
||||||
kv.TimeOut = time.Second * 10
|
kv.TimeOut = time.Second * 10
|
||||||
|
kv.kvmap = NewStarMap()
|
||||||
kv.server, err = notify.NewNotifyS("tcp", addr)
|
kv.server, err = notify.NewNotifyS("tcp", addr)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
kv.bind()
|
kv.bind()
|
||||||
|
@ -9,7 +9,7 @@ type basicReply struct {
|
|||||||
|
|
||||||
func (kv *RemoteKv) get(data notify.SMsg) string {
|
func (kv *RemoteKv) get(data notify.SMsg) string {
|
||||||
key := data.Value
|
key := data.Value
|
||||||
value, err := Get(key)
|
value, err := kv.kvmap.Get(key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
sendData, err := encode(basicReply{"error", []byte("key not exists")})
|
sendData, err := encode(basicReply{"error", []byte("key not exists")})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -47,7 +47,7 @@ func (kv *RemoteKv) store(data notify.SMsg) string {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err.Error()
|
return err.Error()
|
||||||
}
|
}
|
||||||
err = Store(inf.Key, customStruct)
|
err = kv.kvmap.Store(inf.Key, customStruct)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err.Error()
|
return err.Error()
|
||||||
}
|
}
|
||||||
@ -55,7 +55,7 @@ func (kv *RemoteKv) store(data notify.SMsg) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (kv *RemoteKv) delete(data notify.SMsg) string {
|
func (kv *RemoteKv) delete(data notify.SMsg) string {
|
||||||
err := Delete(data.Value)
|
err := kv.kvmap.Delete(data.Value)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err.Error()
|
return err.Error()
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (kv *RemoteKv) getMap(data notify.SMsg) string {
|
func (kv *RemoteKv) getMap(data notify.SMsg) string {
|
||||||
val, ok := kvMapPro[data.Value]
|
kv.kvmu.Lock()
|
||||||
|
defer kv.kvmu.Unlock()
|
||||||
|
val, ok := kv.kvmap.kvMapPro[data.Value]
|
||||||
if !ok {
|
if !ok {
|
||||||
data.Key = "error"
|
data.Key = "error"
|
||||||
data.Reply("key not exists")
|
data.Reply("key not exists")
|
||||||
@ -21,13 +23,15 @@ func (kv *RemoteKv) getMap(data notify.SMsg) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (kv *RemoteKv) storeMap(data notify.SMsg) string {
|
func (kv *RemoteKv) storeMap(data notify.SMsg) string {
|
||||||
|
kv.kvmu.Lock()
|
||||||
|
defer kv.kvmu.Unlock()
|
||||||
recvData, err := decodeMap([]byte(data.Value))
|
recvData, err := decodeMap([]byte(data.Value))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
data.Key = "error"
|
data.Key = "error"
|
||||||
data.Reply(err.Error())
|
data.Reply(err.Error())
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
err = StoreMap(recvData)
|
err = kv.kvmap.StoreMap(recvData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
data.Key = "error"
|
data.Key = "error"
|
||||||
data.Reply(err.Error())
|
data.Reply(err.Error())
|
||||||
@ -37,6 +41,8 @@ func (kv *RemoteKv) storeMap(data notify.SMsg) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (kv *RemoteKv) deleteMap(data notify.SMsg) string {
|
func (kv *RemoteKv) deleteMap(data notify.SMsg) string {
|
||||||
delete(kvMapPro, data.Value)
|
kv.kvmu.Lock()
|
||||||
|
defer kv.kvmu.Unlock()
|
||||||
|
delete(kv.kvmap.kvMapPro, data.Value)
|
||||||
return "ok"
|
return "ok"
|
||||||
}
|
}
|
||||||
|
22
starmap.go
22
starmap.go
@ -2,10 +2,14 @@ package starmap
|
|||||||
|
|
||||||
import "sync"
|
import "sync"
|
||||||
|
|
||||||
var kvMap map[string]interface{}
|
var globalMap StarMapKV
|
||||||
var kvmu sync.RWMutex
|
|
||||||
var kvMapPro map[string]StarMap
|
type StarMapKV struct {
|
||||||
var kvmuPro sync.RWMutex
|
kvMap map[string]interface{}
|
||||||
|
kvmu sync.RWMutex
|
||||||
|
kvMapPro map[string]StarMap
|
||||||
|
kvmuPro sync.RWMutex
|
||||||
|
}
|
||||||
|
|
||||||
type StarStack struct {
|
type StarStack struct {
|
||||||
kvPushmu sync.RWMutex
|
kvPushmu sync.RWMutex
|
||||||
@ -13,6 +17,12 @@ type StarStack struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
kvMap = make(map[string]interface{})
|
globalMap = NewStarMap()
|
||||||
kvMapPro = make(map[string]StarMap)
|
}
|
||||||
|
|
||||||
|
func NewStarMap() StarMapKV {
|
||||||
|
var mp StarMapKV
|
||||||
|
mp.kvMap = make(map[string]interface{})
|
||||||
|
mp.kvMapPro = make(map[string]StarMap)
|
||||||
|
return mp
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user