作者:聂勇 欢迎转载,请保留作者信息并说明文章来源!
前一篇文章《Redis命令指南》讲解了通过命令行的方式执行Key=>的存储操作,在实际的项目开发中,各种语言是使用Redis的客户端库来与Redis交互。针对Java语言,Redis官方推荐Jedis。
Jedis提供了多种操作方式:单机单连接方式、单机连接池方式、多机分布式+连接池方式。
预备
- jedis-2.5.2
- commons-pool2-2.2.jar
使用单连接
此方式仅建议用于开发环境做调试用。
1 2 3 4 5 6 7 8 9 10 11 12
| String host = "192.168.56.102"; int port = 6379; Jedis client = new Jedis(host, port); String result = client.set("key-string", "Hello, Redis!"); System.out.println( String.format("set指令执行结果:%s", result) ); String value = client.get("key-string"); System.out.println( String.format("get指令执行结果:%s", value) );
|
运行上述代码,控制台输出:
set指令执行结果:OK
get指令执行结果:Hello, Redis!
使用连接池
此方式适用于仅使用单个Redis实例的场景。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| JedisPoolConfig config = new JedisPoolConfig(); config.setMaxIdle(10); config.setMaxTotal(30); config.setMaxWaitMillis(3*1000); JedisPool pool = new JedisPool(config, "192.168.56.102", 6379); Jedis client = pool.getResource(); try { String result = client.set("key-string", "Hello, Redis!"); System.out.println( String.format("set指令执行结果:%s", result) ); String value = client.get("key-string"); System.out.println( String.format("get指令执行结果:%s", value) ); } catch (Exception e) { } finally { if (null != client) { pool.returnResource(client); } } pool.destroy();
|
运行上述代码,控制台输出:
set指令执行结果:OK
get指令执行结果:Hello, Redis!
使用连接池+分布式
在规模较大的系统中,往往会有多个Redis实例做负载均衡。并且还实现主从备份,当主实例发生故障时,切换至从实例提供服务。
类似于Memcached的客户端,Jedis也提供了客户端分布式操作的方式,采用一致性哈希算法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>(); shards.add( new JedisShardInfo("127.0.0.1", 6379) ); shards.add( new JedisShardInfo("192.168.56.102", 6379) ); JedisPoolConfig config = new JedisPoolConfig(); config.setMaxIdle(10); config.setMaxTotal(30); config.setMaxWaitMillis(3*1000); ShardedJedisPool pool = new ShardedJedisPool(config, shards); ShardedJedis client = pool.getResource(); try { String result = client.set("key-string", "Hello, Redis!"); System.out.println( String.format("set指令执行结果:%s", result) ); String value = client.get("key-string"); System.out.println( String.format("get指令执行结果:%s", value) ); } catch (Exception e) { } finally { if (null != client) { pool.returnResource(client); } } pool.destroy();
|
运行上述代码,控制台输出:
set指令执行结果:OK
get指令执行结果:Hello, Redis!