NoSQL之Redis(五)--- Redis测试以及其与Spring的集成
本文是紧接着上文安装好单机版的redis和rediscluster的之后需要去验证是否安装成功,以及如何和Spring集成到一起。
Jedis是是Redis官方推荐的Java客户端开发包,用于处理redis服务上的缓存数据。笔者用的是Jedis-2.7.2.jar
接着这上文,我们先简单的写一个测试类,测试一下单机版的redis是否已经可用
@Test
public void testJedisSingle() {
// 创建一个jedis的对象。
Jedisjedis= newJedis("192.168.21.225", 6379);
// 调用jedis对象的方法,方法名称和redis的命令一致。
jedis.set("key1", "jedis test");
Stringstring= jedis.get("key1");
System.out.println(string);
// 关闭jedis。每次用完之后都应该关闭jedis
jedis.close();
}
测试结果入下:
在实际的运用过程中,我们基本上不会这样每连接一次redis就去创建一个Jedis对象,而是会在程序加载的时候直接创建一个连接池。测试方法如下
/**
* 使用连接池
*/
@Test
public void testJedisPool() {
// 创建jedis连接池
JedisPoolpool= newJedisPool("192.168.21.225", 6379);
// 从连接池中获得Jedis对象
Jedisjedis= pool.getResource();
Stringstring= jedis.get("key1");
System.out.println(string);
// 关闭jedis对象
jedis.close();
pool.close();
}
运行结果入下:
测试完单机版之后,我们接下来看看如何使用Jedis操作redis集群(本文使用的是伪集群)
@Test
public void testJedisCluster() {
HashSetnodes= newHashSet<>();
nodes.add(new HostAndPort("192.168.21.225",7001));
nodes.add(new HostAndPort("192.168.21.225",7002));
nodes.add(new HostAndPort("192.168.21.225",7003));
nodes.add(new HostAndPort("192.168.21.225",7004));
nodes.add(new HostAndPort("192.168.21.225",7005));
nodes.add(new HostAndPort("192.168.21.225",7006));
JedisClustercluster= newJedisCluster(nodes);
cluster.set("key1", "1000");
Stringstring= cluster.get("key1");
System.out.println(string);
cluster.close();
}
测试结果入下:
通过上面的测试一方面我们知道了如何简单的去操作redis,另一方面也验证在之前介绍的redis的按照是没有问题的。
下面我们看看在spring的配置文件中如何配置redis的参数和Jedis相关的东西。
首先我们看看redis连接池的配置
为了方便笔者直接调用Jedis去操作redis,所以笔者写了一个JedisClient工具类,如下
public interfaceJedisClient {
Stringget(String key);
Stringset(String key,String value);
Stringhget(String hkey,String key);
long hset(String hkey, String key, String value);
long incr(String key);
long expire(String key, int second);
long ttl(String key);
long del(String key);
long hdel(String hkey, String key);
}
由于对单机和集群的redis操作时不一样的,所以实现工具类的时候单机和集群的实现方式是不一样的。
public classJedisClientSingle implements JedisClient{
@Autowired
private JedisPool jedisPool;
@Override
public String get(String key) {
Jedisjedis= jedisPool.getResource();
Stringstring= jedis.get(key);
jedis.close();
return string;
}
@Override
public String set(String key, String value) {
Jedisjedis= jedisPool.getResource();
Stringstring= jedis.set(key, value);
jedis.close();
return string;
}
@Override
public String hget(String hkey, String key) {
Jedisjedis= jedisPool.getResource();
Stringstring= jedis.hget(hkey, key);
jedis.close();
return string;
}
@Override
public long hset(String hkey, String key, String value) {
Jedisjedis= jedisPool.getResource();
Longresult= jedis.hset(hkey, key, value);
jedis.close();
return result;
}
@Override
public long incr(String key) {
Jedisjedis= jedisPool.getResource();
Longresult= jedis.incr(key);
jedis.close();
return result;
}
@Override
public long expire(String key, int second) {
Jedisjedis= jedisPool.getResource();
Longresult= jedis.expire(key, second);
jedis.close();
return result;
}
@Override
public long ttl(String key) {
Jedisjedis= jedisPool.getResource();
Longresult= jedis.ttl(key);
jedis.close();
return result;
}
@Override
public long del(String key) {
Jedis jedis = jedisPool.getResource();
Longresult= jedis.del(key);
jedis.close();
return result;
}
@Override
public long hdel(String hkey, String key) {
Jedisjedis= jedisPool.getResource();
Longresult= jedis.hdel(hkey, key);
jedis.close();
return result;
}
}
public classJedisClientCluster implements JedisClient {
@Autowired
private JedisCluster jedisCluster;
@Override
public String get(String key) {
return jedisCluster.get(key);
}
@Override
public String set(String key, String value) {
return jedisCluster.set(key, value);
}
@Override
public String hget(String hkey, String key) {
return jedisCluster.hget(hkey, key);
}
@Override
public long hset(String hkey, String key, String value) {
return jedisCluster.hset(hkey, key, value);
}
@Override
public long incr(String key) {
return jedisCluster.incr(key);
}
@Override
public long expire(String key, int second) {
return jedisCluster.expire(key, second);
}
@Override
public long ttl(String key) {
return jedisCluster.ttl(key);
}
@Override
public long del(String key) {
return jedisCluster.del(key);
}
@Override
public long hdel(String hkey, String key) {
return jedisCluster.hdel(hkey, key);
}
}
下面是测试配置以及工具类的方法
@Test
public void testSpringJedisSingle(){
ApplicationContextapplicationContext = newClassPathXmlApplicationContext(
"classpath:spring/applicationContext-*.xml");
JedisPoolpool= (JedisPool) applicationContext.getBean("redisClient");
Jedisjedis= pool.getResource();
Stringstring= jedis.get("key1");
System.out.println(string);
jedis.close();
pool.close();
}
@Test
public voidtestSpringJedisCluster() {
ApplicationContextapplicationContext = newClassPathXmlApplicationContext(
"classpath:spring/applicationContext-*.xml");
JedisClusterjedisCluster= (JedisCluster) applicationContext
.getBean("redisClient");
Stringstring= jedisCluster.get("key1");
System.out.println(string);
jedisCluster.close();
}
至此,本文的的写作目的——测试集群,以及redis配置与Spring集成就达到了。其实在笔者在写本文的时候,一方面是对之前项目中redis运用的优化,另一方面在实际的其实本文在实现JedisClient的时候,所有的方法中在笔者的项目中是添加有日志的。至于为什么添加日志本文就不介绍了。