redisson 應(yīng)用(一)

redisson 是基于redis的擴(kuò)展庫,使得redis除了應(yīng)用于緩存以外,還能做隊(duì)列等數(shù)據(jù)結(jié)構(gòu),直接使用的分布式鎖,以及人物調(diào)度器等。

redisson支持異步API,為了演示方便我這里用同步API。這里初始化一個(gè)單機(jī)的redis連接

        Config config = new Config();
        config.useSingleServer().setPassword("redis123")
                // use "rediss://" for SSL connection
                .setAddress("redis://192.168.0.100:9736");

        RedissonClient redisson = Redisson.create(config);

BitSet

BitSet是一個(gè)bit數(shù)據(jù)集,類似bit數(shù)組,和Set接口沒啥關(guān)系。對于存儲(chǔ)一些需要按位操作的數(shù)據(jù)是很理想的數(shù)據(jù)結(jié)構(gòu)。對應(yīng)于Java中 Java.util.BitSet
在redis中,初始化一個(gè)Bitset

        RBitSet set = redisson.getBitSet("simpleBitset");  // 獲取
        set.set(0, true);  // 設(shè)置某一位
        set.set(1812, false);
        set.clear(0);    //  清除
        set.and("anotherBitset");   // 與操作,參數(shù)為另一個(gè)bitset的key值,
        set.xor("anotherBitset");   //  異或操作

原子性整形和浮點(diǎn)

在分布式系統(tǒng)中,原子性的整形或者浮點(diǎn)的適用性很強(qiáng),redisson提供了直接的API來操作這類數(shù)據(jù)。也支持原子性的CAS操作。

        RAtomicLong atomicLong = redisson.getAtomicLong("myAtomicLong");
        atomicLong.set(3);
        atomicLong.incrementAndGet();
        atomicLong.compareAndSet(4, 2);
        atomicLong.get();
        RAtomicDouble atomicDouble =         
 redisson.getAtomicDouble("myAtomicDouble");
        atomicDouble.set(2.81);
        atomicDouble.addAndGet(4.11);
        atomicDouble.get();

訂閱和發(fā)布消息

RTopic topic = redisson.getTopic("anyTopic");
topic.addListener(SomeObject.class, new MessageListener<SomeObject>() {
    @Override
    public void onMessage(String channel, SomeObject message) {
        //...
    }
});

// 在其他的進(jìn)程或者線程中
RTopic topic = redisson.getTopic("anyTopic");
long clientsReceivedMessage = topic.publish(new SomeObject());

LongAdder

這個(gè)類的功能類似于AtomicLong,但是LongAdder的高并發(fā)時(shí)性能會(huì)好很多,非常適合高并發(fā)時(shí)的計(jì)數(shù)。(DoubleAdder類似)

        RLongAdder longAdder = redisson.getLongAdder("myLongAdder");
        longAdder.add(12);
        longAdder.increment();
        longAdder.decrement();
        longAdder.sum();

RateLimiter

這個(gè)類的目的在于實(shí)現(xiàn)一些速度限制實(shí)現(xiàn)。但是acquire會(huì)阻塞線程,而且不保證公平性。

RRateLimiter limiter = redisson.getRateLimiter("myLimiter");
        limiter.trySetRate(RateType.OVERALL, 5, 2, RateIntervalUnit.SECONDS);
        limiter.acquire(3);

Reliable Topic 可靠的消息訂閱發(fā)布

RIdGenerator Id生成器

這個(gè)Id生成器生成一般情況下遞增的整數(shù)值,效率比較高。

 RIdGenerator generator = redisson.getIdGenerator("generator");
        generator.tryInit(12000000, 20000);
        for(int i = 0; i < 100; i++) {
            long id = generator.nextId();
            LOGGER.debug("id is {}", id);
        }

參考文檔 redisson文檔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容