MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

分布式缓存-Redis 之 结合SpringBoot2.xx初始化配置redis 第一章

2024-12-03 15:23 huorong 精选文章 7 ℃ 0 评论

#挑战30天在头条写日记#

结合SpringBoot2.xx使用Redis

创建Spring项目

官方网站https://start.spring.io/

创建完成后生成并解压,将解压后的文件用idea打开并把maven仓库配置好。


Spring整合Redis

SpringDataRedis配置RedisTemplate

 @Configuration
 public class RedisTemplateConfiguration {
     /**
      * @param redisConnectionFactory
      * @return
      */
     @Bean
     public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
         RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
         redisTemplate.setConnectionFactory(redisConnectionFactory);
         // 使用Jackson2JsonRedisSerialize 替换默认序列化
         Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
         ObjectMapper objectMapper = new ObjectMapper();
         objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
         jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
         // 设置key和value的序列化规则
         redisTemplate.setKeySerializer(new StringRedisSerializer());
         redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
         // 设置hashKey和hashValue的序列化规则
         redisTemplate.setHashKeySerializer(new StringRedisSerializer());
         redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
         // 设置支持事物
         //redisTemplate.setEnableTransactionSupport(true);
         redisTemplate.afterPropertiesSet();
         return redisTemplate;
     }
 }

RedisTemplate

  1. ValueOperation:简单的K-V操作
  2. SetOperations:set类型数据操作
  3. ZSetOperations:zset类型数据操作
  4. HashOperations:针对map类型的数据操作
  5. ListOperations:list类型的数据操作

RedisTemplate与StringRedisTemplate区别:

  1. StringRedisTemplate继承RedisTemplate
  2. 两者数据不互通,无法互相使用
  3. StringRedisTemplate默认采用String的序列化策略
  4. RedisTemplate默认采用jdk序列化策略,会将数据先序列化成字节数组再存入Redis数据库

总结

  1. 当redis数据库里面本来操作的是字符串数据的时候,使用StringRedisTemplate即可
  2. 数据是复杂的对象类型,那么使用RedisTemplate是更好的选择

序列化

什么是序列化

  1. 把对象转换为字节序列的过程叫做对象的序列化
  2. 把字节序列恢复为对象的过程成成为对象的饭序列化

序列化的主要两种用途:

  1. 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件夹中
  2. 在网络上传送对象的字节序列

Redis为什么要序列化:

  1. 性能可以提高,不同的序列化方式性能不一样
  2. 可视化工具更好查看
    1. 采用默认的jdk方式会乱码,(POJO类需要实现Serializable接口)
    2. 采用JSON方式则不用,且可视化工具更好查看

自定义redis序列化方式,提供了多种可选择策略

  1. JdkSerializationRedisSerializer
    1. POJO对象的存取场景,使用JDK本身序列化机制,POJO实现Serializer
    2. 默认机制ObjectInputStream/ObjectOutputStream进行序列化操作
  2. StringRedisSerializer
  3. Key或者value为字符串
  4. Jackson2JsonRedisSerializer

利用Jackson- json工具,将pojo实力序列化成json格式存储

  1. GenericFastJsonRedisSerializer

另一种javabean与json之间的转换,同时也需要指定Class类型

SpringData

  1. 操作mysql/redis/elasticSeatch
  2. SpringDataRedis是专门操作redis的依赖。
  3. 添加依赖spring-boot-starter-data-redis:
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-redis</artifactId>
     </dependency>

注意

  1. springboot2后默认使用Lettuce作为访问redis的客户端。
  2. 旧版本lettuce存在堆外内存溢出的bug,5.3修复了这个bug,并发量不高、内存足够大可能不会出现内存溢出的情况。

连接redis

 server:
   port: 8080
 
 #链接redis配置
 spring:
   redis:
     host: redis的host地址
     port: 6379
     password: redis的密码
     

测试连接是否成功

 @SpringBootTest
 class DemoApplicationTests {
 
     @Autowired
     private RedisTemplate redisTemplate;
 
     @Test
     void testStringSet() {
 //    ValueOperations valueOperations = redisTemplate.opsForValue();
 //    valueOperations.set("name", "tom");//与下方等价
 
         redisTemplate.opsForValue().set("name", "tom");
 
     }
 
     @Test
     void testStringGet() {
         String str = (String) redisTemplate.opsForValue().get("name");
         System.out.println(str);
     }
 }

Tags:hashoperations

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言