天天看点

Redisson-分布式对象

作者:臭猪比

每个 Redisson 对象都绑定到一个 Redis 键(即对象名称),且可以通过 getName 方法读取。

RMap map = redissonClient.getMap("myMapObj");//获取redis中key为myMapObj的数据
System.out.println(map.getName()); // 结果为:myMapObj           

所有和 Redis 键相关的操作被抽象到了 RKeys 接口:

RKeys keys = redissonClient.getKeys();//获取key对象
Iterable<String> allKeys = keys.getKeys();//把所有的key转成列表
Iterable<String> foundedKeys = keys.getKeysByPattern("key*");//筛选key中以key开头的数据
long numOfDeletedKeys = keys.delete("obj1", "obj2", "obj3");//通过key列表删除key值
long deletedKeysAmount = keys.deleteByPattern("test?");//通过匹配删除数据
String randomKey = keys.randomKey();//随机获取key
long keysAmount = keys.count();//获取key总数           

Object类型

Redisson 分布式的 RBucket 对象可用作任意类型对象的通用容器。

RBucket<AnyObject> bucket = redisson.getBucket("anyObject");
bucket.set(new AnyObject(1));
AnyObject obj = bucket.get();
bucket.trySet(new AnyObject(3));
bucket.compareAndSet(new AnyObject(4), new AnyObject(5));
bucket.getAndSet(new AnyObject(6));           

地理位置容器

Redisson 分布式的 RGeo 对象 可用作地理位置项的容器。

RGeo<String> geo = redisson.getGeo("test");
geo.add(new GeoEntry(13.361389, 38.115556, "Palermo"), new GeoEntry(15.087269, 37.502669, "Catania"));
geo.addAsync(37.618423, 55.751244, "Moscow");
Double distance = geo.dist("Palermo", "Catania", GeoUnit.METERS);
geo.hashAsync("Palermo", "Catania");
Map<String, GeoPosition> positions = geo.pos("test2", "Palermo", "test3", "Catania", "test1");
List<String> cities = geo.radius(15, 37, 200, GeoUnit.KILOMETERS);
Map<String, GeoPosition> citiesWithPositions = geo.radiusWithPosition(15, 37, 200, GeoUnit.KILOMETERS);           

BitSet

Redisson 分布式的 RBitSet 对象具有类似于 java.util.BitSet 的结构,且表示的位向量会根据需要增长。BitSet 的大小由 Redis 限制为 4 294 967 295

RBitSet set = redisson.getBitSet("simpleBitset");
set.set(0, true);
set.set(1812, false);
set.clear(0);
set.addAsync("e");
set.xor("anotherBitset");           

AtomicLong

Redisson 分布式的 RAtomicLong 对象具有类似于java.util.concurrent.atomic.AtomicLong 对象的结构。

RAtomicLong atomicLong = redisson.getAtomicLong("myAtomicLong");
atomicLong.set(3);
atomicLong.incrementAndGet();
atomicLong.get();           

AtomicDouble

Redisson 分布式的 AtomicDouble 对象.

RAtomicDouble atomicDouble = redisson.getAtomicDouble("myAtomicDouble");
atomicDouble.set(2.81);
atomicDouble.addAndGet(4.11);
atomicDouble.get();           

Topic

Redisson 分布式的 Topic 对象实现了 发布/订阅 机制。

RTopic<SomeObject> topic = redisson.getTopic("anyTopic");
topic.addListener(new MessageListener<SomeObject>() {
    @Override
    public void onMessage(String channel, SomeObject message) {
        //...
    }
});
// in other thread or JVM
RTopic<SomeObject> topic = redisson.getTopic("anyTopic");
long clientsReceivedMessage = topic.publish(new SomeObject());           

Topic 模式

Redisson Topic pattern 对象可通过指定模式订阅到多个 topics。

RPatternTopic<Message> topic1 = redisson.getPatternTopic("topic1.*");
int listenerId = topic1.addListener(new PatternMessageListener<Message>() {
    @Override
    public void onMessage(String pattern, String channel, Message msg) {
         Assert.fail();
    }
});           

Topic 模式监听器在重连到 Redis 服务器或者 Redis 服务器故障恢复时自动重新订阅。

Bloom filter

Redisson 分布式的 Bloom filter 对象。

RBloomFilter<SomeObject> bloomFilter = redisson.getBloomFilter("sample");
bloomFilter.tryInit(55000000L, 0.03);
bloomFilter.add(new SomeObject("field1Value", "field2Value"));
bloomFilter.add(new SomeObject("field5Value", "field8Value"));
bloomFilter.contains(new SomeObject("field1Value", "field8Value"));           

HyperLogLog

Redisson 分布式的 HyperLogLog 对象。

RHyperLogLog<Integer> log = redisson.getHyperLogLog("log");
log.add(1);
log.add(2);
log.add(3);
log.count();           

继续阅读