文章目录
- 1. 前言
- 2. Redisson基础概念
- 2.1 数据结构和并发工具
- 2.1.1 对Redis原生数据类型的封装和使用
- 2.1.2 分布式锁实现和应用
- 2.1.3 分布式集合使用方法
- 2.2 Redisson的高级特性
- 2.2.1 分布式对象实现和使用
- 2.2.2 分布式消息队列实现和使用
- 2.2.3 分布式计数器实现和使用
- 3. 参考资料
- 4. 源码地址
- 5. Redis从入门到精通系列文章
1. 前言
在我们的上一篇文章中,我们介绍了 Redisson 的相关概念 历史背景,发展现状。现在我们已经准备好进一步深入了解 Redisson基础概念,并了解它如何以及在哪些场景中提供出色、可靠的性能。在本篇文章中, 我们将 进一步理解和使用 Redisson,这是一种为 Java 提供的高级 Redis 客户端。
上一章内容 《【实践篇】Redis最强Java客户端(一)之Redisson入门介绍》
2. Redisson基础概念
2.1 数据结构和并发工具
2.1.1 对Redis原生数据类型的封装和使用
Redisson对Redis基本数据类型进行了封装,为Java开发者提供了丰富的数据结构和并发工具。例如:
- RBucket:封装了Redis的string字符串;
- RMap:封装了Redis的HashTable,也即Redis的hash命令;
- RList:封装了Redis的List,实现了List接口;
- RSet:封装了Redis的Set,实现了Set接口;
- RSortedSet:封装了Redis的Zset接口;
- RQueue:封装了Redis的list命令,实现了Queue接口;
- RDeque:封装了Redis的list命令,实现了Deque接口;
- RAtomicLong:封装了Redis的string(字符串),实现了原子性的long。
-
RBucket: RBucket 用于对单一值进行缓存,代替 Java 中的 AtomicReference。在分布式环境中,提供了对单一值的持久化存储和原子操作。例如:
RBucket<String> bucket = redisson.getBucket("bucket"); bucket.set("redisson"); String value = bucket.get();
-
RMap: RMap 用于存储需要多个键值对,代替 Java 中的 HashMap。在分布式环境中,提供了 Map 实现,支持事务和原子操作。例如:
RMap<String, Integer> map = redisson.getMap("map"); map.put("a", 1); map.put("b", 2); Integer bValue = map.get("b");
-
RList: RList 用于有序存储多个元素,并可能存储重复元素,代替 Java 中的 ArrayList。实现了分布式环境下的可变数组,支持正向和反向遍历。例如:
RList<Integer> list = redisson.getList("list"); list.add(1); list.add(2); list.add(3); Integer secondElement = list.get(1);
-
RSet: RSet 用于存储无序且不重复的多个元素,代替 Java 中的 HashSet。在分布式环境中,提供了无序集合的实现,支持常见的集合操作。例如:
RSet<Integer> set = redisson.getSet("set"); set.add(1); set.add(2); set.add(3); boolean containsTwo = set.contains(2);
-
RSortedSet: RSortedSet 用于有序存储元素,并能根据元素的自然顺序或自定义比较器进行排序,代替 Java 中的 TreeSet。在分布式环境下,实现了有序集合,支持快速地获取有序集中的最大或最小元素。例如:
RSortedSet<Integer> sortedSet = redisson.getSortedSet("sortedSet"); sortedSet.add(3); sortedSet.add(1); sortedSet.add(2); Integer firstElement = sortedSet.first();
-
RQueue: RQueue 用于多个元素按一定顺序进行存储,并按该顺序进行检索,代替 Java 中的 Queue。在分布式环境中,提供了队列实现,尤其有利于实现生产者-消费者模型。例如:
RQueue<Integer> queue = redisson.getQueue("queue"); queue.add(1); Integer item = queue.poll();
-
RDeque: RDeque 用于需要从两端插入或删除元素的数据结构,代替 Java 中的 LinkedList。在分布式环境中,提供了双端队列实现,支持从头部或尾部插入和删除元素。例如:
RDeque<Integer> deque = redisson.getDeque("deque"); deque.addFirst(1); deque.addLast(2); Integer firstElement = deque.getFirst(); Integer lastElement = deque.getLast();
-
RAtomicLong: RAtomicLong 用于对单一值进行原子操作,如自增、自减等,代替 Java 中的 AtomicLong。在分布式环境下,进行原子增减操作,避免并发问题。例如:
RAtomicLong atomicLong = redisson.getAtomicLong("atomicLong"); atomicLong.set(1); atomicLong.incrementAndGet(); long atomicLongValue = atomicLong.get();
2.1.2 分布式锁实现和应用
Redisson支持多种分布式锁和同步器,如:RLock,RSemaphore,RCountDownLatch,RReadWriteLock等。这些锁具有超时自动解锁、阻塞等待锁和公平锁等特性。
例如,使用RLock实现分布式锁:
RLock lock = redisson.getLock("anyLock");
lock.lock();
try {// 执行业务代码
} finally {lock.unlock();
}
2.1.3 分布式集合使用方法
Redisson提供了分布式的List、Set、SortedSet、Map和Queue,适用于各种场景。例如,使用RList实现分布式列表:
RList<String> list = redisson.getList("anyList");
list.add("1");
list.add("2");
2.2 Redisson的高级特性
2.2.1 分布式对象实现和使用
Redisson提供了一些分布式对象,如RBloomFilter(布隆过滤器),RHyperLogLog,RLexSortedSet等。例如,使用RBloomFilter实现分布式布隆过滤器:
RBloomFilter<String> bloomFilter = redisson.getBloomFilter("sampleFilter");
bloomFilter.tryInit(10000L, 0.03);
bloomFilter.add("item");
2.2.2 分布式消息队列实现和使用
Redisson支持RQueue、RBlockingQueue、RDelayedQueue等分布式队列和阻塞队列。例如,使用RQueue实现分布式消息队列:
RQueue<String> queue = redisson.getQueue("anyQueue");
queue.offer("item");
String item = queue.poll();
2.2.3 分布式计数器实现和使用
Redisson提供了一些分布式计数器,如RAtomicLong、RAtomicDouble、RCountDownLatch等。例如,使用RAtomicLong实现分布式原子长整数:
RAtomicLong atomicLong = redisson.getAtomicLong("anyLong");
atomicLong.set(3);
atomicLong.incrementAndGet();
3. 参考资料
-
Redisson官方网站:https://redisson.org/
-
Redisson GitHub仓库:https://github.com/redisson/redisson
-
redisson 参考文档 https://redisson.org/documentation.html
4. 源码地址
https://github.com/wangshuai67/icepip-springboot-action-examples
https://github.com/wangshuai67/Redis-Tutorial-2023
5. Redis从入门到精通系列文章
- 《【Redis实践篇】使用Redisson 优雅实现项目实践过程中的5种场景》
- 《Redis使用Lua脚本和Redisson来保证库存扣减中的原子性和一致性》
- 《SpringBoot Redis 使用Lettuce和Jedis配置哨兵模式》
- 《Redis【应用篇】之RedisTemplate基本操作》
- 《Redis 从入门到精通【实践篇】之SpringBoot配置Redis多数据源》
- 《Redis 从入门到精通【进阶篇】之三分钟了解Redis HyperLogLog 数据结构》
- 《Redis 从入门到精通【进阶篇】之三分钟了解Redis地理位置数据结构GeoHash》
- 《Redis 从入门到精通【进阶篇】之高可用哨兵机制(Redis Sentinel)详解》
- 《Redis 从入门到精通【进阶篇】之redis主从复制详解》
- 《Redis 从入门到精通【进阶篇】之Redis事务详解》
- 《Redis从入门到精通【进阶篇】之对象机制详解》
- 《Redis从入门到精通【进阶篇】之消息传递发布订阅模式详解》
- 《Redis从入门到精通【进阶篇】之持久化 AOF详解》
- 《Redis从入门到精通【进阶篇】之持久化RDB详解》
- 《Redis从入门到精通【高阶篇】之底层数据结构字典(Dictionary)详解》
- 《Redis从入门到精通【高阶篇】之底层数据结构快表QuickList详解》
- 《Redis从入门到精通【高阶篇】之底层数据结构简单动态字符串(SDS)详解》
- 《Redis从入门到精通【高阶篇】之底层数据结构压缩列表(ZipList)详解》
- 《Redis从入门到精通【进阶篇】之数据类型Stream详解和使用示例》
大家好,我是冰点,今天的【实践篇】Redis最强Java客户端(二)之Redisson基础概念,全部内容就是这些。如果你有疑问或见解可以在评论区留言。