首先在pom.xml里面添加相关的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>
再在application.yml添加Redis的地址和端口号
spring:
redis:
host: 127.0.0.1
port: 6379
然后新建一个 RedisConfig类,主要是用来自定义一个RedisTemplate实例,并且交给Spring容器来控制。 可能你会有疑惑,为什么要自定义RedisTemplate,这个看下源码,可以看到默认的是JDK序列化,根本不好用,我们希望的是key存的是String,value存的是对象的json。这需要自己去填充相关属性。
if (this.defaultSerializer == null) {
this.defaultSerializer = new JdkSerializationRedisSerializer(this.classLoader != null ? this.classLoader : this.getClass().getClassLoader());
}
if (this.enableDefaultSerializer) {
if (this.keySerializer == null) {
this.keySerializer = this.defaultSerializer;
defaultUsed = true;
}
if (this.valueSerializer == null) {
this.valueSerializer = this.defaultSerializer;
defaultUsed = true;
}
if (this.hashKeySerializer == null) {
this.hashKeySerializer = this.defaultSerializer;
defaultUsed = true;
}
if (this.hashValueSerializer == null) {
this.hashValueSerializer = this.defaultSerializer;
defaultUsed = true;
}
}
自定义RedisConfig
@Configuration
public class RedisConfig {
@Bean
@SuppressWarnings("all")
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<String,Object>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
RedisSerializer serializer = new GenericJackson2JsonRedisSerializer();
//STRING的序列化
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//key的序列化采用String类型的
redisTemplate.setKeySerializer(stringRedisSerializer);
//hash的key也采用String类型
redisTemplate.setHashKeySerializer(stringRedisSerializer);
//value采用jackson类型
redisTemplate.setHashValueSerializer(serializer);
return redisTemplate;
}
}
由于在Java中,操纵Redis的语法和Redis中的命令有点不太一样,为了方便使用,我们自定义一个RedisUtil工具类,并把Redis里的命令当场方法名来封装一下。
@Component
public class RedisUtil {
@Autowired
@Qualifier("redisTemplate")
private RedisTemplate redisTemplate;
public String getString(String Str) {
return redisTemplate.opsForValue().get(Str).toString();
}
public Boolean setex(String key, String value) {
try {
redisTemplate.opsForValue().setIfAbsent(key, value, 60, TimeUnit.SECONDS);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
}
现在我们来测试一下,查询Redis客户端,发现已经存入了!更多的命令等我完善RedisUtil后,单独再发出来~
@RestController
@RequestMapping("/customer")
public class LoginController {
@Autowired
Response response;
@Autowired
RedisUtil redisUtil;
Log log = LogFactory.getLog(LoginController.class);
@RequestMapping("/query")
public Response userQuery(@RequestBody Customer customer) {
String tokenStr = JWTUtil.createToken("wsc");
System.out.println("tokenStr" + tokenStr);
redisUtil.setex("jinan0621",tokenStr);
response.setMsg("查询成功");
response.setStatus(Response.SUCCESS);
return response;
}
}