Redisson入门教程

  • Redisson入门

    Author:Ricky  Date:2017-04-24

  • Redisson概述

Redisson是架设在Redis基础上的一个Java驻内存数据网格(In-Memory Data Grid)。充分的利用了Redis键值数据库提供的一系列优势,基于Java实用工具包中常用接口,为使用者提供了一系列具有分布式特性的常用工具类。使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间的协作。

地址:https://github.com/redisson/redisson

  • Redisson功能

  • Redisson功能

    • 支持同步/异步/异步流/管道流方式连接
    • 多样化数据序列化
    • 集合数据分片
    • 分布式对象
    • 分布式集合
    • 分布式锁和同步器
    • 分布式服务
    • 独立节点模式
    • 三方框架整合
  • HelloWorld

引入依赖包

<dependency>

<groupId>org.redisson</groupId>

<artifactId>redisson</artifactId>

<version>3.3.2</version>

</dependency>

程序化配置方法

         Config config = new Config();

config.
useSingleServer().setAddress("127.0.0.1:6379");

RedissonClient
redisson = Redisson.create(config);

文件方式配置

Config
config = Config.fromJSON(new File("config-file.json"));

Config
config = Config.fromYAML(new File("config-file.yaml")); RedissonClient
RedissonClient  redisson =
Redisson.create(config);

Spring方式

<redisson:client>

<redisson:single-server
address=“127.0.0.1:6379" />

</redisson:client>

HelloWorld 3

验证是否成功

redisson.getConfig().toJSON().toString()

结果
{"singleServerConfig":{"idleConnectionTimeout":10000,"pingTimeout":1000,"connectTimeout":10000,"timeout":3000,"retryAttempts":3,"retryInterval":1500,"reconnectionTimeout":3000,"failedAttempts":3,"subscriptionsPerConnection":5,"address":"redis://127.0.0.1:6379","subscriptionConnectionMinimumIdleSize":1,"subscriptionConnectionPoolSize":50,"connectionMinimumIdleSize":10,"connectionPoolSize":64,"database":0,"dnsMonitoring":false,"dnsMonitoringInterval":5000},"threads":0,"nettyThreads":0,"codec":{"class":"org.redisson.codec.JsonJacksonCodec"},"codecProvider":{"class":"org.redisson.codec.DefaultCodecProvider"},"resolverProvider":{"class":"org.redisson.liveobject.provider.DefaultResolverProvider"},"redissonReferenceEnabled":true,"useLinuxNativeEpoll":false}

连接方式

RedissonClient
client = Redisson.create(config);

RAtomicLong longObject =
client.getAtomicLong(‘myLong‘);

//
同步执行方式

longObject.compareAndSet(3, 401);

//
异步执行方式

longObject.compareAndSetAsync(3, 401);

RedissonReactiveClient client = Redisson.createReactive(config);
RAtomicLongReactive longObject = client.getAtomicLong(‘myLong‘);

//
异步流执行方式

longObject.compareAndSet(3,
401);

数据序列化

  

集合数据分片

在集群模式下,Redisson为单个Redis集合类型提供了自动分片的功能。

在自动分片功能的帮助下,单个集合拆分以后均匀的分布在整个集群里,而不是被挤在单一一个节点里。

Redisson通过自身的分片算法,将一个大集合拆分为若干个片段(默认231个,分片数量范围是3 - 16834),然后将拆分后的片段均匀的分布到集群里各个节点里,保证每个节点分配到的片段数量大体相同。比如在默认情况下231个片段分到含有4个主节点的集群里,每个主节点将会分配到大约57个片段,同样的道理如果有5个主节点,每个节点会分配到大约46个片段。

目前支持的数据结构类型包括SetMap.

分布式对象

通用对象桶(Object
Bucket

二进制流(Binary
Stream

地理空间对象桶(Geospatial
Bucket

 BitSet

原子整长形(AtomicLong

原子双精度浮点数(AtomicDouble

话题(订阅分发)

布隆过滤器(Bloom
Filter

基数估计算法(HyperLogLog

示例

通用桶对象

RBucket<AnyObject>
bucket = redisson.getBucket("anyObject"); bucket.set(new AnyObject(1));

AnyObject
obj = bucket.get();

原子整长型

RAtomicLong
atomicLong = redisson.getAtomicLong("myAtomicLong");
atomicLong.set(3);

atomicLong.incrementAndGet();

atomicLong.get();

分布式集合

映射(Map

多值映射(Multimap

集(Set

有序集(SortedSet

计分排序集(ScoredSortedSet

字典排序集(LexSortedSet

列表(List

列队(Queue

双端队列(Deque

阻塞队列(Blocking
Queue

有界阻塞列队(Bounded
Blocking Queue

 阻塞双端列队(Blocking Deque

阻塞公平列队(Blocking
Fair Queue

延迟列队(Delayed
Queue

 优先队列(Priority Queue

优先双端队列(Priority
Deque

分布式集合

示例

         Map

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");

         Set

         RSet<SomeObject> set = redisson.getSet("anySet");

set.add(new
SomeObject());

set.remove(new
SomeObject());

分布式锁

可重入锁(Reentrant
Lock

公平锁(Fair Lock

联锁(MultiLock

红锁(RedLock

读写锁(ReadWriteLock

信号量(Semaphore

可过期性信号量(PermitExpirableSemaphore

闭锁(CountDownLatch

示例

RLock
lock = redisson.getLock("anyLock");

//
最常见的使用方法

lock.lock();

//
支持过期解锁功能
10秒钟以后自动解锁

// 无需调用unlock方法手动解锁

lock.lock(10,
TimeUnit.SECONDS);

//
尝试加锁,最多等待100秒,上锁以后10秒自动解锁
boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS);
lock.unlock();

分布式服务

分布式远程服务(Remote
Service

分布式实时对象(Live
Object
)服务

分布式执行服务(Executor
Service

分布式调度任务服务(Scheduler
Service

分布式映射归纳服务(MapReduce

服务端(远端)实例

RRemoteService remoteService = redisson.getRemoteService();

SomeServiceImpl someServiceImpl = new SomeServiceImpl();

// 在调用远程方法以前,应该首先注册远程服务

// 只注册了一个服务端工作者实例,只能同时执行一个并发调用

remoteService.register(SomeServiceInterface.class, someServiceImpl);

// 注册了12个服务端工作者实例,可以同时执行12个并发调用

remoteService.register(SomeServiceInterface.class,
someServiceImpl, 12);

客户端(本地)实例

RRemoteService
remoteService = redisson.getRemoteService();

SomeServiceInterface
service = remoteService.get(SomeServiceInterface.class);

String
result = service.doSomeStuff(1L, "secondParam", new AnyParam());

独立节点模式

Redisson Node指的是Redisson在分布式运算环境中作为独立节点运行的一种模式。Redisson Node的功能可以用来执行通过分布式执行服务分布式调度执行服务发送的远程任务,也可以用来为分布式远程服务提供远端服务。

依赖redisson-all.jar

独立节点模式-配置

// Redisson程序化配置代码

Config config = ...

// Redisson Node 程序化配置方法

RedissonNodeConfig nodeConfig = new RedissonNodeConfig(config);

Map<String, Integer> workers = new HashMap<String,
Integer>();

workers.put("test", 1);

nodeConfig.setExecutorServiceWorkers(workers);

// 创建一个Redisson Node实例

RedissonNode node = RedissonNode.create(nodeConfig);

// 或者通过指定的Redisson实例创建Redisson Node实例

RedissonNode node = RedissonNode.create(nodeConfig, redisson);

node.start();

node.shutdown();

三方框架整合

Spring框架整合

Spring Cache整合

Hibernate整合

 Tomcat会话管理器(Tomcat Session Manager

Spring Session会话管理器

三方框架-Spring整合

基本配置:

<redisson:client
id="myRedisson"> <redisson:single-server
address="127.0.0.1:6379"/> </redisson:client>

完全配置:

参照附件:Redisson说明文档.pdf

    • 三方框架-Spring调用

@Service

public class RedissonUtils2 implements InitializingBean {

@Autowired

private RedissonClient
redissonClient;

public void afterPropertiesSet()
throws Exception {

Redisson redisson= (Redisson)
redissonClient;

RAtomicDouble dd=
redissonClient.getAtomicDouble("tt");

dd.set(1.22);

System.out.println("bean初始化后置方法"+redisson.getConfig().toJSON().toString());

}

}

总结

Redisson是redis分布式方向落地的产品,不仅开源免费,而且内置分布式锁,分布式服务等诸多功能,是基于redis实现分布式的最佳选择。

时间: 2024-11-05 13:40:38

Redisson入门教程的相关文章

&lt;zz&gt;bower入门教程

from http://www.cnblogs.com/xiaokai0203/p/5891927.html bower入门教程 什么是bower Bower是一个客户端技术的软件包管理器,它可用于搜索.安装和卸载如JavaScript.HTML.CSS之类的网络资源.其他一些建立在Bower基础之上的开发工具,如YeoMan和Grunt,这个会在以后的文章中介绍. 准备工作 安装node环境:node.js 安装Git,bower从远程git仓库获取代码包:git简易指南 安装bower 使用

【转载】GBDT(MART) 迭代决策树入门教程 | 简介

      转载地址:http://blog.csdn.net/w28971023/article/details/8240756        GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案.它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法.近些年更因为被用于搜索排

SEO学习步骤总结入门教程

在这里,简单的把SEO的学习步骤说了一下,今天我们一起来把SEO学习步骤每一步的主要内容拿出来重点强调一下并做个总结.  定位好网站内容以后把你所想做排名的关键词定位好,关键词里包括了主关键词和长尾关键词.这里重点强调了不可以忽略长尾关键词的作用.  对于一个好的网站结构可以让搜索引擎蜘蛛顺利的抓取我网站的内容,进而达到被收录的目的.比较有利于蜘蛛抓取的网站结构,一般来说,收录数量相对来说会比较多.,只有让搜索引擎收录你网站页面那搜索引擎才会释放出来,这样网站关键词才可能有排名.  这里重点要注

Android基础入门教程——10.12 传感器专题(3)——加速度-陀螺仪传感器

Android基础入门教程--10.12 传感器专题(3)--加速度/陀螺仪传感器 标签(空格分隔): Android基础入门教程 本节引言: 本节继续来扣Android中的传感器,本节带来的是加速度传感器(Accelerometer sensor)以及 陀螺仪传感器(Gyroscope sensor),和上一节的方向传感器一样有着x,y,z 三个轴, 还是要说一点:x,y轴的坐标要和绘图那里的x,y轴区分开来!传感器的是以左下角 为原点的!x向右,y向上!好的,带着我们的套路来学本节的传感器吧

Android基础入门教程——8.1.3 Android中的13种Drawable小结 Part 3

Android基础入门教程--8.1.3 Android中的13种Drawable小结 Part 3 标签(空格分隔): Android基础入门教程 本节引言: 本节我们来把剩下的四种Drawable也学完,他们分别是: LayerDrawable,TransitionDrawable,LevelListDrawable和StateListDrawable, 依旧贴下13种Drawable的导图: 1.LayerDrawable 层图形对象,包含一个Drawable数组,然后按照数组对应的顺序来

Android基础入门教程——8.1.2 Android中的13种Drawable小结 Part 2

Android基础入门教程--8.1.2 Android中的13种Drawable小结 Part 2 标签(空格分隔): Android基础入门教程 本节引言: 本节我们继续来学习Android中的Drawable资源,上一节我们学习了: ColorDrawable:NinePatchDrawable: ShapeDrawable:GradientDrawable!这四个Drawable~ 而本节我们继续来学习接下来的五个Drawable,他们分别是: BitmapDrawable:Insert

Android基础入门教程——2.3.12 Date &amp; Time组件(下)

Android基础入门教程--2.3.12 Date & Time组件(下) 标签(空格分隔): Android基础入门教程 本节引言: 本节我们来继续学习Android系统给我们提供的几个原生的Date & Time组件,他们分别是: DatePicker(日期选择器),TimePicker(时间选择器),CalendarView(日期视图),好吧, 其实一开始让我扣这几个玩意我是拒绝的,因为在我的印象里,他们是这样的: 简直把我丑哭了,有木有,终于知道为什么那么多人喜欢自定义这种类型的

Android基础入门教程——2.1 View与ViewGroup的概念

Android基础入门教程--2.1 View与ViewGroup的概念 标签(空格分隔): Android基础入门教程 本节引言: 告别了第一章,迎来第二章--Android中的UI(User Interface)组件的详解, 而本节我们要学习的是所有控件的父类View和ViewGroup类!突发奇想,直接翻译官方文档对 这两个东西的介绍吧,对了,天朝原因,google上不去,Android developer上不去,我们可以 改hosts或者用vpn代理,当然也可以像笔者一样使用国内的API

[EA]入门教程

一.简介 生命周期软件设计方案--Enterprise Architect是以目标为导向的软件系统.它覆盖了系统开发的整个周期,除了开发类模型之外,还包括事务进程分析,使用案例需求,动态模型,组件和布局,系统管理,非功能需求,用户界面设计,测试和维护等.为整个团队提供高级的UML 2.0建模工具. EA为用户提供一个高性能.直观的工作界面,联合UML 2.0最新规范,为桌面电脑工作人员.开发和应用团队打造先进的软件建模方案.该产品不仅特性丰富,而且性价比极高,可以用来配备您的整个工作团队,包括分