一、依赖
<!-- Redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
二、配置文件
#Redis数据库及连接池设置
redis:
jedis:
pool:
max-active: 10
max-idle: 5
min-idle: 1
max-wait: -1
host: 192.168.127.11
port: 6379
database: 0
三、使用
1. StringRedisTemplate
特点: 只能操作字符串
@Autowired
private StringRedisTemplate redisTemplate;
@Test
public void testRedis(){
ValueOperations valueOperations = redisTemplate.opsForValue();
valueOperations.set("ace", "gjh");
String s = (String) valueOperations.get("ace");
System.out.println(s);
}
2. RedisTemplate
操作字符串(未指定序列化器)
@Autowired
private RedisTemplate redisTemplate;
@Test
public void testRedis(){
ValueOperations valueOperations = redisTemplate.opsForValue();
valueOperations.set("ace", "gjh");
String s = (String) valueOperations.get("ace");
System.out.println(s);
}
但在redis客户端可以看到,键前面有一些乱码字符\xac\xed\x00\x05t\x00\x03
原因是没有指定序列化器,默认用的是JdkSerializationRedisSerializer
。
操作字符串(指定序列化器)
如果指定了合适的序列化器,就不会出现\xac\xed\x00\x05t\x00\x03
乱码了。
下面用的是StringRedisSerializer
序列化器,效果等同于使用StringRedisTemplate
。
@Autowired
private RedisTemplate redisTemplate;
@Test
public void testRedis(){
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
ValueOperations valueOperations = redisTemplate.opsForValue();
valueOperations.set("ace", "gjh");
String s = (String) valueOperations.get("ace");
System.out.println(s);
}
操作java对象
注意: java对象一定要实现序列化接口Serializable
。
实体类对象:
public class RedisObj implements Serializable {
private String id;
private String name;
private int age;
private Date bir;
//省略getter/setter/constructor/toString等方法
}
为了让key不产生乱码字符\xac\xed\x00\x05t\x00\x03
,可以设置key的序列化方式为StringRedisSerializer
。
测试类:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void testRedis(){
redisTemplate.setKeySerializer(new StringRedisSerializer());
Date bir = new Date();
RedisObj redisObj = new RedisObj("1001", "gjh", 18, bir);
ValueOperations valueOperations = redisTemplate.opsForValue();
valueOperations.set("ace", redisObj);
RedisObj r = (RedisObj) valueOperations.get("ace");
System.out.println(r);
}