【redis】ssm项目整合redis,redis注解式缓存及应用场景,redis的击穿、穿透、雪崩的解决方案

一、整合redis

1、介绍

1.1、redis(Remote Dictionary Server)

  • Redis是一种基于内存的键值存储系统,它将数据存储在内存中,因此读写速度非常快。
  • Redis支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,这使得Redis适用于各种应用场景,如缓存、消息队列、计数器等。
  • Redis具有高可用性和可扩展性,支持主从复制和分片,以实现数据的备份和负载均衡。
  • Redis的持久化方式有RDB(快照)和AOF(日志追加),可以将数据持久化到磁盘,保证数据的安全性。

1.2、MySQL

  • MySQL是一种关系型数据库管理系统,使用标准的SQL语言进行数据操作。
  • MySQL将数据存储在磁盘上,因此相对于Redis来说,读写速度较慢。
  • MySQL支持事务处理和复杂的查询,适用于需要处理结构化数据的应用,如网站、电子商务等。
  • MySQL具有较高的稳定性和成熟度,支持ACID特性(原子性、一致性、隔离性、持久性),可以保证数据的完整性和一致性。

1.3、区别

  1. redis是nosql数据库

  2. MySQL是sql数据库

更一步的理解:

  • 存储方式:Redis将数据存储在内存中,而MySQL将数据存储在磁盘中。
  • 数据结构:Redis支持多种数据结构,MySQL使用表格和关系进行数据存储。
  • 读写性能:由于Redis使用内存存储,读写速度较快,而MySQL较慢。
  • 功能特性:Redis适用于缓存和实时数据处理,MySQL适用于结构化数据的存储和复杂查询。
  • ACID特性:MySQL支持事务处理和ACID特性,而Redis在默认情况下不支持事务处理。
  • 持久化方式:Redis可以将数据持久化到磁盘,MySQL具有多种持久化方式,如日志文件和复制。

2、整合

2.1、配置

创建ssm的项目,在配置文件的pom文件添加

2.9.0
1.7.1.RELEASE


	redis.clients
	jedis
	${redis.version}


	org.springframework.data
	spring-data-redis
	${redis.spring.version}

2.2、文件配置

编写一个配置文件redis.properties,在我们的resources包里面。

redis.hostName:对应的IP地址
redis.port:对应的端口号
redis.password:对应的redis连接的密码

redis.hostName=localhsot
redis.port=6379
redis.password=123456
redis.timeout=10000
redis.maxIdle=300
redis.maxTotal=1000
redis.maxWaitMillis=1000
redis.minEvictableIdleTimeMillis=300000
redis.numTestsPerEvictionRun=1024
redis.timeBetweenEvictionRunsMillis=30000
redis.testOnBorrow=true
redis.testWhileIdle=true
redis.expiration=3600

spring-redis.xml




    
    

    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    

    
    
        
        
        
        
        
        
        
        
        
    

    
    
        
        
        
            
        
        
            
        
        
            
        
        
            
        
        
        
    

    
    
        
        
        
        
        
        
        
            
                
            
        
    

    
    

    
    

redis.properties与jdbc.properties在与Spring做整合时会发生冲突;所以引入配置文件的地方要放到SpringContext.xml中

SpringContext.xml配置如下




    
    
        
        
        
            
                classpath:jdbc.properties
                classpath:redis.properties
            
        
    
    
    
    
    
    
    
    

二、redis注解式缓存

@Cacheable
配置在方法或类上,作用:本方法执行后,先去缓存看有没有数据,如果没有,从数据库中查找出来,给缓存中存一份,返回结果,
下次本方法执行,在缓存未过期情况下,先在缓存中查找,有的话直接返回,没有的话从数据库查找

三、redis击穿穿透雪崩

1、击穿

高并发量的同时key失效,导致请求直接到达数据库;

设置锁
1.获取 Redis 锁,如果没有获取到,则回到任务队列继续排队
2.获取到锁,从数据库拉取数据并放入缓存中
3.释放锁,其他请求从缓存中拿到数据

限流:请求redis之前做流量削峰

2、穿透

很多请求都在访问数据库一定不存在的数据,造成请求将缓存和数据库都穿透的情况。 

规则排除
可以增加一些参数检验。例如数据库数据 id 一般都是递增的,如果请求 id = -10 这种参数,势必绕过Redis。避免这种情况,可以对用户真实性检验等操作。

null值填充
当缓存穿透时,redis存入一个类似null的值,下次访问则直接缓存返回空,当数据库中存在该数据的值则需要把redis存在的null值清除并载入新值,此方案不能解决频繁随机不规则的key请求。

3、雪崩

 雪崩和击穿类似,不同的是击穿是一个热点 Key 某时刻失效,而雪崩是大量的热点 Key 在一瞬间失效 。

给不同的热点key设置不同的缓存策略

你可能感兴趣的:(#,服务器,redis,数据库,缓存,运维,服务器,java,adb)