Redis的简单应用

强烈推荐一个大神的人工智能的教程:http://www.captainai.net/zhanghan

一、启动Redis(安装参考上篇博客)

      1.单机版的启动命令可使用./redis-server./redis-server redis.conf(在/usr/local/redis/下执行)

      2.集群版的启动命令使用./start-all.sh(在usr/local/redis-cluster/下)

二、未使用配置文件管理的使用方法

     1.单机版的测试

 //使用单机版
    @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();
    }

    2.集群版的测试

//连接redis集群
    @Test
    public void testJedisCluster() throws Exception{
        //创建一个JedisCluster对象
        Set<HostAndPort> 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的使用方法进行封装,过程如下:

    1.Redis的接口类(命名JedisClient)

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

    2.Redis的单机版实现类(JedisClientSingle)

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

    3.Redis集群版实现类(JedisClientCluster)

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

     4.在Spring的配置文件中配置Redis

    (我们一般使用Redis就是为了减轻数据库的压力,所以使用的一般都是在Service层),我们在Service层的spring配置文件中配置Redis。

     单机版的配置:

!--配置redis客户端单机版-->
<beanid="jedisPool"class="redis.clients.jedis.JedisPool">
<constructor-argname="host"value="192.168.159.219"></constructor-arg>
<constructor-argname="port"value="6379"></constructor-arg>
</bean>
<!--配置redis客户端实现类-->
<beanid="jedisClientSingle"class="com.taotao.rest.component.impl.JedisClientSingle"/>

     集群版的配置:

<!--配置redis客户端集群版-->
        <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
                <constructor-arg>
                        <set>
                                <bean class="redis.clients.jedis.HostAndPort">
                                        <constructor-arg name="host" value="192.168.159.219"></constructor-arg>
                                        <constructor-arg name="port" value="7001"></constructor-arg>
                                </bean>
                                <bean class="redis.clients.jedis.HostAndPort">
                                        <constructor-arg name="host" value="192.168.159.219"></constructor-arg>
                                        <constructor-arg name="port" value="7002"></constructor-arg>
                                </bean>
                                <bean class="redis.clients.jedis.HostAndPort">
                                        <constructor-arg name="host" value="192.168.159.219"></constructor-arg>
                                        <constructor-arg name="port" value="7003"></constructor-arg>
                                </bean>
                                <bean class="redis.clients.jedis.HostAndPort">
                                        <constructor-arg name="host" value="192.168.159.219"></constructor-arg>
                                        <constructor-arg name="port" value="7004"></constructor-arg>
                                </bean>
                                <bean class="redis.clients.jedis.HostAndPort">
                                        <constructor-arg name="host" value="192.168.159.219"></constructor-arg>
                                        <constructor-arg name="port" value="7005"></constructor-arg>
                                </bean>
                                <bean class="redis.clients.jedis.HostAndPort">
                                        <constructor-arg name="host" value="192.168.159.219"></constructor-arg>
                                        <constructor-arg name="port" value="7006"></constructor-arg>
                                </bean>
                        </set>
                </constructor-arg>
        </bean>

        <!--配置实现类-->
        <bean id="jedisClientCluster" class="com.taotao.rest.component.impl.JedisClientCluster"></bean>

      注意:单机版和集群版不能同时配置,只能选其一。

      5.单机版和集群版的测试方法

      以上配置完成之后,我们写一个测试方法来测试一下用配置文件管理的使用方法,在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的单机版和集群版的工具类就写好了,使用方法类似于测试类。






 

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值