星标为推荐客户端
Jedis
https://github.com/xetorthio/jedis
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.3.0</version> </dependency>
Jedis jedis = new Jedis("10.0.16.6",6379); jedis.set("yang","YangHuiSheng"); System.out.println(jedis.get("yang")); jedis.close();
多线程中直接使用会有线程安全问题,需引入连接池
JedisPoolConfig poolConfig = new JedisPoolConfig(); // Redis服务器 // JedisShardInfo shardInfo1 = new JedisShardInfo("10.0.16.6", 6379); JedisShardInfo shardInfo2 = new JedisShardInfo("10.0.16.6", 6379); // 连接池 List<JedisShardInfo> infoList = Arrays.asList(shardInfo2); ShardedJedisPool jedisPool = new ShardedJedisPool(poolConfig, infoList); ShardedJedis jedis = null; try{ jedis = jedisPool.getResource(); for(int i=0; i<100; i++){ jedis.set("k"+i, ""+i); } for(int i=0; i<100; i++){ Client client = jedis.getShard("k"+i).getClient(); System.out.println("取到值:"+jedis.get("k"+i)+","+"当前key位于:" + client.getHost() + ":" + client.getPort()); } }finally{ if(jedis!=null) { jedis.close(); } }
lettuce
可以解决线程安全问题
使用netty实现,支持同步,异步,响应式的模式
SpringBoot2.X版本中默认使用lettuce,2.X版本之前默认使用Jedis
同步执行
// 创建客户端 RedisClient client = RedisClient.create("redis://10.0.16.6:6379"); // 线程安全的长连接,连接丢失会自动重连 StatefulRedisConnection<String, String> connect = client.connect(); // 获取同步执行命令,默认超时时间60秒 RedisCommands<String, String> sync = connect.sync(); sync.set("lettuce:sync","lettuce:sync-111"); String value = sync.get("lettuce:sync"); System.out.println(value); // 关闭连接 connect.close(); // 关闭客户端 client.shutdown();
异步执行
// 创建客户端 RedisClient client = RedisClient.create("redis://10.0.16.6:6379"); // 线程安全的长连接,连接丢失会自动重连 StatefulRedisConnection<String, String> connect = client.connect(); // 获取异步执行api RedisAsyncCommands<String, String> async = connect.async(); async.set("lettuce:async","lettuce:async-111"); // 获取RedisFuture RedisFuture<String> future = async.get("lettuce:async"); try { String value = future.get(); System.out.println(value); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); }
Redisson
https://github.com/redisson/redisson
https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95
基于redis提供分布式和可扩展的java的数据结构
分布式锁
private static RedissonClient redissonClient; static { Config config = new Config(); config.useSingleServer().setAddress("redis://10.0.16.6:6379"); redissonClient = Redisson.create(config); } public static void main(String[] args) throws InterruptedException { RLock lock = redissonClient.getLock("xxxxxxxxxxxxxxxx"); // 最多等待100秒,10秒后自动解锁 if (lock.tryLock(100,10, TimeUnit.SECONDS)) { System.out.println("获取锁成功"); } if (lock.isLocked()) { lock.unlock();; } redissonClient.shutdown(); }