Java连接Redis数据库类
package cn.mldn.mldnspring.util.dbc; // Java Redis import redis.clients.jedis.Jedis; public class RedisConnectionUtil { private static final String REDIS_HOST = "localhost" ; // 主机名称 private static final int REDIS_PORT = 6379 ; // 端口名称 private static final String REDIS_AUTH = "123456" ; // 密码 private Jedis jedis ; // 这个对象主要就是连接对象信息 public RedisConnectionUtil() { // 构造方法之中进行数据库的连接 this.jedis = new Jedis(REDIS_HOST,REDIS_PORT) ; // 输入主机和端口 this.jedis.auth(REDIS_AUTH) ; // 认证信息 } public void close() { // 关闭连接 this.jedis.close(); } public Jedis getConnection() { return this.jedis ; } }
测试类
package cn.mldn.mldnspring.test; import org.junit.Test; import cn.mldn.mldnspring.util.dbc.RedisConnectionUtil; import redis.clients.jedis.Jedis; import java.util.concurrent.TimeUnit; public class TestRedisConnection { public static Jedis jedis = null ; // 保存Jedis连接 @Test public void testConnection() { RedisConnectionUtil rcu = new RedisConnectionUtil() ; Jedis jedis = rcu.getConnection() ; // 获得连接信息 System.out.println(jedis); // 输出对象,不为null表示连接成功 jedis.close(); } static { RedisConnectionUtil rcu = new RedisConnectionUtil() ; jedis = rcu.getConnection() ; // 获取Jedis连接对象 } @Test public void testStringData() throws Exception { jedis.set("key01", "val01") ; jedis.set("mldn", "Java") ; // 设置数据 jedis.setex("mldn-message",3, "helloworld") ; // 设置数据,3秒后失效 TimeUnit.SECONDS.sleep(4); // 延迟4秒执行 System.err.println(jedis.get("mldn")); // 可以获取数据 System.err.println(jedis.get("mldn-message")); // 无法获取数据 System.err.println(jedis.get("key01")); } @Test public void testHashData() throws Exception { jedis.hset("user-mldn", "name", "李兴华") ; // 设置hash数据与属性KEY jedis.hset("user-mldn", "age", String.valueOf(18)) ; // 设置hash数据与属性KEY jedis.hset("user-mldn", "sex", "男") ; // 设置hash数据与属性KEY System.err.println(jedis.hget("user-mldn", "name")); // 获取指定属性KEY数据 } @Test public void testListData() throws Exception { jedis.flushDB() ; // 清空数据库 jedis.lpush("user-mldn", "mldnjava","jixianit") ; // 设置数据 jedis.rpush("user-mldn", "hello","world") ; // 设置数据 System.out.println(jedis.rpop("user-mldn")); // 从队列头部弹出一个数据 System.out.println(jedis.rpop("user-mldn")); // 从队列头部弹出一个数据 System.out.println(jedis.lpop("user-mldn")); // 从队列尾部弹出一个数据 System.out.println(jedis.lpop("user-mldn")); // 从队列尾部弹出一个数据 } @Test public void testListDataGet() throws Exception { jedis.flushDB() ; // 清空数据库 jedis.lpush("user-mldn", "mldnjava","jixianit") ; // 设置数据 jedis.rpush("user-mldn", "hello","world") ; // 设置数据 List<String> all = jedis.lrange("user-mldn", 0, -1) ; all.forEach((data)->{System.out.println(data) ;}); // 迭代输出 } @Test public void testSetData() throws Exception { jedis.flushDB() ; // 清空数据库 jedis.sadd("user-admin", "a", "b", "c", "d", "e"); // 设置数据 jedis.sadd("user-mldn", "a", "c", "e", "x", "y", "z"); // 设置数据 Set<String> all = jedis.sinter("user-admin","user-mldn") ; // 交集计算 all.forEach((data)->{System.out.println(data) ;}); // 迭代输出 } @Test public void testZSetData() throws Exception { jedis.flushDB() ; // 清空数据库 Map<String,Double> map = new HashMap<String,Double>() ; // 设置Map集合保存数据 map.put("pid-1-1", 2.0) ; // 保存数据与分数 map.put("pid-1-2", 1.0) ; // 保存数据与分数 map.put("pid-2-1", 5.0) ; // 保存数据与分数 jedis.zadd("user-mldn", map) ; // 将数据保存到Redis之中 // 根据分数范围获取全部数据内容与分数,此时利用Tuple保存每一组结果 Set<Tuple> all = jedis.zrangeByScoreWithScores("user-mldn", 1.0, 5.0) ; all.forEach((data) -> { System.out.println("元素名称:" + data.getElement() + "、分数:" + data.getScore()); // 输出数据 }); // 迭代输出 } @Test public void testGEOData() throws Exception { jedis.flushDB() ; // 清空数据库 Map<String,GeoCoordinate> pointsMap = new HashMap<String,GeoCoordinate>() ; // 保存坐标 pointsMap.put("天安门",new GeoCoordinate(116.403963, 39.915119)) ; // 添加坐标 pointsMap.put("王府井",new GeoCoordinate(116.417876, 39.915411)) ; // 添加坐标 pointsMap.put("前门大街",new GeoCoordinate(116.404354, 39.904748)) ; // 添加坐标 jedis.geoadd("point", pointsMap) ; // 保存坐标信息 // 查找距离当前坐标周围1000M的建筑物信息 List<GeoRadiusResponse> georadius = jedis.georadius("point", 116.415901, 39.914805, 1000, GeoUnit.M,GeoRadiusParam.geoRadiusParam().withDist()); georadius.forEach((geoData)->{ System.out.println("建筑物名称:" + geoData.getMemberByString() + "、距离:" + geoData.getDistance()); }); // 迭代输出 } }
连接池
package cn.mldn.mldnspring.util.dbc; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class RedisConnectionUtil { private static final String REDIS_HOST = "localhost" ; // 主机名称 private static final int REDIS_PORT = 6379 ; // 端口名称 private static final String REDIS_AUTH = "123456" ; // 认证信息 private static final int TIMEOUT = 2000 ; // 连接超时时间 private static final int MAX_TOTAL = 200 ; // 最多允许200个的连接 private static final int MAX_IDLE = 20 ; // 没有访问时的最小维持数量 private static final int MAX_WAIT_MILLIS = 1000 ; // 最大等待时间 private static final boolean TEST_ON_BORROW = true ; // 是否要进行连接测试 private JedisPool pool = null ; // 连接池对象 public RedisConnectionUtil() { // 构造方法连接数据库 // 如果要想使用连接池进行控制,那么一定需要进行连接池的相关配置 JedisPoolConfig config = new JedisPoolConfig() ; // 进行连接池配置 config.setMaxTotal(MAX_TOTAL); // 最大连接数 config.setMaxIdle(MAX_IDLE); // 最小维持连接数 config.setMaxWaitMillis(MAX_WAIT_MILLIS); // 最大等待时间 config.setTestOnBorrow(TEST_ON_BORROW); // 测试通过后返回可用连接 this.pool = new JedisPool(config,REDIS_HOST,REDIS_PORT,TIMEOUT,REDIS_AUTH) ; } public Jedis getConnection() { return this.pool.getResource() ; // 连接池获取连接 } public void close() { this.pool.close(); // 连接池关闭 } }
哨兵池类
package cn.mldn.mldnspring.util.dbc; import java.util.HashSet; import java.util.Set; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.JedisSentinelPool; public class RedisConnectionUtil { public static final String MASTER_NAME = "mymaster" ; // 定义哨兵的Master配置名称 private static final String REDIS_AUTH = "mldnjava" ; // 认证信息 private static final int MAX_TOTAL = 200 ; // 最多允许200个的连接 private static final int MAX_IDLE = 20 ; // 没有访问时的最小维持数量 private static final int MAX_WAIT_MILLIS = 1000 ; // 最大等待时间 private static final boolean TEST_ON_BORROW = true ; // 是否要进行连接测试 private JedisSentinelPool pool = null ; // 连接池对象 public RedisConnectionUtil() { // 构造方法连接数据库 // 如果要通过哨兵机制进行Redis访问,那么必须要明确的设置出所有可以使用的哨兵的地址与端口 Set<String> sentinels = new HashSet<String>() ; // 设置所有的哨兵的处理地址信息 sentinels.add("redis-master:26379") ; // 哨兵的地址 sentinels.add("redis-slave-a:26380") ; // 哨兵的地址 sentinels.add("redis-slave-b:26381") ; // 哨兵的地址 JedisPoolConfig config = new JedisPoolConfig() ; // 进行连接池配置 config.setMaxTotal(MAX_TOTAL); // 最大连接数 config.setMaxIdle(MAX_IDLE); // 最小维持连接数 config.setMaxWaitMillis(MAX_WAIT_MILLIS); // 最大等待时间 config.setTestOnBorrow(TEST_ON_BORROW); // 测试通过后返回可用连接 this.pool = new JedisSentinelPool(MASTER_NAME, sentinels,config); // 建个哨兵连接池 } public Jedis getConnection() { Jedis jedis = pool.getResource() ; // 通过连接池获取连接对象 jedis.auth(REDIS_AUTH) ; // 设置认证信息 return jedis ; // 返回Jedis对象 } public void close() { this.pool.close(); // 连接池关闭 } }
集群
package cn.mldn.mldnspring.util.dbc; import java.io.IOException; import java.util.HashSet; import java.util.Set; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisCluster; import redis.clients.jedis.JedisPoolConfig; public class RedisConnectionUtil { public static final int TIMEOUT = 1000; // 连接超时时间 public static final int SO_TIMEOUT = 100; // 间隔超时时间 public static final int MAX_ATTEMPTS = 100; // 重试的次数 private static final String REDIS_AUTH = "mldnjava" ; // 认证信息 private static final int MAX_TOTAL = 200 ; // 最多允许200个的连接 private static final int MAX_IDLE = 20 ; // 没有访问时的最小维持数量 private static final int MAX_WAIT_MILLIS = 1000 ; // 最大等待时间 private static final boolean TEST_ON_BORROW = true ; // 是否要进行连接测试 private JedisCluster jedisCluster ; // JedisCluster public RedisConnectionUtil() { // 构造方法连接数据库 JedisPoolConfig config = new JedisPoolConfig() ; // 进行连接池配置 config.setMaxTotal(MAX_TOTAL); // 最大连接数 config.setMaxIdle(MAX_IDLE); // 最小维持连接数 config.setMaxWaitMillis(MAX_WAIT_MILLIS); // 最大等待时间 config.setTestOnBorrow(TEST_ON_BORROW); // 测试通过后返回可用连接 // 定义出所有保存RedisCluster集群主机的集合对象 Set<HostAndPort> allRedisCluster = new HashSet<HostAndPort>(); allRedisCluster.add(new HostAndPort("redis-cluster-a", 6379)); allRedisCluster.add(new HostAndPort("redis-cluster-a", 6380)); allRedisCluster.add(new HostAndPort("redis-cluster-a", 6381)); allRedisCluster.add(new HostAndPort("redis-cluster-b", 6379)); allRedisCluster.add(new HostAndPort("redis-cluster-b", 6380)); allRedisCluster.add(new HostAndPort("redis-cluster-b", 6381)); allRedisCluster.add(new HostAndPort("redis-cluster-c", 6379)); allRedisCluster.add(new HostAndPort("redis-cluster-c", 6380)); allRedisCluster.add(new HostAndPort("redis-cluster-c", 6381)); this.jedisCluster = new JedisCluster(allRedisCluster, TIMEOUT, SO_TIMEOUT, MAX_ATTEMPTS, REDIS_AUTH, config); // 获取RedisCluster连接 } public JedisCluster getConnection() { // 获取JedisCluster return this.jedisCluster ; } public void close() { try { this.jedisCluster.close(); // 连接池关闭 } catch (IOException e) { e.printStackTrace(); } } }