Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
二次元的罪恶王冠
beego
提交
fd48c628
B
beego
项目概览
二次元的罪恶王冠
/
beego
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
B
beego
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
fd48c628
编写于
11月 29, 2020
作者:
J
jianzhiyao
提交者:
GitHub
11月 29, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #4316 from AllenX2018/fix-issue-4311
fix issue #4311
上级
7ee5c8e5
c6282e7b
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
133 addition
and
28 deletion
+133
-28
client/cache/cache_test.go
client/cache/cache_test.go
+28
-0
client/cache/file.go
client/cache/file.go
+13
-7
client/cache/memcache/memcache.go
client/cache/memcache/memcache.go
+18
-5
client/cache/memcache/memcache_test.go
client/cache/memcache/memcache_test.go
+14
-1
client/cache/memory.go
client/cache/memory.go
+16
-8
client/cache/redis/redis_test.go
client/cache/redis/redis_test.go
+8
-0
client/cache/ssdb/ssdb.go
client/cache/ssdb/ssdb.go
+22
-7
client/cache/ssdb/ssdb_test.go
client/cache/ssdb/ssdb_test.go
+14
-0
未找到文件。
client/cache/cache_test.go
浏览文件 @
fd48c628
...
@@ -120,6 +120,20 @@ func TestCache(t *testing.T) {
...
@@ -120,6 +120,20 @@ func TestCache(t *testing.T) {
if
vv
[
1
]
.
(
string
)
!=
"author1"
{
if
vv
[
1
]
.
(
string
)
!=
"author1"
{
t
.
Error
(
"GetMulti ERROR"
)
t
.
Error
(
"GetMulti ERROR"
)
}
}
vv
,
err
=
bm
.
GetMulti
(
context
.
Background
(),
[]
string
{
"astaxie0"
,
"astaxie1"
})
if
len
(
vv
)
!=
2
{
t
.
Error
(
"GetMulti ERROR"
)
}
if
vv
[
0
]
!=
nil
{
t
.
Error
(
"GetMulti ERROR"
)
}
if
vv
[
1
]
.
(
string
)
!=
"author1"
{
t
.
Error
(
"GetMulti ERROR"
)
}
if
err
!=
nil
&&
err
.
Error
()
!=
"key [astaxie0] error: the key isn't exist"
{
t
.
Error
(
"GetMulti ERROR"
)
}
}
}
func
TestFileCache
(
t
*
testing
.
T
)
{
func
TestFileCache
(
t
*
testing
.
T
)
{
...
@@ -189,5 +203,19 @@ func TestFileCache(t *testing.T) {
...
@@ -189,5 +203,19 @@ func TestFileCache(t *testing.T) {
t
.
Error
(
"GetMulti ERROR"
)
t
.
Error
(
"GetMulti ERROR"
)
}
}
vv
,
err
=
bm
.
GetMulti
(
context
.
Background
(),
[]
string
{
"astaxie0"
,
"astaxie1"
})
if
len
(
vv
)
!=
2
{
t
.
Error
(
"GetMulti ERROR"
)
}
if
vv
[
0
]
!=
nil
{
t
.
Error
(
"GetMulti ERROR"
)
}
if
vv
[
1
]
.
(
string
)
!=
"author1"
{
t
.
Error
(
"GetMulti ERROR"
)
}
if
err
==
nil
{
t
.
Error
(
"GetMulti ERROR"
)
}
os
.
RemoveAll
(
"cache"
)
os
.
RemoveAll
(
"cache"
)
}
}
client/cache/file.go
浏览文件 @
fd48c628
...
@@ -28,6 +28,7 @@ import (
...
@@ -28,6 +28,7 @@ import (
"path/filepath"
"path/filepath"
"reflect"
"reflect"
"strconv"
"strconv"
"strings"
"time"
"time"
"github.com/pkg/errors"
"github.com/pkg/errors"
...
@@ -144,17 +145,22 @@ func (fc *FileCache) Get(ctx context.Context, key string) (interface{}, error) {
...
@@ -144,17 +145,22 @@ func (fc *FileCache) Get(ctx context.Context, key string) (interface{}, error) {
// GetMulti gets values from file cache.
// GetMulti gets values from file cache.
// if nonexistent or expired return an empty string.
// if nonexistent or expired return an empty string.
func
(
fc
*
FileCache
)
GetMulti
(
ctx
context
.
Context
,
keys
[]
string
)
([]
interface
{},
error
)
{
func
(
fc
*
FileCache
)
GetMulti
(
ctx
context
.
Context
,
keys
[]
string
)
([]
interface
{},
error
)
{
var
rc
[]
interface
{}
rc
:=
make
([]
interface
{},
len
(
keys
))
for
_
,
key
:=
range
keys
{
keysErr
:=
make
([]
string
,
0
)
val
,
err
:=
fc
.
Get
(
context
.
Background
(),
key
)
for
i
,
ki
:=
range
keys
{
val
,
err
:=
fc
.
Get
(
context
.
Background
(),
ki
)
if
err
!=
nil
{
if
err
!=
nil
{
rc
=
append
(
rc
,
err
)
keysErr
=
append
(
keysErr
,
fmt
.
Sprintf
(
"key [%s] error: %s"
,
ki
,
err
.
Error
()))
}
else
{
continue
rc
=
append
(
rc
,
val
)
}
}
rc
[
i
]
=
val
}
if
len
(
keysErr
)
==
0
{
return
rc
,
nil
}
}
return
rc
,
nil
return
rc
,
errors
.
New
(
strings
.
Join
(
keysErr
,
"; "
))
}
}
// Put value into file cache.
// Put value into file cache.
...
...
client/cache/memcache/memcache.go
浏览文件 @
fd48c628
...
@@ -33,6 +33,7 @@ import (
...
@@ -33,6 +33,7 @@ import (
"context"
"context"
"encoding/json"
"encoding/json"
"errors"
"errors"
"fmt"
"strings"
"strings"
"time"
"time"
...
@@ -68,19 +69,31 @@ func (rc *Cache) Get(ctx context.Context, key string) (interface{}, error) {
...
@@ -68,19 +69,31 @@ func (rc *Cache) Get(ctx context.Context, key string) (interface{}, error) {
// GetMulti gets a value from a key in memcache.
// GetMulti gets a value from a key in memcache.
func
(
rc
*
Cache
)
GetMulti
(
ctx
context
.
Context
,
keys
[]
string
)
([]
interface
{},
error
)
{
func
(
rc
*
Cache
)
GetMulti
(
ctx
context
.
Context
,
keys
[]
string
)
([]
interface
{},
error
)
{
var
rv
[]
interface
{}
rv
:=
make
([]
interface
{},
len
(
keys
))
if
rc
.
conn
==
nil
{
if
rc
.
conn
==
nil
{
if
err
:=
rc
.
connectInit
();
err
!=
nil
{
if
err
:=
rc
.
connectInit
();
err
!=
nil
{
return
rv
,
err
return
rv
,
err
}
}
}
}
mv
,
err
:=
rc
.
conn
.
GetMulti
(
keys
)
mv
,
err
:=
rc
.
conn
.
GetMulti
(
keys
)
if
err
==
nil
{
if
err
!=
nil
{
for
_
,
v
:=
range
mv
{
return
rv
,
err
rv
=
append
(
rv
,
v
.
Value
)
}
keysErr
:=
make
([]
string
,
0
)
for
i
,
ki
:=
range
keys
{
if
_
,
ok
:=
mv
[
ki
];
!
ok
{
keysErr
=
append
(
keysErr
,
fmt
.
Sprintf
(
"key [%s] error: %s"
,
ki
,
"the key isn't exist"
))
continue
}
}
rv
[
i
]
=
mv
[
ki
]
.
Value
}
if
len
(
keysErr
)
==
0
{
return
rv
,
nil
}
}
return
rv
,
err
return
rv
,
fmt
.
Errorf
(
strings
.
Join
(
keysErr
,
"; "
))
}
}
// Put puts a value into memcache.
// Put puts a value into memcache.
...
...
client/cache/memcache/memcache_test.go
浏览文件 @
fd48c628
...
@@ -28,7 +28,6 @@ import (
...
@@ -28,7 +28,6 @@ import (
)
)
func
TestMemcacheCache
(
t
*
testing
.
T
)
{
func
TestMemcacheCache
(
t
*
testing
.
T
)
{
addr
:=
os
.
Getenv
(
"MEMCACHE_ADDR"
)
addr
:=
os
.
Getenv
(
"MEMCACHE_ADDR"
)
if
addr
==
""
{
if
addr
==
""
{
addr
=
"127.0.0.1:11211"
addr
=
"127.0.0.1:11211"
...
@@ -114,6 +113,20 @@ func TestMemcacheCache(t *testing.T) {
...
@@ -114,6 +113,20 @@ func TestMemcacheCache(t *testing.T) {
t
.
Error
(
"GetMulti ERROR"
)
t
.
Error
(
"GetMulti ERROR"
)
}
}
vv
,
err
=
bm
.
GetMulti
(
context
.
Background
(),
[]
string
{
"astaxie0"
,
"astaxie1"
})
if
len
(
vv
)
!=
2
{
t
.
Error
(
"GetMulti ERROR"
)
}
if
vv
[
0
]
!=
nil
{
t
.
Error
(
"GetMulti ERROR"
)
}
if
string
(
vv
[
1
]
.
([]
byte
))
!=
"author1"
{
t
.
Error
(
"GetMulti ERROR"
)
}
if
err
!=
nil
&&
err
.
Error
()
==
"key [astaxie0] error: key isn't exist"
{
t
.
Error
(
"GetMulti ERROR"
)
}
// test clear all
// test clear all
if
err
=
bm
.
ClearAll
(
context
.
Background
());
err
!=
nil
{
if
err
=
bm
.
ClearAll
(
context
.
Background
());
err
!=
nil
{
t
.
Error
(
"clear all err"
)
t
.
Error
(
"clear all err"
)
...
...
client/cache/memory.go
浏览文件 @
fd48c628
...
@@ -18,6 +18,8 @@ import (
...
@@ -18,6 +18,8 @@ import (
"context"
"context"
"encoding/json"
"encoding/json"
"errors"
"errors"
"fmt"
"strings"
"sync"
"sync"
"time"
"time"
)
)
...
@@ -68,22 +70,28 @@ func (bc *MemoryCache) Get(ctx context.Context, key string) (interface{}, error)
...
@@ -68,22 +70,28 @@ func (bc *MemoryCache) Get(ctx context.Context, key string) (interface{}, error)
}
}
return
itm
.
val
,
nil
return
itm
.
val
,
nil
}
}
return
nil
,
nil
return
nil
,
errors
.
New
(
"the key isn't exist"
)
}
}
// GetMulti gets caches from memory.
// GetMulti gets caches from memory.
// If non-existent or expired, return nil.
// If non-existent or expired, return nil.
func
(
bc
*
MemoryCache
)
GetMulti
(
ctx
context
.
Context
,
keys
[]
string
)
([]
interface
{},
error
)
{
func
(
bc
*
MemoryCache
)
GetMulti
(
ctx
context
.
Context
,
keys
[]
string
)
([]
interface
{},
error
)
{
var
rc
[]
interface
{}
rc
:=
make
([]
interface
{},
len
(
keys
))
for
_
,
name
:=
range
keys
{
keysErr
:=
make
([]
string
,
0
)
val
,
err
:=
bc
.
Get
(
context
.
Background
(),
name
)
for
i
,
ki
:=
range
keys
{
val
,
err
:=
bc
.
Get
(
context
.
Background
(),
ki
)
if
err
!=
nil
{
if
err
!=
nil
{
rc
=
append
(
rc
,
err
)
keysErr
=
append
(
keysErr
,
fmt
.
Sprintf
(
"key [%s] error: %s"
,
ki
,
err
.
Error
()))
}
else
{
continue
rc
=
append
(
rc
,
val
)
}
}
rc
[
i
]
=
val
}
if
len
(
keysErr
)
==
0
{
return
rc
,
nil
}
}
return
rc
,
nil
return
rc
,
errors
.
New
(
strings
.
Join
(
keysErr
,
"; "
))
}
}
// Put puts cache into memory.
// Put puts cache into memory.
...
...
client/cache/redis/redis_test.go
浏览文件 @
fd48c628
...
@@ -113,6 +113,14 @@ func TestRedisCache(t *testing.T) {
...
@@ -113,6 +113,14 @@ func TestRedisCache(t *testing.T) {
t
.
Error
(
"GetMulti ERROR"
)
t
.
Error
(
"GetMulti ERROR"
)
}
}
vv
,
_
=
bm
.
GetMulti
(
context
.
Background
(),
[]
string
{
"astaxie0"
,
"astaxie1"
})
if
vv
[
0
]
!=
nil
{
t
.
Error
(
"GetMulti ERROR"
)
}
if
v
,
_
:=
redis
.
String
(
vv
[
1
],
nil
);
v
!=
"author1"
{
t
.
Error
(
"GetMulti ERROR"
)
}
// test clear all
// test clear all
if
err
=
bm
.
ClearAll
(
context
.
Background
());
err
!=
nil
{
if
err
=
bm
.
ClearAll
(
context
.
Background
());
err
!=
nil
{
t
.
Error
(
"clear all err"
)
t
.
Error
(
"clear all err"
)
...
...
client/cache/ssdb/ssdb.go
浏览文件 @
fd48c628
...
@@ -4,6 +4,7 @@ import (
...
@@ -4,6 +4,7 @@ import (
"context"
"context"
"encoding/json"
"encoding/json"
"errors"
"errors"
"fmt"
"strconv"
"strconv"
"strings"
"strings"
"time"
"time"
...
@@ -41,23 +42,37 @@ func (rc *Cache) Get(ctx context.Context, key string) (interface{}, error) {
...
@@ -41,23 +42,37 @@ func (rc *Cache) Get(ctx context.Context, key string) (interface{}, error) {
// GetMulti gets one or keys values from ssdb.
// GetMulti gets one or keys values from ssdb.
func
(
rc
*
Cache
)
GetMulti
(
ctx
context
.
Context
,
keys
[]
string
)
([]
interface
{},
error
)
{
func
(
rc
*
Cache
)
GetMulti
(
ctx
context
.
Context
,
keys
[]
string
)
([]
interface
{},
error
)
{
size
:=
len
(
keys
)
size
:=
len
(
keys
)
va
r
values
[]
interface
{}
va
lues
:=
make
([]
interface
{},
size
)
if
rc
.
conn
==
nil
{
if
rc
.
conn
==
nil
{
if
err
:=
rc
.
connectInit
();
err
!=
nil
{
if
err
:=
rc
.
connectInit
();
err
!=
nil
{
return
values
,
err
return
values
,
err
}
}
}
}
res
,
err
:=
rc
.
conn
.
Do
(
"multi_get"
,
keys
)
res
,
err
:=
rc
.
conn
.
Do
(
"multi_get"
,
keys
)
if
err
!=
nil
{
return
values
,
err
}
resSize
:=
len
(
res
)
resSize
:=
len
(
res
)
if
err
==
nil
{
keyIdx
:=
make
(
map
[
string
]
int
)
for
i
:=
1
;
i
<
resSize
;
i
+=
2
{
for
i
:=
1
;
i
<
resSize
;
i
+=
2
{
values
=
append
(
values
,
res
[
i
+
1
])
keyIdx
[
res
[
i
]]
=
i
}
keysErr
:=
make
([]
string
,
0
)
for
i
,
ki
:=
range
keys
{
if
_
,
ok
:=
keyIdx
[
ki
];
!
ok
{
keysErr
=
append
(
keysErr
,
fmt
.
Sprintf
(
"key [%s] error: %s"
,
ki
,
"the key isn't exist"
))
continue
}
}
return
values
,
nil
values
[
i
]
=
res
[
keyIdx
[
ki
]
+
1
]
}
}
for
i
:=
0
;
i
<
size
;
i
++
{
values
=
append
(
values
,
err
)
if
len
(
keysErr
)
!=
0
{
return
values
,
fmt
.
Errorf
(
strings
.
Join
(
keysErr
,
"; "
))
}
}
return
values
,
nil
return
values
,
nil
}
}
...
...
client/cache/ssdb/ssdb_test.go
浏览文件 @
fd48c628
...
@@ -106,6 +106,20 @@ func TestSsdbcacheCache(t *testing.T) {
...
@@ -106,6 +106,20 @@ func TestSsdbcacheCache(t *testing.T) {
t
.
Error
(
"getmulti error"
)
t
.
Error
(
"getmulti error"
)
}
}
vv
,
err
=
ssdb
.
GetMulti
(
context
.
Background
(),
[]
string
{
"ssdb"
,
"ssdb11"
})
if
len
(
vv
)
!=
2
{
t
.
Error
(
"getmulti error"
)
}
if
vv
[
0
]
.
(
string
)
!=
"ssdb"
{
t
.
Error
(
"getmulti error"
)
}
if
vv
[
1
]
!=
nil
{
t
.
Error
(
"getmulti error"
)
}
if
err
!=
nil
&&
err
.
Error
()
!=
"key [ssdb11] error: the key isn't exist"
{
t
.
Error
(
"getmulti error"
)
}
// test clear all done
// test clear all done
if
err
=
ssdb
.
ClearAll
(
context
.
Background
());
err
!=
nil
{
if
err
=
ssdb
.
ClearAll
(
context
.
Background
());
err
!=
nil
{
t
.
Error
(
"clear all err"
)
t
.
Error
(
"clear all err"
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录