IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringBoot整合Redis总结(超详细) -> 正文阅读

[Java知识库]SpringBoot整合Redis总结(超详细)

01.导入依赖

  		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
		<!-- spring2.X集成redis所需common-pool2-->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
			<version>2.6.0</version>
		</dependency>

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<String,String> 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<Object, Object> 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<Object, Object> 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的存储情况

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wgGjCoVb-1652675265346)(picture/image-20220516115915224.png)]

127.0.0.1:6379> get userdem01
(nil)
127.0.0.1:6379> get \xac\xed\x00\x05t\x00\tuserdem01
(nil)
127.0.0.1:6379> get "\xac\xed\x00\x05t\x00\tuserdem01"
"\xac\xed\x00\x05sr\x00\x1fcom.demo.domain.User`\xd36\\L\xe6\xbc@\x02\x00\x02I\x00\x03ageL\x00\x04namet\x00\x12Ljava/lang/String;xp\x00\x00\x05\"t\x00\x05mhzzj"

原因:实现Serializable(序列化接口)后,对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的Java对象。所以redis现在存储的是一个二进制流,如果不喜欢这种序列化方式,可以在redis自定义序列化的方式

自定义RedisTemplate实现自定义序列化方式

Redis的Java配置类

@Configuration
public class RedisConifg {

    @Autowired
    private RedisConnectionFactory connectionFactory;

    @Bean
    public RedisTemplate<String,Object> redisTemplate(){
        RedisTemplate<String,Object> template = new RedisTemplate();
        template.setConnectionFactory(connectionFactory);
        // 序列化后会产生java类型说明,如果不需要用“Jackson2JsonRedisSerializer”和“ObjectMapper ”配合效果更好
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(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<String,Object> 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}]"
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:28:59  更:2022-05-18 17:29:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 21:16:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码