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

java基础巩固-宇宙第一AiYWM:为了维持生计,Redis基础Part1-2(Redis在SSM中高性能缓存、Redis在SpringBoot中高性能缓存、Redis的发布订阅功能)~整起

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

java基础巩固-宇宙第一AiYWM:为了维持生计,Redis基础Part1-2(Redis在SSM中高性能缓存、Redis在SpringBoot中高性能缓存、Redis的发布订阅功能)~整起

上集唠到了四种非关系型数据库,然后引出了咱们最关键的一种人称“持久化的哈希Map”—键值对数据库Redis,聊了一下他的一些基本概念,优缺点,以及关键的配置文件里面的参数的介绍,这一集呢…,听说SSM很牛逼,那么我更牛逼的Redis在你这里…一山不容二牛逼…会发生什么呢?

PART1:Redis的核心功能:Redis作为K、V存储的高性能缓存时
PART1-1:Redis在SSM中.需要详细完整的图,评论留言,给你发哦

之前在SSM项目中集成使用Redis时,其实就是:

  • 写了一个配置文件redis.properties
  • 写了两个工具类,JedisPoolWriper.java和JedisUtil.java:这两个工具类就在这xml配置完成,才能在SSM中使用(后期springboot用方法去创建这些,再用@Autowired把创建bean所用方法的返回值注入到IOC容器中)
    • JAVA操作redis通常使用的是Jedis,通过java代码来操作redis的数据存储读取等操作
    • Spring也为Redis提供了支持,就是在Spring-data模块中的Spring-Data-Redis(SDR),它一部分是基于Jedis客户端的API封装,另一部分是Redis对Spring容器的整合。
    • 那肯定,咱们Spring在这,你写了两个类,也就是两个bean,我spring看见bean我能视而不见?

      • 还有SSM配置文件中关于集成的那个东西的配置(在.xml文件中配置也行)



    
    
    
        
        
        
        
        
    
    
    
        
        
        
        
    

    
        
        
            
        
        
            
        
        
            
        
        
    

  • 然后在项目中,原本存到数据库的数据先存到Redis中,原本要从数据库取的数据先从Redis中取

再深扣一下:

  • SpringData的另外一个关键特性,也就是面向模板的数据访问,能够在使用Redis的时候,为我们提供帮助。SpringDataRedis包含了多个模板实现,用来完成Redis数据库的数据存取功能。但是为了创建SpringData Redis的模板,我们首先需要有一个Redis连接工厂。Spring Data Redis提供了四个连接工厂(Redis连接工厂会生成到Redis数据库服务器的连接。Spring Data Redis为四种Redis客户端实现提供了连接工厂,Redis连接工厂会以RedisConnection的形式生成到Redis key-value存储的连接。借助RedisConnection,可以存储和读取数据。**)**供我们选择。这些连接工厂在适用性上都是相同的。
    • JedisConnectionFactory
    • JredisConnectionFactory
    • LettuceConnectionFactory
    • SrpConnectionFactory
  • 选择好了要用哪一个连接工厂之后,我们就可以将连接工厂配置为Spring中的bean。例如,我们选择了配置JedisConnectionFactory bean:
    • Redis连接工厂会以RedisConnection的形式生成到Redis key-value存储的连接。借助RedisConnection,可以存储和读取数据。
@Bean
public RedisConnectionFactory redisCF() {
	return new Jedi sConnectionFactory() ;
}
...

@Bean
public Redi sConnectionFactory redisCF() {
	Jedi sConnectionFactory cf = new Jedi sConnecti onFactory() ;
	cf.setHostName ("redis -server") ;
	cf.setPort(7379) ;
	cf.setPassword("qaaa");
	return cf;
}
...
  • 有了Redis连接工厂后下来就可以使用Spring Data Redis模板了。Redis连接工厂会以RedisConnection的形式生成到Redis key-value存储的连接。借助RedisConnection,可以存储和读取数据。但是咱们存取数据总不能一直用字节数组去存去取吧。肯定不是。Spring Data Redis以模板的形式为咱们提供了两个数据访问方案或者叫模板。其实大白话就是,这俩所谓的数据访问方案或者模板就是咱们用来保存、获取以及删除key-value的工具。
    • RedisTemplate:RedisTemplate可以极大地简化Redis数据访问,能够让我们持久化各种类型的key和value,并不局限于字节数组。在认识到key和value通常是String类型之后,StringRedisTemplate扩展了RedisTemplate,只关注String类型。构建RedisTemplate的方式:
    • StringRedisTemplate
//注意,RedisTemplate使用两个类型进行了参数化。第一个是key的类型,第二个是value的类型。在这里所构建的RedisTemplate中,将会保存Product对象作为value, 并将其赋予-个String类型的key。
RedisConnectionFactory cf = ...
RedisTemplate redis = new RedisTemplate();
redis.setConnectionFactory(cf);
...
//如果你所使用的value和key都是String类型,那么可以考虑使用StringRedisTemplate来代替RedisTemplate:
RedisConnectionFactory cf = ...
StringRedisTemplate redis = new StringRedisTemplate(cf);

通常咱们可以将RedisTemplate配置为bean然后注入到需要的地方

@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory cf) {
	RedisTemplate redis = new RedisTemplate() ;
	redis.setConnectionFactory(cf) ;
	return redis;
}
  • 当某个条目保存到Redis key-value存储的时候,key和value 都会使用Redis的序列化器(serializer) 进行序列化。
  • 集中式缓存Redis
    • 在一些要求高一致性(任何数据变化都能及时的被查询到)的系统和应用中得使用集中式缓存Redis就可以很好的解决缓存数据的一致性问题.
      • 在集群模式下时,各应用服务器之间的缓存都是独立的,因此在不同服务器的进程间会存在缓存不一致的情况。即使像EhCache提供了集群环境下的缓存同步策略,但是同步依然是需要一定的时间,短暂的缓存不一致依然存在。

PART2:Redis在SpringBoot中。需要详细完整的图,评论留言,给你发哦、

  • 从SSM移植到SpringBoot可以说大概有以下几点:
    • 将原来redis.properties中的配置信息转移到springboot自带的applicationproperties配置文件中
      • 原来SSM的中有id,class,property,ref等,这些在springboot中,id就是我方法名加上create,即createXXX,就可以创建出原来SSM的XML中配置的id对应的bean呀,class就是springboot中@Bean下方法的返回值类型,property就是springboot中@Bean下方法的成员属性或者叫成员变量,ref在springboot中@Bean下方法中是一个引用,相当于对象一样,所以需要用@Autowired进行注入
    • 将两个工具类src/main/java/com/imooc/demo/cache下JedisPoolWriper.java和JedisUtil.java转移到springboot的src/main/java/com/imooc/demo/config/cache下
    • 在src/main/java/com/imooc/demo/config下新建一个RedisConfiguration.java来替换原SSM的.xml配置文件中这个配置信息

但是话说回来,一个真正的SpringBoot项目相比较于SSM项目,可不止上面那些变化,还有比如说:

  • 首当其冲的就是maven项目的pom.xml中的内容有大改动:

    org.springframework.boot
    spring-boot-starter-data-redis



    org.apache.commons
    commons-pool2

然后,就是上面咱们图里面的配置文件等,如下:

  • 配置文件中增加配置信息,以本地运行为例,比如:
    • lettuce是个啥呢,其实lettuce也是个和咱们之前用的jedis一样的连接池,咱们前面不是已经有jedisPool…
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=-1ms
spring.redis.lettuce.pool.min-idle=0
spring.redis.lettuce.shutdown-timeout=100ms

PART2:使用Redis的发布订阅功能

  • 发布订阅模式:在发布订阅模式中有个重要的角色,一个是发布者Publisher,另一个订阅者Subscriber。本质上来说,发布订阅模式就是一种生产者消费者模式,Publisher负责生产消息,而Subscriber则负责消费它所订阅的消息。
    • 这种模式被广泛的应用于软硬件的系统设计中。比如:配置中心的一个配置修改之后,就是通过发布订阅的方式传递给订阅这个配置的订阅者来实现自动刷新的。
  • 发布订阅模式与观察者模式的区别:(确实很像,Publisher就像观察者模式中的Subject、Subscriber就像观察者模式中的Observer),但是实现架构上还是有一个核心不同点。
    • 观察者模式:
    • 发布订阅模式:
      • 这个中间角色就是缓冲区,有了这个中间角色(缓冲区),给咱们提供了方便,也可以说是发布订阅模式或者生产者消费者模式的优点:
        • 发布订阅模式或者生产者消费者模式的优点:
          • 发布者不会因为订阅者处理速度慢,而影响自己的发布任务,它只需要快速生产即可
          • 订阅者也不用太担心一时来不及处理,因为有缓冲区在,可以一点点排队来完成(也就是我们常说的“削峰填谷”效果)。
        • 发布订阅模式中的这个中间缓冲区,常用的实现方式:
          • 通过RabbitMQ、Kafka、RocketMQ这些中间件
          • Redis也提供了简单的发布订阅实现
  • 在Spring Boot应用中,咱们先通过接口的方式实现一个消息发布者的角色,然后再写一个Service来实现消息的订阅(把接口传过来的消息内容打印处理)的大概步骤:
    • pom.xml中需要加入的几个依赖:spring-boot-starter-web、spring-boot-starter-data-redis、commons-pool2
    • 发布订阅模式中的发布方:通过接口的方式实现一个消息发布者的角色
    • 发布订阅模式中的订阅方:写一个Service来实现消息的订阅(把接口传过来的消息内容打印处理)

巨人的肩膀:
https://blog.csdn.net/u010690828/article/details/77141083
Spring实战
https://blog.didispace.com/spring-boot-learning-21-5-4/
高性能MySQL
mysql技术内幕
巨人的肩膀:https://www.javalearn.cn
B站各位大佬

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/878493.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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