Spring中集成Redis缓存

来源:互联网 发布:怎么测试网络稳定性 编辑:程序博客网 时间:2024/06/03 16:19

创建一个redis操作的接口,分别创建两个实现类型对应redis的单机版和集群版,根据需要选择单机版或集群版

单机版实现类

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

集群版实现类

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 jedisCluster.hset(key, item, value);    }    @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 jedisCluster.expire(key, second);    }    @Override    public Long ttl(String key) {        return jedisCluster.ttl(key);    }}

在Spring配置Redis

<!-- 配置redis客户端单机版 -->    <bean id="jedisPool" class="redis.clients.jedis.JedisPool">        <constructor-arg name="host" value="192.168.25.153"></constructor-arg>        <constructor-arg name="port" value="6379"></constructor-arg>    </bean>    <!-- 配置redis客户端实现类 -->    <bean id="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.25.153"/>                    <constructor-arg name="port" value="7001"/>                </bean>                <bean class="redis.clients.jedis.HostAndPort">                    <constructor-arg name="host" value="192.168.25.153"/>                    <constructor-arg name="port" value="7002"/>                </bean>                <bean class="redis.clients.jedis.HostAndPort">                    <constructor-arg name="host" value="192.168.25.153"/>                    <constructor-arg name="port" value="7003"/>                </bean>                <bean class="redis.clients.jedis.HostAndPort">                    <constructor-arg name="host" value="192.168.25.153"/>                    <constructor-arg name="port" value="7004"/>                </bean>                <bean class="redis.clients.jedis.HostAndPort">                    <constructor-arg name="host" value="192.168.25.153"/>                    <constructor-arg name="port" value="7005"/>                </bean>                <bean class="redis.clients.jedis.HostAndPort">                    <constructor-arg name="host" value="192.168.25.153"/>                    <constructor-arg name="port" value="7006"/>                </bean>            </set>        </constructor-arg>    </bean>    <bean id="jedisClientCluster" class="com.taotao.rest.component.impl.JedisClientCluster"/>

测试

@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("cliet1", "1000");        String string = jedisClient.get("cliet1");        System.out.println(string);    }

业务逻辑添加缓存

@Override    public List<TbContent> getContentList(Long cid) {        //添加缓存        //查询数据库之前先查询缓存,如果有直接返回        try {            //从redis中取缓存数据            String json = jedisClient.hget(REDIS_CONTENT_KEY, cid+"");            if (!StringUtils.isBlank(json)) {                //把json转换成List                List<TbContent> list = JsonUtils.jsonToList(json, TbContent.class);                return list;            }        } catch (Exception e) {            e.printStackTrace();        }        // 根据cid查询内容列表        TbContentExample example = new TbContentExample();        Criteria criteria = example.createCriteria();        criteria.andCategoryIdEqualTo(cid);        //执行查询        List<TbContent> list = contentMapper.selectByExampleWithBLOBs(example);        //返回结果之前,向缓存中添加数据        try {            //为了规范key可以使用hash            //定义一个保存内容的key,hash中每个项就是cid            //value是list,需要把list转换成json数据。            jedisClient.hset(REDIS_CONTENT_KEY, cid+"", JsonUtils.objectToJson(list));        } catch (Exception e) {            e.printStackTrace();        }        return list;    }
原创粉丝点击