redisson笔记
简介
Redisson - 是一个高级的分布式协调Redis客服端,能帮助用户在分布式环境中轻松实现一些Java的对象 (Bloom filter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap, List, ListMultimap, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, ReadWriteLock, AtomicLong, CountDownLatch, Publish / Subscribe, HyperLogLog)。
支持Redis多种连接模式
集群模式
Config config = new Config(); config.useClusterServers()
.setScanInterval(2000)
// cluster state scan interval in milliseconds
.addNodeAddress("127.0.0.1:7000", "127.0.0.1:7001")
.addNodeAddress("127.0.0.1:7002");
RedissonClient redisson = Redisson.create(config);
单例模式
// connects to 127.0.0.1:6379 by default
RedissonClient redisson = Redisson.create();
Config config = new Config();
config.useSingleServer().setAddress("myredisserver:6379");
RedissonClient redisson = Redisson.create(config);
哨兵模式
Config config = new Config();
config.useSentinelServers() .setMasterName("mymaster") .addSentinelAddress("127.0.0.1:26389", "127.0.0.1:26379") .addSentinelAddress("127.0.0.1:26319");
RedissonClient redisson = Redisson.create(config);
主从模式
Config config = new Config();
config.useMasterSlaveServers() .setMasterAddress("127.0.0.1:6379") .addSlaveAddress("127.0.0.1:6389", "127.0.0.1:6332", "127.0.0.1:6419") .addSlaveAddress("127.0.0.1:6399");
RedissonClient redisson = Redisson.create(config);
操作执行
Redisson支持自动重试策略,默认是重试3次,间隔为1000ms。除了支持同步操作外,还支持异步方式和响应方式。
RedissonClient client = Redisson.create(config);
RAtomicLong longObject = client.getAtomicLong('myLong'); // sync way
longObject.compareAndSet(3, 401); // async way
longObject.compareAndSetAsync(3, 401);
RedissonReactiveClient client = Redisson.createReactive(config);
RAtomicLongReactive longObject = client.getAtomicLong('myLong'); // reactive way
longObject.compareAndSet(3, 401);
多种序列号方式
Codec class name Description
org.redisson.codec.JsonJacksonCodec Jackson JSON codec. Default codec
org.redisson.codec.CborJacksonCodec CBOR binary json codec
org.redisson.codec.MsgPackJacksonCodec MsgPack binary json codec
org.redisson.codec.KryoCodec Kryo binary codec
org.redisson.codec.SerializationCodec JDK Serialization codec
org.redisson.codec.FstCodec FST up to 10 times faster and 100% JDK Serialization compatible codec
org.redisson.codec.LZ4Codec LZ4 compression codec
org.redisson.codec.SnappyCodec Snappy compression codec
org.redisson.client.codec.StringCodec String codec
org.redisson.client.codec.LongCodec Long codec
分布式对象
分布式Object
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));
分布式BitSet
RBitSet set = redisson.getBitSet("simpleBitset");
set.set(0, true);
set.set(1812, false);
set.clear(0);
set.addAsync("e");
set.xor("anotherBitset");
分布式Lock
Redisson redisson = Redisson.create(); RLock lock = redisson.getLock("anyLock"); // Most familiar locking method lock.lock(); // Lock time-to-live support // releases lock automatically after 10 seconds // if unlock method not invoked lock.lock(10, TimeUnit.SECONDS); // Wait for 100 seconds and automatically unlock it after 10 seconds boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS); ... lock.unlock();
分布式MultiLock
RLock lock1 = redissonInstance1.getLock("lock1");
RLock lock2 = redissonInstance2.getLock("lock2");
RLock lock3 = redissonInstance3.getLock("lock3");
RedissonMultiLock lock = new RedissonMultiLock(lock1, lock2, lock3);
lock.lock();
分布式ReadWriteLock
RReadWriteLock rwlock = redisson.getLock("anyRWLock"); // Most familiar locking method
rwlock.readLock().lock(); // or rwlock.writeLock().lock(); // Lock time-to-live support // releases lock automatically after 10 seconds // if unlock method not invoked
rwlock.readLock().lock(10, TimeUnit.SECONDS); // or rwlock.writeLock().lock(10, TimeUnit.SECONDS); // Wait for 100 seconds and automatically unlock it after 10 seconds
boolean res = rwlock.readLock().tryLock(100, 10, TimeUnit.SECONDS); // or boolean res = rwlock.writeLock().tryLock(100, 10, TimeUnit.SECONDS); ...
lock.unlock();
分布式Semaphore
RSemaphore semaphore = redisson.getSemaphore("semaphore");
semaphore.acquire();
semaphore.acquire(23);
semaphore.tryAcquire();
semaphore.tryAcquire(23, TimeUnit.SECONDS);
semaphore.release(10);
semaphore.release();
分布式AtomicLong
RAtomicLong atomicLong = redisson.getAtomicLong("myAtomicLong");
atomicLong.set(3);
atomicLong.incrementAndGet();
atomicLong.get();
分布式AtomicDouble
RAtomicDouble atomicDouble = redisson.getAtomicDouble("myAtomicDouble");
atomicDouble.set(2.81);
atomicDouble.addAndGet(4.11);
atomicDouble.get();
分布式CountDownLatch
RCountDownLatch latch = redisson.getCountDownLatch("anyCountDownLatch");
latch.trySetCount(1);
latch.await(); // in other thread or other JVM
RCountDownLatch latch = redisson.getCountDownLatch("anyCountDownLatch");
latch.countDown();
Topic
RTopic<SomeObject> topic = redisson.getTopic("anyTopic");
topic.addListener(
new MessageListener<SomeObject>() {
@Override
public void onMessage(String channel, SomeObject message)
{ //... } }); // in other thread or JVM
RTopic<SomeObject> topic = redisson.getTopic("anyTopic");
long clientsReceivedMessage = topic.publish(new SomeObject());
Topic patttern
// subscribe to all topics by `topic1.*` pattern
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(); }
});
分布式集合
分布式Map
除此之外,还支持Multimap,这里不列出
RMap<String, SomeObject> map = redisson.getMap("anyMap"); SomeObject prevObject = map.put("123", new SomeObject()); SomeObject currentObject = map.putIfAbsent("323", new SomeObject()); SomeObject obj = map.remove("123"); map.fastPut("321", new SomeObject()); map.fastRemove("321"); Future<SomeObject> putAsyncFuture = map.putAsync("321"); Future<Void> fastPutAsyncFuture = map.fastPutAsync("321"); map.fastPutAsync("321", new SomeObject()); map.fastRemoveAsync("321");
Map eviction
现在Redis没有过期清空Map中的某个entry的功能,只能是清空Map所有的entry。Redission提供了这种功能。
RMapCache<String, SomeObject> map = redisson.getMapCache("anyMap"); // ttl = 10 minutes, map.put("key1", new SomeObject(), 10, TimeUnit.MINUTES); // ttl = 10 minutes, maxIdleTime = 10 seconds map.put("key1", new SomeObject(), 10, TimeUnit.MINUTES, 10, TimeUnit.SECONDS); // ttl = 3 seconds map.putIfAbsent("key2", new SomeObject(), 3, TimeUnit.SECONDS); // ttl = 40 seconds, maxIdleTime = 10 seconds map.putIfAbsent("key2", new SomeObject(), 40, TimeUnit.SECONDS, 10, TimeUnit.SECONDS);
分布式Set
RSet<SomeObject> set = redisson.getSet("anySet"); set.add(new SomeObject()); set.remove(new SomeObject());
除此之外还有,还支持Set eviction, SortedSet, ScoredSortedSet, LexSortedSet
分布式List
RList<SomeObject> list = redisson.getList("anyList"); list.add(new SomeObject()); list.get(0); list.remove(new SomeObject());
分布式Blocking Queue
RBlockingQueue<SomeObject> queue = redisson.getBlockingQueue("anyQueue"); queue.offer(new SomeObject()); SomeObject obj = queue.peek(); SomeObject someObj = queue.poll(); SomeObject ob = queue.poll(10, TimeUnit.MINUTES);
除此之外,还支持Queue, Deque, Blocking Deque
其他功能
执行批量命令
RBatch batch = redisson.createBatch(); batch.getMap("test").fastPutAsync("1", "2"); batch.getMap("test").fastPutAsync("2", "3"); batch.getMap("test").putAsync("2", "5"); batch.getAtomicLongAsync("counter").incrementAndGetAsync(); batch.getAtomicLongAsync("counter").incrementAndGetAsync(); List<?> res = batch.execute();
http://blog.csdn.net/csujiangyu/article/details/51005342
转载于:https://www.cnblogs.com/tietazhan/p/6307304.html
redisson笔记相关推荐
- 【RuoYi-Vue-Plus】问题笔记 07 - V3.5.0 Redisson 报错 Unable to send PING command over channel
文章目录 前言 参考目录 问题说明 问题解决方法 前言 最近找了一下终于解决了 Redisson 的 RedisTimeoutException 报错问题,在此记录一下. 参考目录 Redisson ...
- 【RuoYi-Vue-Plus】学习笔记 46 - Redisson(十二)布隆过滤器 BloomFilter 简单分析
文章目录 前言 参考目录 测试方法 配置说明 Demo 方法 功能调用流程分析 1.布隆过滤器的初始化 `tryInit` 1.1.创建布隆过滤器 1.2.初始化布隆过滤器 1.2.1.计算 bit ...
- redisson的锁的类型_再有人问你分布式锁是什么,就把这个丢给他!
[小宅按]现在面试都会聊聊分布式系统,通常面试官都会从服务框架(Spring Cloud.Dubbo),一路聊到分布式事务.分布式锁.ZooKeeper 等知识.今天就来聊聊分布式锁这块的知识,先具体 ...
- 【Redis笔记】缓存穿透与缓存击穿以及应对方法
[Redis笔记]缓存穿透与缓存击穿以及应对方法 一.缓存穿透 1. 缓存穿透概念 2. 缓存穿透解决方法 示例代码 二.缓存击穿 1. 缓存击穿概念 2. 缓存击穿解决方法 方法一:互斥锁 示例代码 ...
- Redis 进阶笔记
文章目录 第一部分 Redis 快速实战 第一节 缓存原理与设计 1.1 缓存基本思想 1.11 缓存的使用场景 1.12 什么是缓存? 1.13 大型网站中缓存的使用 1.2 常见缓存的分类 1.2 ...
- SpringBoot整合Redis实现优惠券秒杀服务(笔记+优化思路版)
本文属于看黑马的redis的学习笔记,记录了思路和优化流程,精简版最终版请点击这里查看. 文章目录 一.全局ID生成器 1.1 理论 1.1.1 全局唯一ID生成策略 1.2 代码(Redis自增) ...
- 黑马Redis学习笔记 (基础篇+实战篇)
目录 **一.初始Redis** **1.1SQL 和 NoSql的区别** **1.1.1结构化和非结构化** **1.1.2关联和非关联** **1.1.3查询方式** **1.1.4 事务** ...
- 初级Java学习笔记总结
java高并发解决方案: 1.页面静态:静态访问消耗的资源少 信息录入然后生成静态页面以供访问 2.数据库集群和库表散列 主-从数据库关 ...
- Redis 分布式锁笔记
Redis 分布式锁笔记 (公众号:水滴与银弹)深度剖析:Redis分布式锁到底安全吗? 一.初识分布式锁 1.什么是分布式锁 分布式环境下,我们在写多线程程序时,避免同时操作一个共享变量产生数据 ...
最新文章
- 聚集索引:SQL Server 进阶 Level 3
- 一天搞定CSS:边框border--02
- Jenkins邮件配置,实现邮件发送策略(可实现每个Job对应不同的发送邮箱)
- MapReduce 2 中一些基础数据类型
- linux安装pip
- Spring官方推荐的@Transactional还能导致生产事故?
- php筛选怎么做,thinkphp条件筛选 例子
- 上海工程技术大学c语言商店存货管理系统,商店存货管理系统解决方案.doc
- maven+Tomcat热部署
- java 因数分解_Java--分解质因数
- linux apache找不到woff2,IIS Web部署: svg/woff/woff2字体找不到
- html如何引入lrc文件,lrc文件怎么打开?lrc是什么文件?
- linux u盘启动系统教程视频教程,如何用u盘启动linux系统教程
- 《图解TCP/IP》——第一章 网络基础知识
- 雅利安人有多强悍?灭掉三个文明古国,为何败在殷商的脚下
- 用Java语句判断一个数字是不是7的倍数
- SM敏捷实践经验总结
- 2023移动光猫H2-2超级密码获取教程(可改桥接)
- Unity帧同步和状态同步
- 简单演示Exploit SEH原理(未开启SafeSEH模块)
热门文章
- python使用ssh 中文_使用Python进行SSH的最简单方法是什么?
- mysql5.6 主从_mysql5.6 主从配置
- 常用的 iptables配置脚本
- IE安全增强性无法禁用的处理过程
- ORM框架之Mybatis(二)数据库连接池、事务及动态SQL
- 转载linux ip命令新手入门
- 如何在 OpenResty 中使用 websocket
- Intellij IDEA 添加jar包的三种方式
- C语言程序设计孙鸿飞PPT,清华大学出版社-图书详情-《C语言程序设计》
- c语言中转义字符efg,c语言的转义字符与空白符