Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
KnowledgePlanet
road-map
xfg-dev-tech-redis
提交
ae21715e
xfg-dev-tech-redis
项目概览
KnowledgePlanet
/
road-map
/
xfg-dev-tech-redis
通知
391
Star
25
Fork
8
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
xfg-dev-tech-redis
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
ae21715e
编写于
9月 10, 2023
作者:
小傅哥
⛹
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat:Redis
上级
cb0f96d9
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
8 addition
and
6 deletion
+8
-6
docs/md/xfg-dev-tech-redis.drawio
docs/md/xfg-dev-tech-redis.drawio
+1
-0
xfg-dev-tech-app/src/main/java/cn/bugstack/xfg/dev/tech/config/RedisClientConfig.java
...va/cn/bugstack/xfg/dev/tech/config/RedisClientConfig.java
+6
-4
xfg-dev-tech-infrastructure/src/main/java/cn/bugstack/xfg/dev/tech/infrastructure/persistent/repository/OrderRepository.java
...infrastructure/persistent/repository/OrderRepository.java
+1
-2
未找到文件。
docs/md/xfg-dev-tech-redis.drawio
0 → 100644
浏览文件 @
ae21715e
<mxfile host="Electron" modified="2023-09-07T06:27:50.065Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.2.8 Chrome/102.0.5005.167 Electron/19.0.15 Safari/537.36" etag="6_hHtA2ne9HUHfG0RuAA" version="20.2.8" type="device" pages="3"><diagram id="0jXsAVMNTgzV5WUhXCn8" name="第 1 页">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</diagram><diagram id="IVA9mOBVB3CBnDJQt4Sf" name="第 2 页">5VnbkqM2EP0aPSYlLgLxyM2bpJKqVE2qsvsog2yTxcjB8o49X5+WEAYMM+NJmHic+MVSX4R01KdbCOTE2+Onmu02v4icl8jG+RE5CbJty3Zc+FOSUyPxadAI1nWRNyLcCR6KJ248W+mhyPneyBqRFKKUxW4ozERV8UwOZKyuxePQbCXKfCDYsTUfCR4yVo6lvxe53DTSAONO/gMv1pv2yV6r2bLW2Aj2G5aLx57ISZET10LIprU9xrxU4A1xWTyjPU+s5pW8xiFJdtv0yf/krD7/WcU//vYTW+fftZP7xsqDWbGZrTy1ENTiUOVcjWIhJ3rcFJI/7FimtI+w6SDbyG1p1KuiLGNRihr6lajAKMrZfnN2Z3VmNplCzzyc15Ifn12WdQYLooyLLZf1CUyMg+t9TxofE2HEtlrJY7djxPUb2aa3W4GRMRMk6/PoHY7QMFC+AVZnBCLPIaxMV9RyI9aiYmXaSaMOZgy9zuZnIXYGvD+4lCcDHztIMYSeHwv5WbnD8pvel54mOZqRdefUdipYbs9Jdb/0dZ2b7rV+zfrUol7eNsBAHOqMv4BVy2pWr7l8KVSnw6DmJZPFt+E8Zt9Qa0yT1EMBQRFWDZqgMNWNBQpARRAlKCTzUQnZzopmPMtAvpe1+Mp7miUlLsHz0MnHAzJZbb9HJatNGn0qefidkLcnkAd4Afygwzn1URSjwFGSMEEBnRf51cqeRj73lh7x3gV54t4aee9ektiMyci9MhmRWyYj98pkFEQocnXDU6r7S0bn2P4w2YhMZyOKQoA+UDkpdKey0UJvw0LnKjCGxlQau7+kdblDt89awf8wa/lXZi16y6zlX5u1hiyZkxM54TR3pzhB7aXjzcQJlf4+VtayxjB+UFJ8gPcReiWZLDwdBf/SC0kwQadR3VGVBYSRUoUBiha3jAOrFwVdTLwSB9YgCrqgeCYO9rBtMlT3Puh8/6Bli0Lhazzy1iIXh2XJo1JkXxtFz+weQ0q7wuLYqWewE0Ul972Rf1WCLl+dr6xMvnKci4ukV+zbfNeFczODLrjPS/n78U6vDXeqT2D6zBsms1YPTiwXq8hYiUoOT1rwm6oqkY0xnuksfFlVHHzzquLfS1W5JivMSPf27vp1vns3LSETd7/AoCjUnAIeWSik5iCmSgjRt1vjW4F/wimMKXsbpzAm/ntxyrVvzilvck/+g9ddl9jf/s3RnrrknawxC0UJIAZ1UJSg1NU24dRGEVWNIksZR66WLJQxjfUrD1V0UuNgZT++sXnJnWhaxtrd117jqYIvaNMpVo/fvBrjpG3g3siOnqHdPjTQNqEe2VM3H5GGBU6XVD89iJU21VAooM5z7o8MM9GTBy811UB5NaoQpmS1qsjMuUEs8ttMFOobFx/RQA2lnhXrAfXugFkzMXCEkcNQu7eruOQKxLAcEoKVxbqCdgaxzCH2IxXpRcbK0Ci2RZ435Yzviye21EOppGTOWjAuiRBJ1FhQwfZNMbNGnDK1aOKj2QwMs4cE8yw68V3Mc+0xxWzvzRSDbvcpszn0dR+EnfQv</diagram><diagram id="XzDPbd5d8-1-o6warf8k" name="第 3 页">7Vlbc5s6EP41ekwHEGB4BIPbzrTntM2c6eVNAdmmxcgj5Ft//VkJcQvEdVs7zrQhmbH0SYvFfvutVhjh6Wr/kpP18i1LaY4sI90jHCHLMi1sw4dEDhUy8fwKWPAsrSCjBW6z71Rb1ugmS2mpsQoSjOUiW/fBhBUFTUQPI5yzXX/anOVpD1iTBR0AtwnJh+jHLBXLCvUNo8Vf0WyxrL/ZrUdWpJ6sgXJJUrbrQDhGeMoZE1VrtZ/SXDqv75fZA6PNwjgtxCkG+2L7Jd2R7ea/l+LD+1TMP/H4Buu1iUP9wDSF59ddxsWSLVhB8rhFQ842RUrlXQ3otXPeMLYG0ATwKxXioMkkG8EAWopVrkfpPhOfpPkLR/c+d0aivb6z6hzqTiH4oWMku5+7Y62Z6tV2pSBcBDIQAChYQWtsluV5Y5HWM5KclGWWVKCeIhdWuUn65kHva6hkG57UsyIXR193N7fJPyvyxvr4+qb496aOYsIXVByhxmxiBMRF2YrCY4EdpzkR2ba/DqKjfNHMawMBGjoWfiIu7EFcPLP+KKxbj8T6sUVuSb7R3/SBplkJEIod5HnIc2UjhAZWjSnyZij2kW8jzzwSMtKZu2Um6O2aKDftYLfoh8cc3D5lOePKFpt3xKSWxFkhOvhcXYpOzr7RzohhuHEwa1jbUi7o/jhvQz9rA1/nRb1pmY5T9XftFmDWeX3ZSf+ucSE9To7maR3hzxI9VaIPJ9wTJOpcMzEPJYriCfJCFEyVRiMUGJdRpNQdpIAR5WEX+zi9iPKsCb6y8rwnq7wzKehXBXxG5VmnlkTGeOycLD1t+o5lsMQm5mzX7QUdnlj9W1QL01b34qlZxq+HmDWiaVBwhPz4scSdOtRL7TFxe9YdBv+cRdy20Xf09dXtjLreM5BnSY/7hqx64pmsdPwAWW4OCwrvoLGQDRS7yJ8oUjwUAkG2RMJA2um5sKrOdJgbKlZtOas+Cp8rQTvyb4xDV10wQniiU5A7LK2q6yJpvFHUj4j2/Uvtm8bvMz2VjD0zfVzTT4DqsRrJUWSpU0sAidWTDAHPkkegCtqWojiSEXE1qkz8uFzZ/olc2c6luBrb+1ylMFMx48ntT2ouVmdO2PuAyZkWqjetT6GGtAIBh8OD0h/D3r2c+gTIw79Lnq3eJYS6uPGdv4Y8x7k6efaQvPveL5dkLZvJhueHkJPkmyzPf0RDn7N5nq1fjRCkDyxncG3zhv2YMPDQtaZxMd+OlZUq1oNAVwTwD8IIzFYGErknjEhtVwD6Sjyhev9W3ScaKUTaI8JEHhGC4dEVnCz6ZJE8WxSSYnA2BV5CSUWWkDzQA6ssTavX/rTMvpM7dSt5/lvL45DynBMiJ5L3gmNtqeU0kJ3m+1Ih4PXlhUdCYGIPY8ByLxUC7mhu9Hy9V+lisiaq2b3aEBhUkLpKbaLD6MTUsCj9S5hvmK6ZN8wXIy9rXess3EO3/cGuOv63P3vi+H8=</diagram></mxfile>
\ No newline at end of file
xfg-dev-tech-app/src/main/java/cn/bugstack/xfg/dev/tech/config/RedisClientConfig.java
浏览文件 @
ae21715e
...
...
@@ -16,7 +16,7 @@ import org.springframework.context.annotation.Configuration;
/**
* @author Fuzhengwei bugstack.cn @小傅哥
* @description Redis 客户端,使用 Redisson <a href="https://github.com/redisson/redisson">Redisson</a>
* @create 2023-09-0
3
16:51
* @create 2023-09-0
9
16:51
*/
@Configuration
@EnableConfigurationProperties
(
RedisClientConfigProperties
.
class
)
...
...
@@ -40,19 +40,21 @@ public class RedisClientConfig {
.
setPingConnectionInterval
(
properties
.
getPingInterval
())
.
setKeepAlive
(
properties
.
isKeepAlive
())
;
RedissonClient
redissonClient
=
Redisson
.
create
(
config
);
// 添加监听
String
[]
beanNamesForType
=
applicationContext
.
getBeanNamesForType
(
MessageListener
.
class
);
for
(
String
beanName
:
beanNamesForType
)
{
MessageListener
bean
=
applicationContext
.
getBean
(
beanName
,
MessageListener
.
class
);
Class
<?>
beanClass
=
bean
.
getClass
();
Class
<?
extends
MessageListener
>
beanClass
=
bean
.
getClass
();
if
(
beanClass
.
isAnnotationPresent
(
RedisTopic
.
class
))
{
RedisTopic
redisTopic
=
beanClass
.
getAnnotation
(
RedisTopic
.
class
);
RTopic
topic
=
redissonClient
.
getTopic
(
redisTopic
.
topic
());
topic
.
addListener
(
String
.
class
,
bean
);
// 动态创建 bean 对象,注入到 spring 容器,bean 的名称为 redisTopic,对象为 RTopic
ConfigurableListableBeanFactory
beanFactory
=
applicationContext
.
getBeanFactory
();
beanFactory
.
registerSingleton
(
redisTopic
.
topic
(),
topic
);
}
...
...
xfg-dev-tech-infrastructure/src/main/java/cn/bugstack/xfg/dev/tech/infrastructure/persistent/repository/OrderRepository.java
浏览文件 @
ae21715e
...
...
@@ -52,13 +52,12 @@ public class OrderRepository implements IOrderRepository {
@Override
public
String
createOrderByNoLock
(
OrderAggregate
orderAggregate
)
{
UserEntity
userEntity
=
orderAggregate
.
getUserEntity
();
SKUEntity
skuEntity
=
orderAggregate
.
getSkuEntity
();
// 模拟锁商品库存
long
decrCount
=
redissonService
.
decr
(
skuEntity
.
getSku
());
if
(
decrCount
<
0
)
return
"已无库存[初始化的库存和使用库存,保持一致。orderService.initSkuCount(\"13811216\", 10000);]"
;
String
lockKey
=
userEntity
.
getUserId
().
concat
(
"_"
).
concat
(
String
.
valueOf
(
decrCount
));
String
lockKey
=
skuEntity
.
getSku
().
concat
(
"_"
).
concat
(
String
.
valueOf
(
decrCount
));
RLock
lock
=
redissonService
.
getLock
(
lockKey
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录