其它特性
操作节点
Redisson NodesGroup 对象提供了对 Redis 节点的一些控制:
NodesGroup nodesGroup = redisson.getNodesGroup();nodesGroup.addConnectionListener(new ConnectionListener() {public void onConnect(InetSocketAddress addr) {// Redis server connected}public void onDisconnect(InetSocketAddress addr) {// Redis server disconnected}});
允许给单个或所有 Redis 服务器发送 ping 请求:
NodesGroup nodesGroup = redisson.getNodesGroup();Collection<Node> allNodes = nodesGroup.getNodes();for (Node n : allNodes) {n.ping();}// ornodesGroup.pingAll();
执行批量命令
通过 RBatch 对象可以将多个命令汇总到一个网络调用中一次性发送并执行。
通过这个对象你可以一组命令的执行时间。
在 Redis 中这种方式称为 Pipeling。
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();
脚本
redisson.getBucket("foo").set("bar");String r = redisson.getScript().eval(Mode.READ_ONLY,"return redis.call('get', 'foo')", RScript.ReturnType.VALUE);// do the same using cacheRScript s = redisson.getScript();// load script into cache to all redis master instancesString res = s.scriptLoad("return redis.call('get', 'foo')");// res == 282297a0228f48cd3fc6a55de6316f31422f5d17// call script by sha digestFuture<Object> r1 = redisson.getScript().evalShaAsync(Mode.READ_ONLY,"282297a0228f48cd3fc6a55de6316f31422f5d17",RScript.ReturnType.VALUE, Collections.emptyList());
Spring Cache 集成
Redisson 完全支持 Spring Cache 抽象.
每个 Cache 实例具有两个重要参数: ttl 和 maxIdleTime,
且在它们没有定义或者等于 0 时会永久存储。
配置示例:
@Configuration@ComponentScan@EnableCachingpublic static class Application {@Bean(destroyMethod="shutdown")RedissonClient redisson() throws IOException {Config config = new Config();config.useClusterServers().addNodeAddress("127.0.0.1:7004", "127.0.0.1:7001");return Redisson.create(config);}@BeanCacheManager cacheManager(RedissonClient redissonClient) {Map<String, CacheConfig> config = new HashMap<String, CacheConfig>();config.put("testMap", new CacheConfig(24*60*1000, 12*60*1000));return new RedissonSpringCacheManager(redissonClient, config);}}
Cache 配置也可以从 JSON 或 YAML 配置文件中读取:
@Configuration@ComponentScan@EnableCachingpublic static class Application {@Bean(destroyMethod="shutdown")RedissonClient redisson(@Value("classpath:/redisson.json") Resource configFile) throws IOException {Config config = Config.fromJSON(configFile.getInputStream());return Redisson.create(config);}@BeanCacheManager cacheManager(RedissonClient redissonClient) throws IOException {return new RedissonSpringCacheManager(redissonClient, "classpath:/cache-config.json");}}
底层 Redis 客户端
Redisson 使用高性能异步且无锁的 Redis 客户端。 它支持异步和同步模式。 如果 Redisson 尚不支持,你可以通过它自行执行命令。 当然,在使用底层客户端之前,你可能想在 Redis命令映射 查询一下。
RedisClient client = new RedisClient("localhost", 6379);RedisConnection conn = client.connect();//orFuture<RedisConnection> connFuture = client.connectAsync();conn.sync(StringCodec.INSTANCE, RedisCommands.SET, "test", 0);conn.async(StringCodec.INSTANCE, RedisCommands.GET, "test");conn.sync(RedisCommands.PING);conn.close()// orconn.closeAsync()client.shutdown();// orclient.shutdownAsync();
