栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot整合Redis详细总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot整合Redis详细总结

01.导入依赖
  		
            org.springframework.boot
            spring-boot-starter-data-redis
        
		
		
			org.apache.commons
			commons-pool2
			2.6.0
		
02.编写Redis配置文件
#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 redisTemplate2;

	@GetMapping("demo03")
    private User redisdemo03() {
        redisTemplate2.opsForValue().set("userdem01",new User("mhzzj", 1314));
        User u= (User) redisTemplate2.opsForValue().get("userdem01");
        return u;
    }
执行结果:

报错:序列化异常,由于User没有实现序列化接口

User实现序列化接口后操作 User类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable{
    private String name;
    private int age;
}

controller操作
 	@Autowired
    private RedisTemplate redisTemplate2;
	@GetMapping("demo03")
    private User redisdemo03() {
        redisTemplate2.opsForValue().set("userdem01",new User("mhzzj", 1314));
        User u= (User) redisTemplate2.opsForValue().get("userdem01");//获取刚才redis存储的对象
        System.out.println(u);
        return u;
    }
执行结果

控制太打印

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 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();
        template.setKeySerializer(stringRedisSerializer);
        template.setValueSerializer(jackson2JsonRedisSerializer);

        template.setHashKeySerializer(jackson2JsonRedisSerializer);
        template.setHashValueSerializer(jackson2JsonRedisSerializer);

        template.afterPropertiesSet();
        return template;
    }
}
 
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}]"
转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号