Spring集成Redis的两种方式Jedis和RedisTemplate

Redis一种非关系型(K-V)数据库,也习惯称为Redis缓存,类似memcached,但相对与memcached又有着以下优点
1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
2 Redis支持数据的备份,即master-slave模式的数据备份。
3 Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。


Spring框架基本上不用过多介绍,我相信点开本文的朋友基本上都很熟悉或者用过Spring框架了,在 java web开发方向,spring家族的地位应该一直处于最高的,本文要分享的是,通过Spring集成操作Redis数据库,大家会说这样的内容网上一大堆了,别着急,我们今天先分享两种方式,回头我们再进行对比一下。

第一种方式:Jedis
集成步骤:
1. 添加jar包或者引入依赖
 
   
  
            org.springframework.data  
            spring-data-redis  
            1.7.2.RELEASE  
          
          
            redis.clients  
            jedis  
            2.8.1  
         
2. 添加redis配置文件(非必须,可以在spring配置文件中直接配置)
#访问地址 

redis.host=127.0.0.1 

#访问端口 

redis.port=6379 

#注意,如果没有password,此处不设置值,但这一项要保留 

redis.password= 

 

#最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制。 

redis.maxIdle=300 

#连接池的最大数据库连接数。设为0表示无限制 

redis.maxActive=600 

#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。 

redis.maxWait=1000 

#在borrow一个jedis实例时,是否提前进行alidate操作;如果为true,则得到的jedis实例均是可用的; 

redis.testOnBorrow=true  



3. 在applicationContext.xml添加redis的bean

    

      
  
      
      
      
      
          
          
          
          
      
      
      
          
          
          
          
      
      
      
          
          
          
              
          
          
              
          
          
          
      
4. 测试
   @Autowired

    private ShardedJedisPool shardedJedisPool;//注入ShardedJedisPool

    @RequestMapping(value = “/demo_set”,method = RequestMethod.GET)

    @ResponseBody

    public String demo_set(){

        //获取ShardedJedis对象

        ShardedJedis shardJedis = shardedJedisPool.getResource();

        //存入键值对

        shardJedis.set(“key1”,“hello jedis”);

        //回收ShardedJedis实例

        shardJedis.close();

        return “set”;

    }

    @RequestMapping(value = “/demo_get”,method = RequestMethod.GET)

    @ResponseBody

    public String demo_get(){

        ShardedJedis shardedJedis = shardedJedisPool.getResource();

        //根据键值获得数据

        String result = shardedJedis.get(“key1”);

        shardedJedis.close();

        return result;

    }



第二种方式:

  1. 配置方式同Jedis,只是使用RedisTemplate进行数据操作
  2. 示例代码
    //配置类

@Configuration

@PropertySource("classpath:redis.properties")

public class RedisConfig extends JCacheConfigurerSupport {

    @Autowired

    private Environment environment;



    @Bean

    public RedisConnectionFactory redisConnectionFactory() {

        JedisConnectionFactory fac = new JedisConnectionFactory();

        fac.setHostName(environment.getProperty("redis.hostName"));

        fac.setPort(Integer.parseInt(environment.getProperty("redis.port")));

        fac.setPassword(environment.getProperty("redis.password"));

        fac.setTimeout(Integer.parseInt(environment.getProperty("redis.timeout")));

        fac.getPoolConfig().setMaxIdle(Integer.parseInt(environment.getProperty("redis.maxIdle")));

        fac.getPoolConfig().setMaxTotal(Integer.parseInt(environment.getProperty("redis.maxTotal")));

        fac.getPoolConfig().setMaxWaitMillis(Integer.parseInt(environment.getProperty("redis.maxWaitMillis")));

        fac.getPoolConfig().setMinEvictableIdleTimeMillis(

                Integer.parseInt(environment.getProperty("redis.minEvictableIdleTimeMillis")));

        fac.getPoolConfig()

                .setNumTestsPerEvictionRun(Integer.parseInt(environment.getProperty("redis.numTestsPerEvictionRun")));

        fac.getPoolConfig().setTimeBetweenEvictionRunsMillis(

                Integer.parseInt(environment.getProperty("redis.timeBetweenEvictionRunsMillis")));

        fac.getPoolConfig().setTestOnBorrow(Boolean.parseBoolean(environment.getProperty("redis.testOnBorrow")));

        fac.getPoolConfig().setTestWhileIdle(Boolean.parseBoolean(environment.getProperty("redis.testWhileIdle")));

        return fac;

    }



    @Bean

    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {

        RedisTemplate redis = new RedisTemplate<>();

        redis.setConnectionFactory(redisConnectionFactory);

        redis.afterPropertiesSet();

        return redis;

    }

}

//测试

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(classes = {RedisConfig.class})

public class RedisTest {



    @Autowired

    private RedisTemplate redisTemplate;

   

    @Test

    public void testRedisObj() {

        Map properties = new HashMap<>();

        properties.put("123", "hello");

        properties.put("abc", 456);

   

        redisTemplate.opsForHash().putAll("hash", properties);

   

        Map ans = redisTemplate.opsForHash().entries("hash");

        System.out.println("ans: " + ans);

    }

}

//执行结果

ans: {123=hello, abc=456}

你可能感兴趣的:(Spring集成Redis的两种方式Jedis和RedisTemplate)