Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
weixin_57962205
redisson
提交
76d134c7
R
redisson
项目概览
weixin_57962205
/
redisson
与 Fork 源项目一致
从无法访问的项目Fork
通知
10
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
redisson
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
76d134c7
编写于
6月 04, 2021
作者:
N
Nikita Koksharov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixed - RLocalCachedMap doesn't used MapLoader if storeMode = LOCALCACHE. #3617
上级
8ba07e58
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
110 addition
and
10 deletion
+110
-10
redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java
...on/src/main/java/org/redisson/RedissonLocalCachedMap.java
+65
-7
redisson/src/main/java/org/redisson/RedissonMap.java
redisson/src/main/java/org/redisson/RedissonMap.java
+6
-1
redisson/src/test/java/org/redisson/BaseMapTest.java
redisson/src/test/java/org/redisson/BaseMapTest.java
+4
-1
redisson/src/test/java/org/redisson/RedissonLocalCachedMapTest.java
...rc/test/java/org/redisson/RedissonLocalCachedMapTest.java
+35
-1
未找到文件。
redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java
浏览文件 @
76d134c7
...
...
@@ -29,7 +29,10 @@ import org.redisson.client.codec.StringCodec;
import
org.redisson.client.protocol.RedisCommand
;
import
org.redisson.client.protocol.RedisCommands
;
import
org.redisson.client.protocol.convertor.NumberConvertor
;
import
org.redisson.client.protocol.decoder.*
;
import
org.redisson.client.protocol.decoder.MapKeyDecoder
;
import
org.redisson.client.protocol.decoder.ObjectMapEntryReplayDecoder
;
import
org.redisson.client.protocol.decoder.ObjectMapReplayDecoder
;
import
org.redisson.client.protocol.decoder.ObjectSetReplayDecoder
;
import
org.redisson.command.CommandAsyncExecutor
;
import
org.redisson.eviction.EvictionScheduler
;
import
org.redisson.misc.RPromise
;
...
...
@@ -197,9 +200,28 @@ public class RedissonLocalCachedMap<K, V> extends RedissonMap<K, V> implements R
checkKey
(
key
);
CacheKey
cacheKey
=
localCacheView
.
toCacheKey
(
key
);
if
(!
cache
.
containsKey
(
cacheKey
))
{
CacheValue
cacheValue
=
cache
.
get
(
cacheKey
);
if
(
cacheValue
==
null
)
{
if
(
storeMode
==
LocalCachedMapOptions
.
StoreMode
.
LOCALCACHE
)
{
return
RedissonPromise
.
newSucceededFuture
(
false
);
if
(
hasNoLoader
())
{
return
RedissonPromise
.
newSucceededFuture
(
false
);
}
RPromise
<
Boolean
>
result
=
new
RedissonPromise
<>();
RPromise
<
V
>
valuePromise
=
new
RedissonPromise
<>();
loadValue
((
K
)
key
,
valuePromise
,
false
);
valuePromise
.
onComplete
((
value
,
ex
)
->
{
if
(
ex
!=
null
)
{
result
.
tryFailure
(
ex
);
return
;
}
if
(
storeCacheMiss
||
value
!=
null
)
{
cachePut
(
cacheKey
,
key
,
value
);
}
result
.
trySuccess
(
value
!=
null
);
});
return
result
;
}
RPromise
<
V
>
promise
=
new
RedissonPromise
<>();
...
...
@@ -214,7 +236,8 @@ public class RedissonLocalCachedMap<K, V> extends RedissonMap<K, V> implements R
});
return
containsKeyAsync
(
key
,
promise
);
}
return
RedissonPromise
.
newSucceededFuture
(
true
);
return
RedissonPromise
.
newSucceededFuture
(
cacheValue
.
getValue
()
!=
null
);
}
@Override
...
...
@@ -243,7 +266,23 @@ public class RedissonLocalCachedMap<K, V> extends RedissonMap<K, V> implements R
}
if
(
storeMode
==
LocalCachedMapOptions
.
StoreMode
.
LOCALCACHE
)
{
return
RedissonPromise
.
newSucceededFuture
(
null
);
if
(
hasNoLoader
())
{
return
RedissonPromise
.
newSucceededFuture
(
null
);
}
RPromise
<
V
>
result
=
new
RedissonPromise
<>();
loadValue
((
K
)
key
,
result
,
false
);
result
.
onComplete
((
value
,
ex
)
->
{
if
(
ex
!=
null
)
{
result
.
tryFailure
(
ex
);
return
;
}
if
(
storeCacheMiss
||
value
!=
null
)
{
cachePut
(
cacheKey
,
key
,
value
);
}
});
return
result
;
}
RFuture
<
V
>
future
=
super
.
getAsync
((
K
)
key
);
...
...
@@ -591,11 +630,30 @@ public class RedissonLocalCachedMap<K, V> extends RedissonMap<K, V> implements R
}
}
RPromise
<
Map
<
K
,
V
>>
promise
=
new
RedissonPromise
<>();
if
(
storeMode
==
LocalCachedMapOptions
.
StoreMode
.
LOCALCACHE
)
{
return
RedissonPromise
.
newSucceededFuture
(
result
);
if
(
hasNoLoader
())
{
return
RedissonPromise
.
newSucceededFuture
(
result
);
}
Set
<
K
>
newKeys
=
new
HashSet
<>(
keys
);
newKeys
.
removeAll
(
result
.
keySet
());
if
(!
newKeys
.
isEmpty
())
{
loadAllAsync
(
newKeys
,
false
,
1
,
result
).
onComplete
((
r
,
ex
)
->
{
if
(
ex
!=
null
)
{
promise
.
tryFailure
(
ex
);
return
;
}
promise
.
trySuccess
(
result
);
});
}
else
{
promise
.
trySuccess
(
result
);
}
return
promise
;
}
RPromise
<
Map
<
K
,
V
>>
promise
=
new
RedissonPromise
<
Map
<
K
,
V
>>();
RFuture
<
Map
<
K
,
V
>>
future
=
super
.
getAllAsync
(
mapKeys
);
future
.
onComplete
((
map
,
e
)
->
{
if
(
e
!=
null
)
{
...
...
redisson/src/main/java/org/redisson/RedissonMap.java
浏览文件 @
76d134c7
...
...
@@ -623,6 +623,11 @@ public class RedissonMap<K, V> extends RedissonExpirable implements RMap<K, V> {
newKeys
.
removeAll
(
res
.
keySet
());
loadAllAsync
(
newKeys
,
false
,
1
,
res
).
onComplete
((
r
,
ex
)
->
{
if
(
ex
!=
null
)
{
result
.
tryFailure
(
ex
);
return
;
}
result
.
trySuccess
(
res
);
});
}
else
{
...
...
@@ -1212,7 +1217,7 @@ public class RedissonMap<K, V> extends RedissonExpirable implements RMap<K, V> {
return
loadAllAsync
((
Iterable
<
K
>)
keys
,
replaceExistingValues
,
parallelism
,
null
);
}
pr
ivate
RFuture
<
Void
>
loadAllAsync
(
Iterable
<?
extends
K
>
keys
,
boolean
replaceExistingValues
,
int
parallelism
,
Map
<
K
,
V
>
loadedEntires
)
{
pr
otected
RFuture
<
Void
>
loadAllAsync
(
Iterable
<?
extends
K
>
keys
,
boolean
replaceExistingValues
,
int
parallelism
,
Map
<
K
,
V
>
loadedEntires
)
{
if
(
parallelism
<
1
)
{
throw
new
IllegalArgumentException
(
"parallelism can't be lower than 1"
);
}
...
...
redisson/src/test/java/org/redisson/BaseMapTest.java
浏览文件 @
76d134c7
...
...
@@ -127,7 +127,7 @@ public abstract class BaseMapTest extends BaseTest {
}
pr
ivate
void
destroy
(
RMap
<?,
?>
map
)
{
pr
otected
void
destroy
(
RMap
<?,
?>
map
)
{
if
(
map
instanceof
RDestroyable
)
{
((
RDestroyable
)
map
).
destroy
();
}
...
...
@@ -1479,6 +1479,9 @@ public abstract class BaseMapTest extends BaseTest {
map
.
put
(
"0"
,
"00"
);
assertThat
(
map
.
get
(
"0"
)).
isEqualTo
(
"00"
);
assertThat
(
map
.
size
()).
isEqualTo
(
2
);
assertThat
(
map
.
containsKey
(
"2"
)).
isTrue
();
assertThat
(
map
.
size
()).
isEqualTo
(
3
);
Map
<
String
,
String
>
s
=
map
.
getAll
(
new
HashSet
<>(
Arrays
.
asList
(
"1"
,
"2"
,
"9"
,
"3"
)));
Map
<
String
,
String
>
expectedMap
=
new
HashMap
<>();
...
...
redisson/src/test/java/org/redisson/RedissonLocalCachedMapTest.java
浏览文件 @
76d134c7
...
...
@@ -91,6 +91,38 @@ public class RedissonLocalCachedMapTest extends BaseMapTest {
}
@Test
public
void
testMapLoaderGet
()
{
Map
<
String
,
String
>
cache
=
new
HashMap
<>();
cache
.
put
(
"1"
,
"11"
);
cache
.
put
(
"2"
,
"22"
);
cache
.
put
(
"3"
,
"33"
);
LocalCachedMapOptions
<
String
,
String
>
options
=
LocalCachedMapOptions
.<
String
,
String
>
defaults
()
.
storeMode
(
LocalCachedMapOptions
.
StoreMode
.
LOCALCACHE
).
loader
(
createMapLoader
(
cache
));
RMap
<
String
,
String
>
map
=
redisson
.
getLocalCachedMap
(
"test"
,
options
);
assertThat
(
map
.
size
()).
isEqualTo
(
0
);
assertThat
(
map
.
get
(
"1"
)).
isEqualTo
(
"11"
);
assertThat
(
map
.
size
()).
isEqualTo
(
1
);
assertThat
(
map
.
get
(
"0"
)).
isNull
();
map
.
put
(
"0"
,
"00"
);
assertThat
(
map
.
get
(
"0"
)).
isEqualTo
(
"00"
);
assertThat
(
map
.
size
()).
isEqualTo
(
2
);
assertThat
(
map
.
containsKey
(
"2"
)).
isTrue
();
assertThat
(
map
.
size
()).
isEqualTo
(
3
);
Map
<
String
,
String
>
s
=
map
.
getAll
(
new
HashSet
<>(
Arrays
.
asList
(
"1"
,
"2"
,
"9"
,
"3"
)));
Map
<
String
,
String
>
expectedMap
=
new
HashMap
<>();
expectedMap
.
put
(
"1"
,
"11"
);
expectedMap
.
put
(
"2"
,
"22"
);
expectedMap
.
put
(
"3"
,
"33"
);
assertThat
(
s
).
isEqualTo
(
expectedMap
);
assertThat
(
map
.
size
()).
isEqualTo
(
4
);
destroy
(
map
);
}
@Override
protected
<
K
,
V
>
RMap
<
K
,
V
>
getMap
(
String
name
)
{
return
redisson
.
getLocalCachedMap
(
name
,
LocalCachedMapOptions
.<
K
,
V
>
defaults
());
...
...
@@ -328,7 +360,9 @@ public class RedissonLocalCachedMapTest extends BaseMapTest {
assertThat
(
map2
.
get
(
"1"
)).
isEqualTo
(
1
);
assertThat
(
map2
.
get
(
"2"
)).
isEqualTo
(
2
);
Thread
.
sleep
(
50
);
assertThat
(
cache1
.
size
()).
isEqualTo
(
2
);
assertThat
(
cache2
.
size
()).
isEqualTo
(
2
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录