强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan
1.单机版的启动命令可使用./redis-server或./redis-server redis.conf(在/usr/local/redis/下执行)
2.集群版的启动命令使用./start-all.sh(在usr/local/redis-cluster/下)
//使用单机版
@Test
public void testJedisSingle() throws Exception{
// 创建一个jedis对象
Jedis jedis = new Jedis("192.168.159.219",6379);
jedis.set("test","hello jedis");
String string = jedis.get("test");
System.out.println(string);
jedis.close();
}
但是这样会很麻烦,每次用的时候都需要new一个Jedis对象,所以做一下优化,使用连接池
//单机版:使用连接池
@Test
public void testJedisPool() throws Exception{
//创建一个连接池对象
//系统中应该是单例的
JedisPool jedisPool = new JedisPool("192.168.159.219",6379);
//从连接池中获得一个连接
Jedis jedis = jedisPool.getResource();
String result = jedis.get("test");
System.out.println(result);
//jedis必须有要关闭
jedis.close();
//当系统关闭时,关闭连接池
jedisPool.close();
}
//连接redis集群
@Test
public void testJedisCluster() throws Exception{
//创建一个JedisCluster对象
Set nodes = new HashSet<>();
nodes.add(new HostAndPort("192.168.159.219",7001));
nodes.add(new HostAndPort("192.168.159.219",7002));
nodes.add(new HostAndPort("192.168.159.219",7003));
nodes.add(new HostAndPort("192.168.159.219",7004));
nodes.add(new HostAndPort("192.168.159.219",7005));
nodes.add(new HostAndPort("192.168.159.219",7006));
//在nodes中指定每个节点的地址
//JedisCluster在系统中是单例的
JedisCluster jedisCluster = new JedisCluster(nodes);
jedisCluster.set("name","zhangsan");
jedisCluster.set("value","100");
String name = jedisCluster.get("name");
String value = jedisCluster.get("value");
System.out.println(name);
System.out.println(value);
//系统关闭的时候关闭
jedisCluster.close();
}
虽然一步步优化,但是我们使用的时候还是需要每次去配置连接项,一旦219机器出故障了我们就需要在所有用到Redis的地方修改host的值,解决办法就是通过Spring的配置文件管理。
我们对Redis的使用方法进行封装,过程如下:
import com.sun.tools.corba.se.idl.StringGen;
/**
*
* @author huan
* @date 2017/11/11
*/
public interface JedisClient {
public String set(String key,String value);
public String get(String key);
public Long hset(String key,String item,String value);
public String hget(String key,String item);
public Long incr(String key);
public Long decr(String key);
public Long expire(String key,int second);
public Long ttl(String key);
}
import com.taotao.rest.component.JedisClient;
import org.springframework.beans.factory.annotation.Autowired;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
/**
*redis客户端单机版
* @author huan
* @date 2017/11/11
*/
public class JedisClientSingle implements JedisClient {
@Autowired
private JedisPool jedisPool;
@Override
public String set(String key, String value) {
Jedis jedis = jedisPool.getResource();
String result = jedis.set(key,value);
jedis.close();
return result;
}
@Override
public String get(String key) {
Jedis jedis = jedisPool.getResource();
String result = jedis.get(key);
jedis.close();
return result;
}
@Override
public Long hset(String key, String item, String value) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hset(key,item,value);
jedis.close();
return result;
}
@Override
public String hget(String key, String item) {
Jedis jedis = jedisPool.getResource();
String result = jedis.hget(key,item);
jedis.close();
return result;
}
@Override
public Long incr(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.incr(key);
jedis.close();
return result;
}
@Override
public Long decr(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.decr(key);
jedis.close();
return result;
}
@Override
public Long expire(String key, int second) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.expire(key,second);
jedis.close();
return result;
}
@Override
public Long ttl(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.ttl(key);
jedis.close();
return result;
}
}
import com.taotao.rest.component.JedisClient;
import org.springframework.beans.factory.annotation.Autowired;
import redis.clients.jedis.JedisCluster;
/**
*redis客户端集群版
* @author huan
* @date 2017/11/11
*/
public class JedisClientCluster implements JedisClient{
@Autowired
private JedisCluster jedisCluster;
@Override
public String set(String key, String value) {
return jedisCluster.set(key,value);
}
@Override
public String get(String key) {
return jedisCluster.get(key);
}
@Override
public Long hset(String key, String item, String value) {
return null;
}
@Override
public String hget(String key, String item) {
return jedisCluster.hget(key,item);
}
@Override
public Long incr(String key) {
return jedisCluster.incr(key);
}
@Override
public Long decr(String key) {
return jedisCluster.decr(key);
}
@Override
public Long expire(String key, int second) {
return expire(key,second);
}
@Override
public Long ttl(String key) {
return ttl(key);
}
}
(我们一般使用Redis就是为了减轻数据库的压力,所以使用的一般都是在Service层),我们在Service层的spring配置文件中配置Redis。
单机版的配置:
!--配置redis客户端单机版-->
集群版的配置:
注意:单机版和集群版不能同时配置,只能选其一。
以上配置完成之后,我们写一个测试方法来测试一下用配置文件管理的使用方法,在Spring的配置文件中配置上述集群版或单机版其中之一后,均可使用下述方法测试:
//使用spring配置文件管理的Redis测试方法
@Test
public void testJedisClientSpring() throws Exception{
//创建一个spring容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
//从容器中获得JedisClient对象
JedisClient jedisClient = applicationContext.getBean(JedisClient.class);
//jedisClient操作redis
jedisClient.set("client1","1000");
String string = jedisClient.get("client1");
System.out.println(string);
}
至此,我们Redis的单机版和集群版的工具类就写好了,使用方法类似于测试类。