- 7.3. 集(Set)
- 7.3.1. 集(Set)淘汰机制(Eviction)
- 7.3.2. 集(Set)数据分片(Sharding)
7.3. 集(Set)
基于Redis的Redisson的分布式Set结构的RSet
Java对象实现了java.util.Set
接口。通过元素的相互状态比较保证了每个元素的唯一性。该对象的最大容量受Redis限制,最大元素数量是4 294 967 295
个。
RSet<SomeObject> set = redisson.getSet("anySet");
set.add(new SomeObject());
set.remove(new SomeObject());
Redisson PRO版本中的Set对象还可以在Redis集群环境下支持单集合数据分片。
7.3.1. 集(Set)淘汰机制(Eviction)
基于Redis的Redisson的分布式RSetCache
Java对象在基于RSet
的前提下实现了针对单个元素的淘汰机制。由于RSetCache
是基于RSet
实现的,使它还集成了java.util.Set
接口。
目前的Redis自身并不支持Set当中的元素淘汰,因此所有过期元素都是通过org.redisson.EvictionScheduler
实例来实现定期清理的。为了保证资源的有效利用,每次运行最多清理100个过期元素。任务的启动时间将根据上次实际清理数量自动调整,间隔时间趋于1秒到2小时之间。比如该次清理时删除了100条元素,那么下次执行清理的时间将在1秒以后(最小间隔时间)。一旦该次清理数量少于上次清理数量,时间间隔将增加1.5倍。
RSetCache<SomeObject> set = redisson.getSetCache("anySet");
// ttl = 10 seconds
set.add(new SomeObject(), 10, TimeUnit.SECONDS);
7.3.2. 集(Set)数据分片(Sharding)
Set数据分片是Redis集群模式下的一个功能。Redisson提供的分布式RClusteredSet
Java对象也是基于RSet
实现的。在这里可以获取更多的信息。
RClusteredSet<SomeObject> set = redisson.getClusteredSet("anySet");
set.add(new SomeObject());
set.remove(new SomeObject());
除了RClusteredSet
以外,Redisson还提供了另一种集群模式下的分布式集(Set),它不仅提供了透明的数据分片功能,还为每个元素提供了淘汰机制。RClusteredSetCache
类分别同时提供了RClusteredSet
和RSetCache
这两个接口的实现。当然这些都是基于java.util.Set
的接口实现上的。
该功能仅限于Redisson PRO版本。