Java教程

Spring与Redis数据库

本文主要是介绍Spring与Redis数据库,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

}

这篇关于Spring与Redis数据库的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!