我是默,一个在CSDN分享笔记的博主。
在这里,我要推荐给大家我的专栏《Linux》。
无论你是编程小白,还是有一定基础的程序员,这个专栏都能满足你的需求。我会用最简单易懂的语言,带你走进代码的世界,让你从零开始,一步步成为编程大师。
让我们在代码的世界里畅游吧!
如果感觉还不错的话请记得给我点赞哦!
期待你的加入,一起学习,一起进步
目录
编辑
一.spring注解redis
1.导入依赖
2.具体操作
配置工厂(spring-redis.xml)
配置缓存管理器
二.redsi三个注解的使用
@Cacheable(可以读取数据,也可以写数据)
@CachePut(只读数据)
三.redis击穿穿透雪崩
1.定义
Redis击穿
Redis穿透
Redis雪崩
4.0.0
org.example
ssm2
1.0-SNAPSHOT
war
ssm2 Maven Webapp
http://www.example.com
UTF-8
1.8
1.8
3.7.0
5.0.2.RELEASE
3.4.5
5.1.44
5.1.2
1.3.1
2.1.1
2.4.3
2.9.1
4.12
4.0.0
1.18.2
2.10.0
1.7.7
2.9.0
1.7.1.RELEASE
org.springframework
spring-context
${spring.version}
org.springframework
spring-orm
${spring.version}
org.springframework
spring-tx
${spring.version}
org.springframework
spring-aspects
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-test
${spring.version}
org.mybatis
mybatis
${mybatis.version}
mysql
mysql-connector-java
${mysql.version}
com.github.pagehelper
pagehelper
${pagehelper.version}
org.mybatis
mybatis-spring
${mybatis.spring.version}
org.apache.commons
commons-dbcp2
${commons.dbcp2.version}
org.apache.commons
commons-pool2
${commons.pool2.version}
org.apache.logging.log4j
log4j-core
${log4j2.version}
org.apache.logging.log4j
log4j-api
${log4j2.version}
org.apache.logging.log4j
log4j-web
${log4j2.version}
junit
junit
${junit.version}
test
javax.servlet
javax.servlet-api
${servlet.version}
provided
org.projectlombok
lombok
${lombok.version}
provided
org.springframework
spring-webmvc
${spring.version}
javax.servlet.jsp
javax.servlet.jsp-api
2.3.3
jstl
jstl
1.2
taglibs
standard
1.1.2
commons-fileupload
commons-fileupload
1.3.3
org.hibernate
hibernate-validator
6.0.7.Final
com.fasterxml.jackson.core
jackson-databind
2.9.3
com.fasterxml.jackson.core
jackson-core
2.9.3
com.fasterxml.jackson.core
jackson-annotations
2.9.3
org.apache.shiro
shiro-core
1.3.2
org.apache.shiro
shiro-web
1.3.2
org.apache.shiro
shiro-spring
1.3.2
net.sf.ehcache
ehcache
${ehcache.version}
org.slf4j
slf4j-api
${slf4j-api.version}
org.slf4j
jcl-over-slf4j
${slf4j-api.version}
runtime
org.apache.logging.log4j
log4j-slf4j-impl
${log4j2.version}
redis.clients
jedis
${redis.version}
org.springframework.data
spring-data-redis
${redis.spring.version}
ssm2
src/main/java
**/*.xml
src/main/resources
*.properties
*.xml
org.apache.maven.plugins
maven-compiler-plugin
${maven.compiler.plugin.version}
${maven.compiler.target}
${project.build.sourceEncoding}
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.2
mysql
mysql-connector-java
${mysql.version}
true
maven-clean-plugin
3.1.0
maven-resources-plugin
3.0.2
maven-compiler-plugin
3.8.0
maven-surefire-plugin
2.22.1
maven-war-plugin
3.2.2
maven-install-plugin
2.5.2
maven-deploy-plugin
2.8.2
redis操作模板,使用该对象可以操作redis
@Cacheable(可以读取数据,也可以写数据)
@Cacheable
注解用于标记一个方法的结果可以被缓存。 当调用该方法时,Spring首先检查缓存是否已经存在结果。 如果存在,将直接从缓存中返回结果,而不执行方法。 如果结果不在缓存中,则执行方法并将结果缓存起来,以便后续调用时使用。
@Cacheable(value = "books", key = "#isbn") public Book getByIsbn(String isbn) { // 从数据库中获取书籍信息的逻辑 }
@CachePut(只读数据)
@CachePut
注解用于更新缓存中的内容。 当使用注解标记的方法被调用时,Spring会更新缓存中的值,而不管缓存中是否已经存在相应的键值对。@CachePut
@CachePut(value = "books", key = "#book.isbn") public Book updateBook(Book book) { // 更新数据库中书籍信息的逻辑 return book; }
@CacheEvict
注解用于从缓存中删除数据。 可以通过指定属性来确定要清除的缓存,通过属性来指定要删除的项。value
key
@CacheEvict(value = "books", key = "#isbn") public void deleteByIsbn(String isbn) { // 从数据库中删除书籍信息的逻辑 }
这些注解在执行耗时操作(如数据库查询或API调用)的应用程序中非常有用。 通过缓存这些操作的结果,可以加快后续调用的速度,减少应用程序的响应时间。
Redis击穿是指一个缓存key非常热门,在某一个时间点过期的时候,恰好又有大量的并发请求过来访问这个key,导致所有请求都打到了数据库上,从而导致数据库压力过大,甚至宕机。 为了避免这种情况,可以使用互斥锁(mutex)或者分布式锁来解决。
Redis穿透是指一个请求查询一个不存在的缓存key,这个请求就会直接打到数据库上,如果请求量很大,数据库就会承受巨大的压力。 为了避免这种情况,可以使用布隆过滤器来处理缓存穿透的问题,或者在缓存层做参数校验和异常处理。
Redis雪崩是指在某一个时间段,缓存集中过期失效,导致所有请求都落到数据库上,造成数据库压力急剧增大,甚至宕机的现象。 为了避免这种情况,可以采用多级缓存架构,设置不同的超时时间,避免缓存同时失效。 同时,也可以设置热点数据永久不过期,避免热点数据集中过期。 另外,还可以使用限流和降级等手段来应对高并发情况。