spring boot+redis

 1、 添加redis支持

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-redis</artifactId>
</dependency>

2、application.properties增加redis相关属性:

#redis  
spring.redis.hostName=192.168.15.5
spring.redis.port=6379
spring.redis.password=xxx
spring.redis.database=6
spring.redis.pool.maxActive=200
spring.redis.pool.maxWait=100
spring.redis.pool.maxIdle=300
spring.redis.pool.minIdle=100
spring.redis.timeout=50
3、新增RedisConfig

package cn.creditcrest.pay.commons.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;

import redis.clients.jedis.JedisPoolConfig;
/**
 * 
 * redis bean管理<br> 
 * 〈功能详细描述〉
 *
 * @author Administrator
 * @see [相关类/方法](可选)
 * @since [产品/模块版本] (可选)
 */
@Configuration  
@EnableAutoConfiguration  
public class RedisConfig {  
	private static final Logger LOG = LoggerFactory
			.getLogger(RedisConfig.class);
      
    @Bean  
    @ConfigurationProperties(prefix="spring.redis")  
    public JedisPoolConfig getRedisConfig(){  
        JedisPoolConfig config = new JedisPoolConfig();  
        return config;  
    }  
      
    @Bean  
    @ConfigurationProperties(prefix="spring.redis")  
    public JedisConnectionFactory getConnectionFactory(){  
        JedisConnectionFactory factory = new JedisConnectionFactory();  
        JedisPoolConfig config = getRedisConfig();  
        factory.setPoolConfig(config);  
        LOG.info("JedisConnectionFactory bean init success.");  
        return factory;  
    }  
      
      
    @Bean  
    public RedisTemplate<?, ?> getRedisTemplate(){  
        RedisTemplate<?,?> template = new StringRedisTemplate(getConnectionFactory());  
        return template;  
    } 
    @Bean  
    public RedisTemplate<?, ?> redisListTemplate(){  
    	RedisTemplate<?,?> template = new StringRedisTemplate(getConnectionFactory());  
    	return template;  
    } 
    
}  

OK,此时Reddis已经集成完成,下面来对常用操作做一些封装测试

新增IRedisService接口定义一些常用操作接口,以及添加实现类RedisServiceImpl,代码如下:

IRedisService.java

package cn.creditcrest.pay.commons.redis;

import java.util.List;
import java.util.Set;
/**
 * 
 * redis缓存处理接口<br> 
 * 〈功能详细描述〉
 *
 * @author Administrator
 * @see [相关类/方法](可选)
 * @since [产品/模块版本] (可选)
 */
public interface IRedisService {  
    
    public boolean set(String key, String value);  
      
    public String get(String key);  
      
    public boolean expire(String key,long expire);  
      
    public <T> boolean setList(String key ,List<T> list);  
      
    public <T> List<T> getList(String key,Class<T> clz);  
      
    public long lpush(String key,Object obj);  
      
    public long rpush(String key,Object obj);  
      
    public String lpop(String key);

	Set<Object> rangeByScore(String key, double scoure, double scoure1);

	void zAdd(String key, Object value, double scoure);

	Set<Object> setMembers(String key);

	void add(String key, Object value);

	List<Object> lRange(String k, long l, long l1);

	void lPush(String k, Object v);

	boolean set(String key, Object value, Long expireTime);  
      
}  

RedisServiceImpl.java

package cn.creditcrest.pay.commons.redis.impl;

import java.io.Serializable;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.stereotype.Service;

import cn.creditcrest.pay.commons.redis.IRedisService;
import cn.creditcrest.pay.commons.utils.JSONUtil;
/**
 * 
 * redis缓存处理服务<br> 
 * 〈功能详细描述〉
 *
 * @author Administrator
 * @see [相关类/方法](可选)
 * @since [产品/模块版本] (可选)
 */
@Service  
public class RedisServiceImpl implements IRedisService{  
  
    @Autowired  
    private RedisTemplate<String, ?> redisTemplate;  
    
	@Autowired  
    private RedisTemplate redisListTemplate;  
   
      
    @Override  
    public boolean set(final String key, final String value) {  
        boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {  
            @Override  
            public Boolean doInRedis(RedisConnection connection) throws DataAccessException {  
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();  
                connection.set(serializer.serialize(key), serializer.serialize(value));  
                return true;  
            }  
        });  
        return result;  
    }  
  
    public String get(final String key){  
        String result = redisTemplate.execute(new RedisCallback<String>() {  
            @Override  
            public String doInRedis(RedisConnection connection) throws DataAccessException {  
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();  
                byte[] value =  connection.get(serializer.serialize(key));  
                return serializer.deserialize(value);  
            }  
        });  
        return result;  
    }  
  
    @Override  
    public boolean expire(final String key, long expire) {  
        return redisTemplate.expire(key, expire, TimeUnit.DAYS);  
    }  
  
    @Override  
    public <T> boolean setList(String key, List<T> list) {  
        String value = JSONUtil.toJson(list);  
        return set(key,value);  
    }  
  
    @Override  
    public <T> List<T> getList(String key,Class<T> clz) {  
        String json = get(key);  
        if(json!=null){  
            List<T> list = JSONUtil.toList(json, clz);  
            return list;  
        }  
        return null;  
    }  
  
    @Override  
    public long lpush(final String key, Object obj) {  
        final String value = JSONUtil.toJson(obj);  
        long result = redisTemplate.execute(new RedisCallback<Long>() {  
            @Override  
            public Long doInRedis(RedisConnection connection) throws DataAccessException {  
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();  
                long count = connection.lPush(serializer.serialize(key), serializer.serialize(value));  
                return count;  
            }  
        });  
        return result;  
    }  
  
    @Override  
    public long rpush(final String key, Object obj) {  
        final String value = JSONUtil.toJson(obj);  
        long result = redisTemplate.execute(new RedisCallback<Long>() {  
            @Override  
            public Long doInRedis(RedisConnection connection) throws DataAccessException {  
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();  
                long count = connection.rPush(serializer.serialize(key), serializer.serialize(value));  
                return count;  
            }  
        });  
        return result;  
    }  
  
    @Override  
    public String lpop(final String key) {  
        String result = redisTemplate.execute(new RedisCallback<String>() {  
            @Override  
            public String doInRedis(RedisConnection connection) throws DataAccessException {  
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();  
                byte[] res =  connection.lPop(serializer.serialize(key));  
                return serializer.deserialize(res);  
            }  
        });  
        return result;  
    }

    /**
     * 列表添加
     * @param k
     * @param v
     */
    @SuppressWarnings("unchecked")
    @Override
	public void lPush(String k,Object v){
        ListOperations<String, Object> list = redisListTemplate.opsForList();
        list.rightPush(k,v);
    }

    /**
     * 列表获取
     * @param k
     * @param l
     * @param l1
     * @return
     */
    @SuppressWarnings("unchecked")
    @Override
	public List<Object> lRange(String k, long l, long l1){
        ListOperations<String, Object> list = redisListTemplate.opsForList();
        return list.range(k,l,l1);
    }

    /**
     * 集合添加
     * @param key
     * @param value
     */
    @SuppressWarnings("unchecked")
    @Override
	public void add(String key,Object value){
        SetOperations<String, Object> set = redisListTemplate.opsForSet();
        set.add(key,value);
    }

    /**
     * 集合获取
     * @param key
     * @return
     */
    @SuppressWarnings("unchecked")
    @Override
	public Set<Object> setMembers(String key){
        SetOperations<String, Object> set = redisListTemplate.opsForSet();
        return set.members(key);
    }

    /**
     * 有序集合添加
     * @param key
     * @param value
     * @param scoure
     */
    @SuppressWarnings("unchecked")
    @Override
	public void zAdd(String key,Object value,double scoure){
        ZSetOperations<String, Object> zset = redisListTemplate.opsForZSet();
        zset.add(key,value,scoure);
    }

    /**
     * 有序集合获取
     * @param key
     * @param scoure
     * @param scoure1
     * @return
     */
    @SuppressWarnings("unchecked")
    @Override
	public Set<Object> rangeByScore(String key,double scoure,double scoure1){
        ZSetOperations<String, Object> zset = redisListTemplate.opsForZSet();
        return zset.rangeByScore(key, scoure, scoure1);
    }
    
    /**
     * 写入缓存设置时效时间
     * @param key
     * @param value
     * @return
     */
    @SuppressWarnings("unchecked")
    @Override
	public boolean set(final String key, Object value, Long expireTime) {
        boolean result = false;
        try {
            ValueOperations<Serializable, Object> operations = redisListTemplate.opsForValue();
            operations.set(key, value);
            redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
  
}  
其中的JSONUtil类,可下载demo代码查看,其实就是一个JSON的工具类。

JSONUtil.java

package cn.creditcrest.pay.commons.utils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;

/**
 * 
 * JSON工具类<br> 
 * 〈功能详细描述〉
 *
 * @author Administrator
 * @see [相关类/方法](可选)
 * @since [产品/模块版本] (可选)
 */
public class JSONUtil {
	
	private static Gson gson = null; 
	
	static{
		gson  = new Gson();//todo yyyy-MM-dd HH:mm:ss 
	}
	
	public static synchronized Gson newInstance(){
		if(gson == null){
			gson =  new Gson();
		}
		return gson;
	}
	
	public static String toJson(Object obj){
		return gson.toJson(obj);
	}
	
	public static <T> T toBean(String json,Class<T> clz){
		
		return gson.fromJson(json, clz);
	}
	
	public static <T> Map<String, T> toMap(String json,Class<T> clz){
		 Map<String, JsonObject> map = gson.fromJson(json, new TypeToken<Map<String,JsonObject>>(){}.getType());
		 Map<String, T> result = new HashMap<>();
		 for(String key:map.keySet()){
			 result.put(key,gson.fromJson(map.get(key),clz) );
		 }
		 return result;
	}
	
	public static Map<String, Object> toMap(String json){
		 Map<String, Object> map = gson.fromJson(json, new TypeToken<Map<String,Object>>(){}.getType());
		 return map;
	}
	
	public static <T> List<T> toList(String json,Class<T> clz){
		JsonArray array = new JsonParser().parse(json).getAsJsonArray();  
		List<T> list  = new ArrayList<>();
		for(final JsonElement elem : array){  
	         list.add(gson.fromJson(elem, clz));
	    }
	    return list;
	}
	
	public static void main(String[] args) {
	}
	
}

在ExampleController中添加测试方法:

    @RestController  
    public class ExampleController {  
      
        @Autowired  
        private IUserService userService;  
          
        @Autowired  
        private IRedisService redisService;  
          
        @RequestMapping("/users")  
        public ResponseModal users(){  
            List<User> users = userService.getAll();  
            ResponseModal modal = new ResponseModal(200,true,"",users);  
            return modal;  
        }  
          
        @RequestMapping("/redis/set")  
        public ResponseModal redisSet(@RequestParam("value")String value){  
            boolean isOk = redisService.set("name", value);  
            return new ResponseModal(isOk ? 200 : 500, isOk, isOk ? "success" : "error" , null);  
        }  
          
        @RequestMapping("/redis/get")  
        public ResponseModal redisGet(){  
            String name = redisService.get("name");  
            return new ResponseModal(200, true,"success",name);  
        }  
          
    }  

运行Application的main函数

浏览器输入:http://localhost:8080/redis/set?value=vic  响应结果:

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

浏览器输入:http://localhost:8080/redis/get  响应结果:

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值