Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦境迷离
Scala Macro Tools
提交
94d4b70c
S
Scala Macro Tools
项目概览
梦境迷离
/
Scala Macro Tools
上一次同步 大约 1 年
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
Scala Macro Tools
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
94d4b70c
编写于
3月 22, 2022
作者:
梦境迷离
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix lock
上级
b5508ab2
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
35 addition
and
47 deletion
+35
-47
cacheable-caffeine/src/main/scala/org/bitlap/cacheable/caffeine/Implicits.scala
.../main/scala/org/bitlap/cacheable/caffeine/Implicits.scala
+18
-12
cacheable-caffeine/src/main/scala/org/bitlap/cacheable/caffeine/ZCaffeine.scala
.../main/scala/org/bitlap/cacheable/caffeine/ZCaffeine.scala
+17
-35
未找到文件。
cacheable-caffeine/src/main/scala/org/bitlap/cacheable/caffeine/Implicits.scala
浏览文件 @
94d4b70c
...
...
@@ -46,12 +46,15 @@ object Implicits {
override
def
getIfPresent
(
business
:
=>
ZStream
[
Any
,
Throwable
,
T
])(
identities
:
List
[
String
],
args
:
List
[
_
])
:
ZStream
[
Any
,
Throwable
,
T
]
=
{
val
key
=
cacheKey
(
identities
)
val
field
=
cacheField
(
args
)
for
{
cacheValue
<-
ZStream
.
fromEffect
(
ZCaffeine
.
hGet
[
T
](
key
,
field
))
_
<-
if
(
ZCaffeine
.
disabledLog
)
ZStream
.
unit
else
LogUtils
.
debugS
(
s
"Caffeine ZStream getIfPresent: identity:[$key],field:[$field],cacheValue:[$cacheValue]"
)
result
<-
cacheValue
.
fold
(
business
.
mapM
(
r
=>
ZCaffeine
.
hSet
(
key
,
field
,
r
).
as
(
r
)))(
value
=>
ZStream
.
fromEffect
(
ZIO
.
effectTotal
(
value
)))
_
<-
if
(
ZCaffeine
.
disabledLog
)
ZStream
.
unit
else
LogUtils
.
debugS
(
s
"Caffeine ZStream getIfPresent: identity:[$key],field:[$field],result:[$result]"
)
}
yield
result
val
locked
=
s
"$key-$field"
locked
.
synchronized
{
for
{
cacheValue
<-
ZStream
.
fromEffect
(
ZCaffeine
.
hGet
[
T
](
key
,
field
))
_
<-
if
(
ZCaffeine
.
disabledLog
)
ZStream
.
unit
else
LogUtils
.
debugS
(
s
"Caffeine ZStream getIfPresent: identity:[$key],field:[$field],cacheValue:[$cacheValue]"
)
result
<-
cacheValue
.
fold
(
business
.
mapM
(
r
=>
ZCaffeine
.
hSet
(
key
,
field
,
r
).
as
(
r
)))(
value
=>
ZStream
.
fromEffect
(
ZIO
.
effectTotal
(
value
)))
_
<-
if
(
ZCaffeine
.
disabledLog
)
ZStream
.
unit
else
LogUtils
.
debugS
(
s
"Caffeine ZStream getIfPresent: identity:[$key],field:[$field],result:[$result]"
)
}
yield
result
}
}
}
...
...
@@ -68,12 +71,15 @@ object Implicits {
override
def
getIfPresent
(
business
:
=>
ZIO
[
Any
,
Throwable
,
T
])(
identities
:
List
[
String
],
args
:
List
[
_
])
:
ZIO
[
Any
,
Throwable
,
T
]
=
{
val
key
=
cacheKey
(
identities
)
val
field
=
cacheField
(
args
)
for
{
cacheValue
<-
ZCaffeine
.
hGet
[
T
](
key
,
field
)
_
<-
LogUtils
.
debug
(
s
"Caffeine ZIO getIfPresent: identity:[$key], field:[$field], cacheValue:[$cacheValue]"
).
unless
(
ZCaffeine
.
disabledLog
)
result
<-
cacheValue
.
fold
(
business
.
tap
(
r
=>
ZCaffeine
.
hSet
(
key
,
field
,
r
).
as
(
r
)))(
value
=>
ZIO
.
effectTotal
(
value
))
_
<-
LogUtils
.
debug
(
s
"Caffeine ZIO getIfPresent: identity:[$key], field:[$field], result:[$result]"
).
unless
(
ZCaffeine
.
disabledLog
)
}
yield
result
val
locked
=
s
"$key-$field"
locked
.
synchronized
{
for
{
cacheValue
<-
ZCaffeine
.
hGet
[
T
](
key
,
field
)
_
<-
LogUtils
.
debug
(
s
"Caffeine ZIO getIfPresent: identity:[$key], field:[$field], cacheValue:[$cacheValue]"
).
unless
(
ZCaffeine
.
disabledLog
)
result
<-
cacheValue
.
fold
(
business
.
tap
(
r
=>
ZCaffeine
.
hSet
(
key
,
field
,
r
).
as
(
r
)))(
value
=>
ZIO
.
effectTotal
(
value
))
_
<-
LogUtils
.
debug
(
s
"Caffeine ZIO getIfPresent: identity:[$key], field:[$field], result:[$result]"
).
unless
(
ZCaffeine
.
disabledLog
)
}
yield
result
}
}
}
}
cacheable-caffeine/src/main/scala/org/bitlap/cacheable/caffeine/ZCaffeine.scala
浏览文件 @
94d4b70c
...
...
@@ -50,32 +50,16 @@ object ZCaffeine {
.
expireAfterWrite
(
expireAfterWriteSeconds
,
TimeUnit
.
SECONDS
).
build
[
String
,
ConcurrentHashMap
[
String
,
Any
]]
def
hGet
[
T
](
key
:
String
,
field
:
String
)
:
Task
[
Option
[
T
]]
=
{
key
.
synchronized
{
ZIO
.
effect
{
val
hashMap
=
hashCache
.
getIfPresent
(
key
)
if
(
hashMap
==
null
||
hashMap
.
isEmpty
)
{
ZIO
.
effect
{
val
hashMap
=
hashCache
.
getIfPresent
(
key
)
if
(
hashMap
==
null
||
hashMap
.
isEmpty
)
{
None
}
else
{
val
fieldValue
=
hashMap
.
get
(
field
)
if
(
fieldValue
==
null
||
!
fieldValue
.
isInstanceOf
[
T
])
{
None
}
else
{
val
fieldValue
=
hashMap
.
get
(
field
)
if
(
fieldValue
==
null
||
!
fieldValue
.
isInstanceOf
[
T
])
{
None
}
else
{
Some
(
fieldValue
.
asInstanceOf
[
T
])
}
}
}
}
}
def
hDel
(
key
:
String
,
field
:
String
)
:
Task
[
Unit
]
=
{
key
.
synchronized
{
ZIO
.
effect
{
val
hashMap
=
hashCache
.
getIfPresent
(
key
)
if
(
hashMap
==
null
||
hashMap
.
isEmpty
)
{
()
}
else
{
hashMap
.
remove
(
field
)
hashCache
.
put
(
key
,
new
ConcurrentHashMap
(
hashMap
))
Some
(
fieldValue
.
asInstanceOf
[
T
])
}
}
}
...
...
@@ -90,17 +74,15 @@ object ZCaffeine {
}
def
hSet
(
key
:
String
,
field
:
String
,
value
:
Any
)
:
Task
[
Unit
]
=
{
key
.
synchronized
{
ZIO
.
effect
{
val
hashMap
=
hashCache
.
getIfPresent
(
key
)
if
(
hashMap
==
null
||
hashMap
.
isEmpty
)
{
val
chm
=
new
ConcurrentHashMap
[
String
,
Any
]()
chm
.
put
(
field
,
value
)
hashCache
.
put
(
key
,
chm
)
}
else
{
hashMap
.
put
(
field
,
value
)
hashCache
.
put
(
key
,
new
ConcurrentHashMap
(
hashMap
))
}
ZIO
.
effect
{
val
hashMap
=
hashCache
.
getIfPresent
(
key
)
if
(
hashMap
==
null
||
hashMap
.
isEmpty
)
{
val
chm
=
new
ConcurrentHashMap
[
String
,
Any
]()
chm
.
put
(
field
,
value
)
hashCache
.
put
(
key
,
chm
)
}
else
{
hashMap
.
put
(
field
,
value
)
hashCache
.
put
(
key
,
new
ConcurrentHashMap
(
hashMap
))
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录