02.编写Redis配置文件org.springframework.boot spring-boot-starter-data-redis org.apache.commons commons-pool2 2.6.0
#Redis服务器地址 spring.redis.host=192.168.10.102 #Redis服务器连接端口 spring.redis.port=6379 #Redis数据库索引(默认为0),可以不写 spring.redis.database= 0 #连接超时时间(毫秒),可以不写 spring.redis.timeout=1800000 #连接池最大连接数(使用负值表示没有限制),可以不写 spring.redis.lettuce.pool.max-active=20 #最大阻塞等待时间(负数表示没限制),可以不写 spring.redis.lettuce.pool.max-wait=-1 #连接池中的最大空闲连接,可以不写 spring.redis.lettuce.pool.max-idle=5 #连接池中的最小空闲连接,可以不写 spring.redis.lettuce.pool.min-idle=0 # redis账号密码,若没有账号密码可不进行设置03.Redis具体操作 3.1Redis存储字符串
@Autowired
private RedisTemplate redisTemplate1;
@GetMapping("demo01")
private String redisdemo(){
redisTemplate1.opsForValue().set("demo01","abc");
return redisTemplate1.opsForValue().get("demo01");
}
执行后redis的存储情况
127.0.0.1:6379> get demo01 "abc"3.2Redis存储对象 存储对象无任何序列化操作 User类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String name;
private int age;
}
controller操作
@Autowired
private RedisTemplate
执行结果:
报错:序列化异常,由于User没有实现序列化接口
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable{
private String name;
private int age;
}
controller操作
@Autowired
private RedisTemplate
执行结果
控制太打印
User(name=mhzzj, age=1314)
执行后redis的存储情况
127.0.0.1:6379> get userdem01 (nil) 127.0.0.1:6379> get xacxedx00x05tx00tuserdem01 (nil) 127.0.0.1:6379> get "xacxedx00x05tx00tuserdem01" "xacxedx00x05srx00x1fcom.demo.domain.User`xd36\Lxe6xbc@x02x00x02Ix00x03ageLx00x04nametx00x12Ljava/lang/String;xpx00x00x05"tx00x05mhzzj"
原因:实现Serializable(序列化接口)后,对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的Java对象。所以redis现在存储的是一个二进制流,如果不喜欢这种序列化方式,可以在redis自定义序列化的方式
自定义RedisTemplate实现自定义序列化方式 Redis的Java配置类@Configuration
public class RedisConifg {
@Autowired
private RedisConnectionFactory connectionFactory;
@Bean
public RedisTemplate redisTemplate(){
RedisTemplate template = new RedisTemplate();
template.setConnectionFactory(connectionFactory);
// 序列化后会产生java类型说明,如果不需要用“Jackson2JsonRedisSerializer”和“ObjectMapper ”配合效果更好
Jackson2JsonRedisSerializer
User类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String name;
private int age;
}
controller操作
@Autowired
private RedisTemplate redisTemplate;
@GetMapping("demo03")
private User redisdemo03() {
redisTemplate.opsForValue().set("userdem01",new User("mhzzj", 1314));
User u= (User) redisTemplate.opsForValue().get("userdem01");
System.out.println(u);
return u;
}
执行结果
127.0.0.1:6379> keys *
1) "userdem01"
127.0.0.1:6379> get "userdem01"
"["com.demo.domain.User",{"name":"mhzzj","age":1314}]"



