添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
编程开发秘籍
  • php文档
  • IDEA在线图文教程
  • jenkins使用指南
  • angular范例
  • nodejs开发指南
  • ES开发指南
  • ELK折腾指南
  • 24设计模式&6原则
  • Docker指南
  • kl音乐汇
  • 关于博主
  • kl个人博客 首页 >> 分布式,架构 >>redisson应用之分布式对象

    redisson应用之分布式对象

    redisson应用之分布式对象

    redisson的分布式对象应用 每个Redisson对象实例都会有一个与之对应的Redis数据实例,可以通过调用getName方法来取得Redis数据实例的名称(key)。 RMap map = redisson.getMap("mymap");
    map.getName(); // = mymap
    所有与Redis key相关的操作都归纳在RKeys这个接口里:
    RKeys keys = redisson.getKeys();
    Iterable<String> allKeys = keys.getKeys();
    Iterable<String> 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<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));
    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<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);
    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<SomeObject> topic = redisson.getTopic("anyTopic");
    topic.addListener(new MessageListener<SomeObject>() {
    @Override
    public void onMessage(String channel, SomeObject message) {
    //...
    // 在其他线程或JVM节点
    RTopic<SomeObject> topic = redisson.getTopic("anyTopic");
    long clientsReceivedMessage = topic.publish(new SomeObject());
    在Redis节点故障转移(主从切换)或断线重连以后,所有的话题监听器将自动完成话题的重新订阅。
    7.1. 模糊话题
    Redisson的模糊话题RPatternTopic对象可以通过正式表达式来订阅多个话题。
    // 订阅所有满足`topic1.*`表达式的话题
    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();
    在Redis节点故障转移(主从切换)或断线重连以后,所有的模糊话题监听器将自动完成话题的重新订阅。
    8. 布隆过滤器(Bloom Filter)
    Redisson利用Redis实现了Java分布式布隆过滤器(Bloom Filter)。
    RBloomFilter<SomeObject> 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<Integer> log = redisson.getHyperLogLog("log");
    log.add(1);
    log.add(2);
    log.add(3);
    log.count(); wiki地址: https://github.com/redisson/redisson/wiki

    kl个人博客