博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redisson官方文档 - 10. 额外功能
阅读量:6535 次
发布时间:2019-06-24

本文共 3304 字,大约阅读时间需要 11 分钟。

10.1. 对Redis节点的操作

Redisson的NodesGroup对象提供了许些对Redis节点的操作。

NodesGroup nodesGroup = redisson.getNodesGroup();nodesGroup.addConnectionListener(new ConnectionListener() {    public void onConnect(InetSocketAddress addr) {       // Redis节点连接成功    }    public void onDisconnect(InetSocketAddress addr) {       // Redis节点连接断开    }});

也可以用来PING单个Redis节点或全部节点。

NodesGroup nodesGroup = redisson.getNodesGroup();Collection
allNodes = nodesGroup.getNodes();for (Node n : allNodes) { n.ping();}// 或者nodesGroup.pingAll();

10.2. 复杂多维对象结构和对象引用的支持

Redisson突破了Redis数据结构维度的限制,通过一个特殊引用对象的帮助,Redisson允许以任意的组合方式构建多维度的复杂对象结构,实现了对象之间的类似传统数据库里的关联关系。使用范例如下:

RMap
, RList
> map = redisson.getMap("myMap");RSet
set = redisson.getSet("mySet");RList
list = redisson.getList("myList");map.put(set, list);// 在特殊引用对象的帮助下,我们甚至可以构建一个循环引用,这是通过普通序列化方式实现不了的。set.add(list);list.add(map);

可能您已经注意到了,在map包含的元素发生改变以后,我们无需再次“保存/持久”这些对象。因为map对象所记录的并不是序列化以后的值,而是元素对象的引用。这让Redisson提供的对象在使用方法上,与普通Java对象的使用方法一致。从而让Redis成为内存的一部分,而不仅仅是一个储存空间。

以上范例中,一共创建了三个Redis数据结构:一个Redis HASH,一个Redis SET和一个Redis LIST。

10.3. 命令的批量执行

多个连续命令可以通过RBatch对象在一次网络会话请求里合并发送,这样省去了产生多个请求消耗的时间和资源。这在Redis中叫做。

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();// 原子化(事务)批量执行所有的命令batch.atomic();// 告知Redis不用返回结果(可以减少网络用量)batch.skipResult();// 将写入操作同步到从节点// 同步到2个从节点,等待时间为1秒钟batch.syncSlaves(2, 1, TimeUnit.SECONDS)// 处理结果超时为2秒钟batch.timeout(2, TimeUnit.SECONDS);// 命令重试等待间隔时间为2秒钟batch.retryInterval(2, TimeUnit.SECONDS);// 命令重试次数,仅适用于未发送成功的命令batch.retryAttempts(4);BatchResult res = batch.execute();// 或者Future
asyncRes = batch.executeAsync();

在集群模式下,所有的命令会按各个槽所在的节点,筛选分配到各个节点并同时发送。每个节点返回的结果将会汇总到最终的结果列表里。

10.4. 脚本执行

redisson.getBucket("foo").set("bar");String r = redisson.getScript().eval(Mode.READ_ONLY,   "return redis.call('get', 'foo')", RScript.ReturnType.VALUE);// 通过预存的脚本进行同样的操作RScript s = redisson.getScript();// 首先将脚本保存到所有的Redis主节点String res = s.scriptLoad("return redis.call('get', 'foo')");// 返回值 res == 282297a0228f48cd3fc6a55de6316f31422f5d17// 再通过SHA值调用脚本Future r1 = redisson.getScript().evalShaAsync(Mode.READ_ONLY,   "282297a0228f48cd3fc6a55de6316f31422f5d17",   RScript.ReturnType.VALUE, Collections.emptyList());

10.5. 底层Redis客户端

Redisson在底层采用了高性能异步非阻塞式Java客户端,它同时支持异步和同步两种通信模式。如果有哪些命令Redisson还没提供支持,也可以直接通过调用底层Redis客户端来实现。Redisson支持的命令在里做了详细对比参照。

// 在使用多个客户端的情况下可以共享同一个EventLoopGroupEventLoopGroup group = new NioEventLoopGroup();RedisClientConfig config = new RedisClientConfig();config.setAddress("redis://localhost:6379") // 或者用rediss://使用加密连接      .setPassword("myPassword")      .setDatabase(0)      .setClientName("myClient")      .setGroup(group);RedisClient client = RedisClient.create(config);RedisConnection conn = client.connect();// 或RFuture
connFuture = client.connectAsync();conn.sync(StringCodec.INSTANCE, RedisCommands.SET, "test", 0);// 或conn.async(StringCodec.INSTANCE, RedisCommands.GET, "test");conn.close()// 或conn.closeAsync()client.shutdown();// 或client.shutdownAsync();

转载地址:http://ikkdo.baihongyu.com/

你可能感兴趣的文章
UVA 1419 - Ugly Windows
查看>>
linux.net Jexus web server运行于多进程模式时需要注意的事项
查看>>
SQL SERVER的锁机制(四)——概述(各种事务隔离级别发生的影响)
查看>>
通用用户权限管理系统组件V3.8功能改进说明 - 审批流程菜单的隐藏
查看>>
SSIS学习视频(SQL Server 2008)
查看>>
报表数据源[置顶] 精通BIRT:Eclipse商务智能报表工具开发实践指南
查看>>
Android实现下载图片并保存到SD卡中
查看>>
方法多维数据仓库(八):数据仓库中数据库设计的基本模型
查看>>
介绍生成PHP网站页面静态化的方法
查看>>
session连接SecureCRT的详细安装及使用教程
查看>>
7.3 Hardware Prefetching 《Speculative Execution in High Performance Computer Architectures》
查看>>
设计时(Design-Time)
查看>>
【Android】Parse 开发笔记(4)—— Push Notifications(上)
查看>>
利用CSS3制作淡入淡出动画效果
查看>>
mysql存储过程之游标遍历数据表
查看>>
HTTP 状态代码
查看>>
div文字超出
查看>>
oracle存储过程异常捕获
查看>>
how to use perf
查看>>
HDU 1079 Calendar Game(简单博弈)
查看>>