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();
}
}
}