spring boot 自学笔记(四) Redis集成—Jedis

上一篇笔记Reddis集成,操作Redis使用的是RedisTemplate,但实际中还是有一大部分人习惯使用JedisPool和Jedis来操作Redis, 下面使用Jedis集成示例。

 

修改RedisConfig类如下:

 

package com.vic.config;

import org.apache.log4j.Logger;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * 
 * @author vic
 * @desc redis config bean
 *
 */
@Configuration
@EnableAutoConfiguration
@ConfigurationProperties(prefix = "spring.redis", locations = "classpath:application.properties")
public class RedisConfig {

	private static Logger logger = Logger.getLogger(RedisConfig.class);
	
	private String hostName;

	private int port;

	private String password;

	private int timeout;
	
	@Bean
	public JedisPoolConfig getRedisConfig(){
		JedisPoolConfig config = new JedisPoolConfig();
		return config;
	}
	
	@Bean
	public JedisPool getJedisPool(){
		JedisPoolConfig config = getRedisConfig();
		JedisPool pool = new JedisPool(config,hostName,port,timeout,password);
		logger.info("init JredisPool ...");
		return pool;
	}

	public String getHostName() {
		return hostName;
	}

	public void setHostName(String hostName) {
		this.hostName = hostName;
	}

	public int getPort() {
		return port;
	}

	public void setPort(int port) {
		this.port = port;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public int getTimeout() {
		return timeout;
	}

	public void setTimeout(int timeout) {
		this.timeout = timeout;
	}
}


因为JedisPool实例化对象,是将host,password等参数通过构造传入,所以在这里将整个RedisConfig定义为一个配置类,定义host,password等配置属性,通过spring boot属性文件自动注入。

 

接下来看看Service中如何使用:

修改IRedisService接口:

 

 

/**
 * 
 * @author vic
 * @desc redis service
 */
public interface IRedisService {

	public Jedis getResource();

	public void returnResource(Jedis jedis);

	public void set(String key, String value);

	public String get(String key);

}

 

 

 

 

 

RedisService实现类代码:

 

package com.vic.service.impl;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.vic.service.IRedisService;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

/**
 * 
 * @author vic
 * @desc resdis service
 *
 */
@Service
public class RedisServiceImpl implements IRedisService {
	
	private static Logger logger = Logger.getLogger(RedisServiceImpl.class);

	@Autowired
	private JedisPool jedisPool;
	
	@Override
	public Jedis getResource() {
		return jedisPool.getResource();
	}

	@SuppressWarnings("deprecation")
	@Override
	public void returnResource(Jedis jedis) {
		if(jedis != null){
			jedisPool.returnResourceObject(jedis);
		}
	}

	@Override
	public void set(String key, String value) {
		Jedis jedis=null;
		try{
			jedis = getResource();
			jedis.set(key, value);
			logger.info("Redis set success - " + key + ", value:" + value);
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("Redis set error: "+ e.getMessage() +" - " + key + ", value:" + value);
		}finally{
			returnResource(jedis);
		}
	}
	
	@Override
	public String get(String key) {
		String result = null;
		Jedis jedis=null;
		try{
			jedis = getResource();
			result = jedis.get(key);
			logger.info("Redis get success - " + key + ", value:" + result);
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("Redis set error: "+ e.getMessage() +" - " + key + ", value:" + result);
		}finally{
			returnResource(jedis);
		}
		return result;
	}

}


JedisPool对象使用自动注入,手动获取Jedis对象进行Redis操作,ExampleController进行测试:

	@RequestMapping("/redis/set")
	public ResponseModal redisSet(@RequestParam("value")String value){
		redisService.set("name", value);
		return new ResponseModal(200, true, "success", null);
	}
	
	@RequestMapping("/redis/get")
	public ResponseModal redisGet(){
		String name = redisService.get("name");
		return new ResponseModal(200, true,"success",name);
	}

 

 

测试URL:http://localhost:8080/redis/set?value=vic  响应结果:

 

{"code":200,"success":true,"message":"success","response":null}

测试URL:http://localhost:8080/redis/get   响应结果:

 

 

{"code":200,"success":true,"message":"success","response":"vic"}

示例代码下载

 

 

 

 

你可能感兴趣的:(spring,boot)