Java连接Redis
1.jedis简介
- Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java、C、C#、C++、
php、Node.js、Go等。 - 在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用
Jedis和Redisson - Jedis同样也是托管在github上,地址:https://github.com/xetorthio/jedis
2.java连接Redis
-
添加依赖
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version> </dependency>
2.1 jedis连接单机版
-
直接连接
@Test public void testJedis() { Jedis jedis = new Jedis("192.168.0.111", 6379); jedis.set("name","zhangsan"); String result = jedis.get("name"); System.out.println(result); jedis.close(); }
-
连接池连接
@Test public void testJedisPool() { JedisPool jedisPool = new JedisPool("192.168.0.111", 6379); Jedis jedis = jedisPool.getResource(); jedis.set("name","zhangsan"); String result = jedis.get("name"); System.out.println(result); jedis.close(); jedisPool.close(); }
2.2 jedis连接哨兵集群(主从复制+哨兵)
-
开启主从复制集群+哨兵
public void testSentinel() { Set<String> sentinelSet = new HashSet<>(); //以下端口是哨兵的端口 sentinelSet.add("192.168.0.111:26379"); sentinelSet.add("192.168.0.111:26380"); sentinelSet.add("192.168.0.111:26381"); //mymaster是master默认的名称 JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinelSet); Jedis jedis = pool.getResource(); jedis.set("name", "jack"); String result = jedis.get("name"); System.out.println(result); jedis.close(); pool.close(); }
2.3 jedis连接集群
-
搭建集群省略。。
public void clusterTest(){ Set<HostAndPort> nodes=new HashSet<>(); nodes.add(new HostAndPort("192.168.0.111",6381)); nodes.add(new HostAndPort("192.168.0.111",6382)); nodes.add(new HostAndPort("192.168.0.111",6383)); nodes.add(new HostAndPort("192.168.0.111",6384)); nodes.add(new HostAndPort("192.168.0.111",6385)); nodes.add(new HostAndPort("192.168.0.111",6386)); JedisCluster jedisCluster = new JedisCluster(nodes); jedisCluster.set("name","smith"); String name = jedisCluster.get("name"); System.out.println(name); jedisCluster.close();//关闭资源 }
3.jedis连接池
-
jedis.properties配置文件
#ip host=192.168.0.102 #端口 port=6379 #池中可借的最大数 maxTotal=50 #允许池中空闲的最大连接数 maxIdle=30 #允许池中空闲的最小连接数 minIdle=10 #获取连接最大等待时间(毫秒) maxWaitMillis=12000 #当 maxActive到达最大数,获取连接时的操作 0.抛异常 1.阻塞等待 2.创建新的 (maxActive将失效) whenExhaustedAction=1 #在创建连接时,是否验证有效性 testOnCreate=true #在获取连接时,是否验证有效性 testOnBorrow=true #在归还连接时,是否验证有效性 testOnReturn=true #当连接空闲时,是否验证有效性 testWhileIdle=false #设定间隔没过多少毫秒进行一次后台连接清理的行动 timeBetweenEvictionRunsMillis=3600000 #每次检查的连接数 numTestsPerEvictionRun=5 #设定在进行后台对象清理时,视休眠时间超过了多少毫秒的对象为过期。过期的对象将被回收。如果这个值不是正数,那么对休眠时间没有特别的约束。 minEvictableIdleTimeMillis=300000 softMinEvictableIdleTimeMillis=300000
-
jedis连接池工具类
/** * JedisPoolUtils工具类的使用 */ public class JedisPoolUtils { /** * JedisPool连接池对象 */ private static JedisPool jedisPool; /** * 初始化连接池 */ static{ InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties"); Properties prop=new Properties(); try { prop.load(is); } catch (Exception e) { e.printStackTrace(); } String host=prop.getProperty("host"); int port=Integer.parseInt(prop.getProperty("port")); int maxTotal=Integer.parseInt(prop.getProperty("maxTotal")); int maxIdle=Integer.parseInt(prop.getProperty("maxIdle")); //连接池配置 JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxTotal(maxTotal); jedisPoolConfig.setMaxIdle(maxIdle); //初始化连接池 jedisPool = new JedisPool(jedisPoolConfig,host,port); } /** * 获取 Jedis连接对象 * @return */ public static Jedis getJedis(){ return jedisPool.getResource(); } /** * 关闭jedis */ public static void closeJedis(Jedis jedis){ if(null!=jedis){ jedis.close(); } } }
-
测试
public void jedisTest(){ Jedis jedis = JedisPoolUtils.getJedis(); jedis.set("id","100"); String id = jedis.get("id"); System.out.println(id); JedisPoolUtils.closeJedis(jedis); }