国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

基于Reddsion分布式的鎖實現

ralap / 1685人閱讀

redission用來做分布式鎖比zookeeper更方便,簡單。

引入依賴
        
            org.redisson
            redisson
            2.10.7
            compile
        
配置redission
@Import(SLockAspect.class) //引入AOP配置
@AutoConfigureAfter(RedisAutoConfiguration.class) // 配置Redis
@EnableConfigurationProperties(value = {SLockConfig.class}) //自動注冊配置文件
public class RedissionAutoConfig {

    @Resource
    private SLockConfig sLockConfig;

    @Bean(destroyMethod = "shutdown")
    @ConditionalOnMissingBean(name = "redission")
    public RedissonClient redission() {
        Config config = new Config();
        config.useSingleServer()
                .setPassword(this.sLockConfig.getPassword())
                .setAddress(this.sLockConfig.getAddress());
        return Redisson.create(config);
    }

    @Bean
    public LockInfoProvider lockInfoProvider() {
        return new LockInfoProvider();
    }

    @Bean
    public SLockFactory sLockFactory() {
        return new SLockFactory();
    }
}

其中 SLockAspect.class 就是一個一個注解,基于AOP切面的,SLockConfig.class就是讀入 redission的配置文件

自主義注解 SLock
@Target(value = {ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface SLock {

    /**
     * 鎖名稱
     *
     * @return
     */
    String name() default "";

    /**
     * 鎖類型,默認Fair公平鎖
     *
     * @return
     */

    LockType lockType() default LockType.FAIR;


    /**
     * 嘗試加鎖等待時長,默認 Long.MIN_VALUE
     *
     * @return
     */
    long waitTime() default Long.MIN_VALUE;

    /**
     * 自動解鎖時長,默認 Long.MIN_VALUE
     *
     * @return
     */
    long releaseTime() default Long.MIN_VALUE;




    enum LockType {


        /**
         * 可重入鎖
         */
        REENTRANT,
        /**
         * 公平鎖
         */
        FAIR,
        /**
         * 讀鎖
         */
        READ,
        /**
         * 寫鎖
         */
        WRITE,
    }
}
測試
    @GetMapping("/{id}")
    @SLock(name = "BB",waitTime = Long.MAX_VALUE, releaseTime = 5)
    public String hello(@PathVariable Long id){
        Long counter = redisTemplate.opsForValue().increment("COUNTER", 1);
        try {
            log.info(id +" locked and begin...");
            Thread.sleep(5000); ////模擬處理過程 do something.
        } catch (Exception ex) {
            log.error("Error occurred");
        } finally {
            log.info(id +" unlocked...");
        }

        return "lock-"  + id ;
    }

當多線程測試的時候,下一個線程總會等到上一個線程完成后再繼續。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/68339.html

相關文章

  • 基于 Zookeeper 的布式實現

    摘要:不過比較膚淺,為了進一步加深對的認識,我利用空閑時間編寫了本篇文章對應的基于的分布式鎖實現。不過我所編寫的分布式鎖還是比較簡陋的,實現的也不夠優美,僅僅是個練習,僅供參考使用。好了,題外話就說到這里,接下來我們就來聊聊基于的分布式鎖實現。 1. 背景 最近在學習 Zookeeper,在剛開始接觸 Zookeeper 的時候,完全不知道 Zookeeper 有什么用。且很多資料都是將 Z...

    邱勇 評論0 收藏0
  • 百度社招面試題——如何用Redis實現布式

    摘要:集群實現分布式鎖上面的討論中我們有一個非常重要的假設是單點的。但是其實這已經超出了實現分布式鎖的范圍,單純用沒有命令來實現生成。這個問題用實現分布式鎖暫時無解。結論并不能實現嚴格意義上的分布式鎖。 關于Redis實現分布式鎖的問題,網絡上很多,但是很多人的討論基本就是把原來博主的貼過來,甚至很多面試官也是一知半解經不起推敲就來面候選人,最近結合我自己的學習和資料查閱,整理一下用Redi...

    YanceyOfficial 評論0 收藏0
  • 基于redis實現布式鎖思考

    摘要:分布式鎖基于實現分布式鎖思考幾個問題鎖為什么不能應用于分布式鎖雖然能夠解決同步問題,但是每次只有一個線程訪問,并且鎖屬于鎖,僅適用于單點部署然而分布式需要部署多臺實例,屬于不同的線程對象使用中實現分布式鎖。分布式鎖基于redis實現分布式鎖思考幾個問題?synchronized鎖為什么不能應用于分布式鎖?synchronized雖然能夠解決同步問題,但是每次只有一個線程訪問,并且synchr...

    Tecode 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<