前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >redisson应用之分布式对象

redisson应用之分布式对象

作者头像
kl博主
发布2023-11-18 09:53:37
1380
发布2023-11-18 09:53:37
举报
文章被收录于专栏:kl的专栏kl的专栏

redisson的分布式对象应用

每个Redisson对象实例都会有一个与之对应的Redis数据实例,可以通过调用getName方法来取得Redis数据实例的名称(key)。

RMap map = redisson.getMap("mymap");

map.getName(); // = mymap

所有与Redis key相关的操作都归纳在RKeys这个接口里:

RKeys keys = redisson.getKeys();

Iterable allKeys = keys.getKeys();

Iterable foundedKeys = keys.getKeysByPattern('key*');

long numOfDeletedKeys = keys.delete("obj1", "obj2", "obj3");

long deletedKeysAmount = keys.deleteByPattern("test?");

String randomKey = keys.randomKey();

long keysAmount = keys.count();

1. 通用对象桶(Object Bucket)

Redisson的分布式RBucketJava对象是一种通用对象桶可以用来存放任类型的对象。

RBucket 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));

2. 二进制流(Binary Stream)

Redisson的分布式RBinaryStream Java对象同时提供了InputStream接口和OutputStream接口的实现。流的最大容量受Redis主节点的内存大小限制。

RBinaryStream stream = redisson.getBinaryStream("anyStream");

byte[] content = ...

stream.set(content);

InputStream is = stream.getInputStream();

byte[] readBuffer = new byte[512];

is.read(readBuffer);

OutputStream os = stream.getOuputStream();

byte[] contentToWrite = ...

os.write(contentToWrite);

3. 地理空间对象桶(Geospatial Bucket)

Redisson的分布式RGeoJava对象是一种专门用来储存与地理位置有关的对象桶。

RGeo 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 positions = geo.pos("test2", "Palermo", "test3", "Catania", "test1");

List cities = geo.radius(15, 37, 200, GeoUnit.KILOMETERS);

Map citiesWithPositions = geo.radiusWithPosition(15, 37, 200, GeoUnit.KILOMETERS);

4. BitSet

Redisson的分布式RBitSetJava对象采用了与java.util.BiteSet类似结构的设计风格。可以理解为它是一个分布式的可伸缩式位向量。需要注意的是RBitSet的大小受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");

5. 原子整长形(AtomicLong)

Redisson的分布式整长形RAtomicLong对象和Java中的java.util.concurrent.atomic.AtomicLong对象类似。

RAtomicLong atomicLong = redisson.getAtomicLong("myAtomicLong");

atomicLong.set(3);

atomicLong.incrementAndGet();

atomicLong.get();

6. 原子双精度浮点数(AtomicDouble)

Redisson还提供了分布式原子双精度浮点数RAtomicDouble,弥补了Java自身的不足。

RAtomicDouble atomicDouble = redisson.getAtomicDouble("myAtomicDouble");

atomicDouble.set(2.81);

atomicDouble.addAndGet(4.11);

atomicDouble.get();

7. 话题(订阅分发)

Redisson的分布式话题RTopic对象实现了发布、订阅的机制。

RTopic topic = redisson.getTopic("anyTopic");

topic.addListener(new MessageListener() {

    @Override

    public void onMessage(String channel, SomeObject message) {

        //...

    }

});

// 在其他线程或JVM节点

RTopic topic = redisson.getTopic("anyTopic");

long clientsReceivedMessage = topic.publish(new SomeObject());

在Redis节点故障转移(主从切换)或断线重连以后,所有的话题监听器将自动完成话题的重新订阅。

7.1. 模糊话题

Redisson的模糊话题RPatternTopic对象可以通过正式表达式来订阅多个话题。

// 订阅所有满足`topic1.*`表达式的话题

RPatternTopic topic1 = redisson.getPatternTopic("topic1.*");

int listenerId = topic1.addListener(new PatternMessageListener() {

    @Override

    public void onMessage(String pattern, String channel, Message msg) {

         Assert.fail();

    }

});

在Redis节点故障转移(主从切换)或断线重连以后,所有的模糊话题监听器将自动完成话题的重新订阅。

8. 布隆过滤器(Bloom Filter)

Redisson利用Redis实现了Java分布式布隆过滤器(Bloom Filter)。

RBloomFilter bloomFilter = redisson.getBloomFilter("sample");

// 初始化布隆过滤器,预计统计元素数量为55000000,期望误差率为0.03

bloomFilter.tryInit(55000000L, 0.03);

bloomFilter.add(new SomeObject("field1Value", "field2Value"));

bloomFilter.add(new SomeObject("field5Value", "field8Value"));

bloomFilter.contains(new SomeObject("field1Value", "field8Value"));

6.9. 基数估计算法(HyperLogLog)

Redisson利用Redis实现了Java分布式基数估计算法(HyperLogLog)对象。

RHyperLogLog log = redisson.getHyperLogLog("log");

log.add(1);

log.add(2);

log.add(3);

log.count();

wiki地址:https://github.com/redisson/redisson/wiki

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-10-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档