文章目录

  • 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从入门到精通系列文章



java redisTemplateredis多个数据源_分布式锁

1. 前言

在我们的上一篇文章中,我们介绍了 Redisson 的相关概念 历史背景,发展现状。现在我们已经准备好进一步深入了解 Redisson基础概念,并了解它如何以及在哪些场景中提供出色、可靠的性能。在本篇文章中, 我们将 进一步理解和使用 Redisson,这是一种为 Java 提供的高级 Redis 客户端。
上一章内容 《【实践篇】Redis最强Java客户端(一)之Redisson入门介绍》

2. Redisson基础概念

java redisTemplateredis多个数据源_分布式锁_02

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。
  1. RBucket: RBucket 用于对单一值进行缓存,代替 Java 中的 AtomicReference。在分布式环境中,提供了对单一值的持久化存储和原子操作。例如:
RBucket<String> bucket = redisson.getBucket("bucket");
bucket.set("redisson");
String value = bucket.get();
  1. 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");
  1. RList: RList 用于有序存储多个元素,并可能存储重复元素,代替 Java 中的 ArrayList。实现了分布式环境下的可变数组,支持正向和反向遍历。例如:
RList<Integer> list = redisson.getList("list");
list.add(1);
list.add(2);
list.add(3);
Integer secondElement = list.get(1);
  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);
  1. RSortedSet: RSortedSet 用于有序存储元素,并能根据元素的自然顺序或自定义比较器进行排序,代替 Java 中的 TreeSet。在分布式环境下,实现了有序集合,支持快速地获取有序集中的最大或最小元素。例如:
RSortedSet<Integer> sortedSet = redisson.getSortedSet("sortedSet");
sortedSet.add(3);
sortedSet.add(1);
sortedSet.add(2);
Integer firstElement = sortedSet.first();
  1. RQueue: RQueue 用于多个元素按一定顺序进行存储,并按该顺序进行检索,代替 Java 中的 Queue。在分布式环境中,提供了队列实现,尤其有利于实现生产者-消费者模型。例如:
RQueue<Integer> queue = redisson.getQueue("queue");
queue.add(1);
Integer item = queue.poll();
  1. RDeque: RDeque 用于需要从两端插入或删除元素的数据结构,代替 Java 中的 LinkedList。在分布式环境中,提供了双端队列实现,支持从头部或尾部插入和删除元素。例如:
RDeque<Integer> deque = redisson.getDeque("deque");
deque.addFirst(1);
deque.addLast(2);
Integer firstElement = deque.getFirst();
Integer lastElement = deque.getLast();
  1. 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. 参考资料

  1. Redisson官方网站:https://redisson.org/
  2. Redisson GitHub仓库:https://github.com/redisson/redisson
  3. redisson 参考文档 https://redisson.org/documentation.html

4. 源码地址

https://github.com/wangshuai67/icepip-springboot-action-exampleshttps://github.com/wangshuai67/Redis-Tutorial-2023