对象
Objects
Redisson 对象的单个实例被序列化并存储在任何支持 Redisson 的可用 Redis 节点中。这些对象可以分布在群集中的多个节点上,并且可以由单个应用程序或多个应用程序/服务器访问。这些分布式对象遵循 java.util.concurrent.atomic 软件包中的规范。它们支持对 Redis 中存储的对象进行无锁,线程安全和原子操作。由于在另一个应用程序读取对象时不会更新值,因此可以确保应用程序/服务器之间的数据一致性。Redisson 对象绑定到 Redis keys,我们可以通过 RKeys 接口管理这些密钥,并使用这些键访问我们的 Redisson 对象。
RKeys keys = client.getKeys();
Iterable<String> allKeys = keys.getKeys();
Iterable<String> keysByPattern = keys.getKeysByPattern('key*');
RKeys 接口还允许删除键,按模式删除键以及其他可用于管理键和对象的基于键的有用操作。Redisson 提供的分布式对象包括:
- ObjectHolder
- BinaryStreamHolder
- GeospatialHolder
- BitSet
- AtomicLong
- AtomicDouble
- Topic
- BloomFilter
- HyperLogLog
Object Holder
由 RBucket 类表示,此对象可以保存任何类型的对象。该对象的最大大小为 512MB:
RBucket<Ledger> bucket = client.getBucket("ledger");
bucket.set(new Ledger());
Ledger ledger = bucket.get();
RBucket 对象可以对其持有的对象执行原子操作,例如 compareAndSet 和 getAndSet。
AtomicLong
该对象由 RAtomicLong 类表示,非常类似于 java.util.concurrent.atomic.AtomicLong 类,并表示可以通过原子方式更新的长值:
RAtomicLong atomicLong = client.getAtomicLong("myAtomicLong");
atomicLong.set(5);
atomicLong.incrementAndGet();
Topic
Topic 对象支持 Redis 的“发布和订阅”机制。收听已发布的消息:
RTopic<CustomMessage> subscribeTopic = client.getTopic("wx");
subscribeTopic.addListener(
(channel, customMessage)
-> future.complete(customMessage.getMessage()));
这里注册了 Topic 以收听来自 wx 频道的消息。然后,我们向该 Topic 添加一个侦听器,以处理来自该通道的传入消息。我们可以将多个侦听器添加到一个频道。让我们将消息发布到 wx 通道:
RTopic<CustomMessage> publishTopic = client.getTopic("baeldung");
long clientsReceivedMessage
= publishTopic.publish(new CustomMessage("This is a message"));
这可以从另一个应用程序或服务器发布。CustomMessage 对象将由侦听器接收,并按 onMessage 方法中的定义进行处理。