1、首先下载redis,并启动redis,配置redis依赖
<!-- Redis 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.38</version>
</dependency>
2、配置一个redisTemplate,序列化数据,不然不支持实体类等数据,
package com.asia.web.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class redisConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String,Object> template = new RedisTemplate();
template.setConnectionFactory(factory);
//若想自己定义的实体类可以存到redis缓存,实体类实现序列化接口是不可以实现的,需要序列化RedisTemplate工具
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
// hash的key也采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
// value序列化方式采用jackson
template.setValueSerializer(jackson2JsonRedisSerializer);
// hash的value序列化方式采用jackson
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
3、创建redis工具类
package com.asia.web.cache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
@Configuration
public class JedisUtils {
@Autowired
private RedisTemplate<String,Object> redisTemplate;
public void set(String key,Object... val){
//批量添加数据(add(key,"A","B","C"))
redisTemplate.opsForSet().add(key,val);
}
public <T>T members(String key){
//获取get之后余下的成员值
return (T)redisTemplate.opsForSet().members(key);
}
public <T>T get(String key){
return (T)redisTemplate.opsForSet().pop(key);
}
public void setVal(String key,Object val){
//此方法key相同,后面会覆盖前面的值,添加一个键值对
redisTemplate.opsForValue().set(key,val);
}
public <T>T getVal(String key){
return (T)redisTemplate.opsForValue().get(key);
}
}
4、测试redis
package com.asia.web.Controller;
import com.alibaba.fastjson.JSON;
import com.asia.bean.UserDO;
import com.asia.web.cache.JedisUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping(path = "/redis")
public class RedisController {
Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private JedisUtils jedisUtils;
@RequestMapping(value = "/getRedis",method = RequestMethod.GET)
public String testRedis(){
logger.info("&&&&&&&&&&&&&&&进入redis");
UserDO userDO = new UserDO();
List<UserDO> list = new ArrayList();
userDO.setUserNm("小小小");
list.add(userDO);
jedisUtils.set("batch","A","B","C");
jedisUtils.set("list", JSON.toJSONString(list));
jedisUtils.setVal("xiao","小慧");
String green = jedisUtils.get("batch");
String overGreen = JSON.toJSONString(jedisUtils.members("batch"));
String listStr = JSON.toJSONString(jedisUtils.members("list"));
String xiao = jedisUtils.getVal("xiao");
logger.info("***green="+green+"**overGreen="+overGreen+"**listStr="+listStr+"**xiao="+xiao);
return "success";
}
}
5、测试结果