redisson 是基于redis的扩展库,使得redis除了应用于缓存以外,还能做队列等数据结构,直接使用的分布式锁,以及人物调度器等。
redisson支持异步API,为了演示方便我这里用同步API。这里初始化一个单机的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是一个bit数据集,类似bit数组,和Set接口没啥关系。对于存储一些需要按位操作的数据是很理想的数据结构。对应于Java中 Java.util.BitSet
在redis中,初始化一个Bitset
RBitSet set = redisson.getBitSet("simpleBitset"); // 获取
set.set(0, true); // 设置某一位
set.set(1812, false);
set.clear(0); // 清除
set.and("anotherBitset"); // 与操作,参数为另一个bitset的key值,
set.xor("anotherBitset"); // 异或操作
原子性整形和浮点
在分布式系统中,原子性的整形或者浮点的适用性很强,redisson提供了直接的API来操作这类数据。也支持原子性的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();
订阅和发布消息
RTopic topic = redisson.getTopic("anyTopic");
topic.addListener(SomeObject.class, new MessageListener<SomeObject>() {
@Override
public void onMessage(String channel, SomeObject message) {
//...
}
});
// 在其他的进程或者线程中
RTopic topic = redisson.getTopic("anyTopic");
long clientsReceivedMessage = topic.publish(new SomeObject());
LongAdder
这个类的功能类似于AtomicLong,但是LongAdder的高并发时性能会好很多,非常适合高并发时的计数。(DoubleAdder类似)
RLongAdder longAdder = redisson.getLongAdder("myLongAdder");
longAdder.add(12);
longAdder.increment();
longAdder.decrement();
longAdder.sum();
RateLimiter
这个类的目的在于实现一些速度限制实现。但是acquire会阻塞线程,而且不保证公平性。
RRateLimiter limiter = redisson.getRateLimiter("myLimiter");
limiter.trySetRate(RateType.OVERALL, 5, 2, RateIntervalUnit.SECONDS);
limiter.acquire(3);
Reliable Topic 可靠的消息订阅发布
RIdGenerator Id生成器
这个Id生成器生成一般情况下递增的整数值,效率比较高。
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文档