相关文章推荐
性感的黄瓜  ·  Using API method ...·  1 年前    · 
正直的铁链  ·  node 编程中怎么利用进程通信实现 ...·  2 年前    · 
卖萌的饼干  ·  Ruby版本更新,jenkins打包失败 - 掘金·  3 年前    · 
发怒的莲藕  ·  同时安装一个包的多个版本 - 小猪冒泡 - 博客园·  3 年前    · 
路过的茴香  ·  Oops!!! - 简书·  3 年前    · 
Code  ›  redisson应用之分布式对象开发者社区
分布式架构 分布式开发 分布式技术 redisson
https://cloud.tencent.com/developer/article/2360273
小胡子的大葱
2 年前
kl博主
0 篇文章

redisson应用之分布式对象

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
kl博主
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > kl的专栏 > redisson应用之分布式对象

redisson应用之分布式对象

作者头像
kl博主
发布 于 2023-11-18 09:53:37
92 0
发布 于 2023-11-18 09:53:37
举报

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 条评论
热度
最新
登录 后参与评论
关于作者
kl博主
凯京科技架构组经理
0
文章
0
累计阅读量
0
获赞
前往专栏
领券
  • 社区

    • 专栏文章
    • 阅读清单
    • 互动问答
    • 技术沙龙
    • 技术视频
    • 团队主页
    • 腾讯云TI平台
  • 活动

    • 自媒体分享计划
    • 邀请作者入驻
    • 自荐上首页
    • 技术竞赛
  • 资源

    • 技术周刊
    • 社区标签
    • 开发者手册
    • 开发者实验室
  • 关于

    • 社区规范
    • 免责声明
    • 联系我们
    • 友情链接

腾讯云开发者

扫码关注腾讯云开发者

扫码关注腾讯云开发者

领取腾讯云代金券

热门产品

  • 域名注册
  • 云服务器
  • 区块链服务
  • 消息队列
  • 网络加速
  • 云数据库
  • 域名解析
  • 云存储
  • 视频直播

热门推荐

  • 人脸识别
  • 腾讯会议
  • 企业云
  • CDN加速
  • 视频通话
  • 图像分析
  • MySQL 数据库
  • SSL 证书
  • 语音识别

更多推荐

  • 数据安全
  • 负载均衡
  • 短信
  • 文字识别
  • 云点播
  • 商标注册
  • 小程序开发
  • 网站监控
  • 数据迁移

Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有

深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569

腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287

问题归档 专栏文章 快讯文章归档 关键词归档 开发者手册归档 开发者手册 Section 归档

Copyright © 2013 - 2023 Tencent Cloud.

All Rights Reserved. 腾讯云 版权所有

登录 后参与评论
 
推荐文章
性感的黄瓜  ·  Using API method IRPApplication.openProject() results in project opening and then closing.
1 年前
正直的铁链  ·  node 编程中怎么利用进程通信实现 Cluster 共享内存? - 知乎
2 年前
卖萌的饼干  ·  Ruby版本更新,jenkins打包失败 - 掘金
3 年前
发怒的莲藕  ·  同时安装一个包的多个版本 - 小猪冒泡 - 博客园
3 年前
路过的茴香  ·  Oops!!! - 简书
3 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号