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