Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
二次元的罪恶王冠
beego
提交
089dfbdb
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,发现更多精彩内容 >>
未验证
提交
089dfbdb
编写于
6月 23, 2020
作者:
M
Ming Deng
提交者:
GitHub
6月 23, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #4016 from huija/develop
Update redis.go
上级
526a5463
f70fd5ba
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
70 addition
and
3 deletion
+70
-3
cache/redis/redis.go
cache/redis/redis.go
+32
-3
cache/redis/redis_test.go
cache/redis/redis_test.go
+38
-0
未找到文件。
cache/redis/redis.go
浏览文件 @
089dfbdb
...
...
@@ -137,12 +137,12 @@ func (rc *Cache) Decr(key string) error {
// ClearAll clean all cache in redis. delete this redis collection.
func
(
rc
*
Cache
)
ClearAll
()
error
{
c
:=
rc
.
p
.
Get
()
defer
c
.
Close
()
cachedKeys
,
err
:=
redis
.
Strings
(
c
.
Do
(
"KEYS"
,
rc
.
key
+
":*"
))
cachedKeys
,
err
:=
rc
.
Scan
(
rc
.
key
+
":*"
)
if
err
!=
nil
{
return
err
}
c
:=
rc
.
p
.
Get
()
defer
c
.
Close
()
for
_
,
str
:=
range
cachedKeys
{
if
_
,
err
=
c
.
Do
(
"DEL"
,
str
);
err
!=
nil
{
return
err
...
...
@@ -151,6 +151,35 @@ func (rc *Cache) ClearAll() error {
return
err
}
// Scan scan all keys matching the pattern. a better choice than `keys`
func
(
rc
*
Cache
)
Scan
(
pattern
string
)
(
keys
[]
string
,
err
error
)
{
c
:=
rc
.
p
.
Get
()
defer
c
.
Close
()
var
(
cursor
uint64
=
0
// start
result
[]
interface
{}
list
[]
string
)
for
{
result
,
err
=
redis
.
Values
(
c
.
Do
(
"SCAN"
,
cursor
,
"MATCH"
,
pattern
,
"COUNT"
,
1024
))
if
err
!=
nil
{
return
}
list
,
err
=
redis
.
Strings
(
result
[
1
],
nil
)
if
err
!=
nil
{
return
}
keys
=
append
(
keys
,
list
...
)
cursor
,
err
=
redis
.
Uint64
(
result
[
0
],
nil
)
if
err
!=
nil
{
return
}
if
cursor
==
0
{
// over
return
}
}
}
// StartAndGC start redis cache adapter.
// config is like {"key":"collection key","conn":"connection info","dbNum":"0"}
// the cache item in redis are stored forever,
...
...
cache/redis/redis_test.go
浏览文件 @
089dfbdb
...
...
@@ -15,6 +15,7 @@
package
redis
import
(
"fmt"
"testing"
"time"
...
...
@@ -104,3 +105,40 @@ func TestRedisCache(t *testing.T) {
t
.
Error
(
"clear all err"
)
}
}
func
TestCache_Scan
(
t
*
testing
.
T
)
{
timeoutDuration
:=
10
*
time
.
Second
// init
bm
,
err
:=
cache
.
NewCache
(
"redis"
,
`{"conn": "127.0.0.1:6379"}`
)
if
err
!=
nil
{
t
.
Error
(
"init err"
)
}
// insert all
for
i
:=
0
;
i
<
10000
;
i
++
{
if
err
=
bm
.
Put
(
fmt
.
Sprintf
(
"astaxie%d"
,
i
),
fmt
.
Sprintf
(
"author%d"
,
i
),
timeoutDuration
);
err
!=
nil
{
t
.
Error
(
"set Error"
,
err
)
}
}
// scan all for the first time
keys
,
err
:=
bm
.
(
*
Cache
)
.
Scan
(
DefaultKey
+
":*"
)
if
err
!=
nil
{
t
.
Error
(
"scan Error"
,
err
)
}
if
len
(
keys
)
!=
10000
{
t
.
Error
(
"scan all err"
)
}
// clear all
if
err
=
bm
.
ClearAll
();
err
!=
nil
{
t
.
Error
(
"clear all err"
)
}
// scan all for the second time
keys
,
err
=
bm
.
(
*
Cache
)
.
Scan
(
DefaultKey
+
":*"
)
if
err
!=
nil
{
t
.
Error
(
"scan Error"
,
err
)
}
if
len
(
keys
)
!=
0
{
t
.
Error
(
"scan all err"
)
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录