提交 ae21715e 编写于 作者: 小傅哥's avatar 小傅哥

feat:Redis

上级 cb0f96d9
<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
...@@ -16,7 +16,7 @@ import org.springframework.context.annotation.Configuration; ...@@ -16,7 +16,7 @@ import org.springframework.context.annotation.Configuration;
/** /**
* @author Fuzhengwei bugstack.cn @小傅哥 * @author Fuzhengwei bugstack.cn @小傅哥
* @description Redis 客户端,使用 Redisson <a href="https://github.com/redisson/redisson">Redisson</a> * @description Redis 客户端,使用 Redisson <a href="https://github.com/redisson/redisson">Redisson</a>
* @create 2023-09-03 16:51 * @create 2023-09-09 16:51
*/ */
@Configuration @Configuration
@EnableConfigurationProperties(RedisClientConfigProperties.class) @EnableConfigurationProperties(RedisClientConfigProperties.class)
...@@ -40,19 +40,21 @@ public class RedisClientConfig { ...@@ -40,19 +40,21 @@ public class RedisClientConfig {
.setPingConnectionInterval(properties.getPingInterval()) .setPingConnectionInterval(properties.getPingInterval())
.setKeepAlive(properties.isKeepAlive()) .setKeepAlive(properties.isKeepAlive())
; ;
RedissonClient redissonClient = Redisson.create(config); RedissonClient redissonClient = Redisson.create(config);
// 添加监听
String[] beanNamesForType = applicationContext.getBeanNamesForType(MessageListener.class); String[] beanNamesForType = applicationContext.getBeanNamesForType(MessageListener.class);
for (String beanName : beanNamesForType) { for (String beanName : beanNamesForType) {
MessageListener bean = applicationContext.getBean(beanName, MessageListener.class); MessageListener bean = applicationContext.getBean(beanName, MessageListener.class);
Class<?> beanClass = bean.getClass();
Class<? extends MessageListener> beanClass = bean.getClass();
if (beanClass.isAnnotationPresent(RedisTopic.class)) { if (beanClass.isAnnotationPresent(RedisTopic.class)) {
RedisTopic redisTopic = beanClass.getAnnotation(RedisTopic.class); RedisTopic redisTopic = beanClass.getAnnotation(RedisTopic.class);
RTopic topic = redissonClient.getTopic(redisTopic.topic()); RTopic topic = redissonClient.getTopic(redisTopic.topic());
topic.addListener(String.class, bean); topic.addListener(String.class, bean);
// 动态创建 bean 对象,注入到 spring 容器,bean 的名称为 redisTopic,对象为 RTopic
ConfigurableListableBeanFactory beanFactory = applicationContext.getBeanFactory(); ConfigurableListableBeanFactory beanFactory = applicationContext.getBeanFactory();
beanFactory.registerSingleton(redisTopic.topic(), topic); beanFactory.registerSingleton(redisTopic.topic(), topic);
} }
......
...@@ -52,13 +52,12 @@ public class OrderRepository implements IOrderRepository { ...@@ -52,13 +52,12 @@ public class OrderRepository implements IOrderRepository {
@Override @Override
public String createOrderByNoLock(OrderAggregate orderAggregate) { public String createOrderByNoLock(OrderAggregate orderAggregate) {
UserEntity userEntity = orderAggregate.getUserEntity();
SKUEntity skuEntity = orderAggregate.getSkuEntity(); SKUEntity skuEntity = orderAggregate.getSkuEntity();
// 模拟锁商品库存 // 模拟锁商品库存
long decrCount = redissonService.decr(skuEntity.getSku()); long decrCount = redissonService.decr(skuEntity.getSku());
if (decrCount < 0) return "已无库存[初始化的库存和使用库存,保持一致。orderService.initSkuCount(\"13811216\", 10000);]"; 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); RLock lock = redissonService.getLock(lockKey);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册