成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

基于Reddsion分布式的鎖實(shí)現(xiàn)

ralap / 1710人閱讀

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

引入依賴
        
            org.redisson
            redisson
            2.10.7
            compile
        
配置redission
@Import(SLockAspect.class) //引入AOP配置
@AutoConfigureAfter(RedisAutoConfiguration.class) // 配置Redis
@EnableConfigurationProperties(value = {SLockConfig.class}) //自動(dòng)注冊配置文件
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 就是一個(gè)一個(gè)注解,基于AOP切面的,SLockConfig.class就是讀入 redission的配置文件

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

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

    /**
     * 鎖類型,默認(rèn)Fair公平鎖
     *
     * @return
     */

    LockType lockType() default LockType.FAIR;


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

    /**
     * 自動(dòng)解鎖時(shí)長,默認(rèn) 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 ;
    }

當(dāng)多線程測試的時(shí)候,下一個(gè)線程總會(huì)等到上一個(gè)線程完成后再繼續(xù)。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/68339.html

相關(guān)文章

  • 基于 Zookeeper 的布式實(shí)現(xiàn)

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

    邱勇 評論0 收藏0
  • 百度社招面試題——如何用Redis實(shí)現(xiàn)布式

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

    YanceyOfficial 評論0 收藏0
  • 基于redis實(shí)現(xiàn)布式鎖思考

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

    Tecode 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<