1,缓存处理SpringDataRedis
可以使用这个来代替其他技术的缓存,原项目使用的是lua、Canal实现广告缓存。
1.1 实现文章的缓存处理
1.1.1` 引入依赖
在 tensquare_article 的 pom.xml 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
1.1.2
配置文件
修改 application.yml ,在 spring 节点下添加配置
server:
port: 9004
spring:
application:
name: tensquare-article #指定服务名
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.2.2:3306/tensquare_article?characterEncoding=UTF8
username: root
password: 123456
jpa:
database: MySQL
show-sql: true
redis:
host: 192.168.66.133
5.1.3
service层
修改 ArticleService 引入 RedisTemplate,并修改 findById 方法
/**
* 根据ID查询实体
* @param id
* @return
*/
/*public Article findById(String id) {
//1.先从redis查询是否有该文章数据
BoundValueOperations bos = redisTemplate.boundValueOps("article_" + id);
Article article = (Article)bos.get();
//Article article = (Article)redisTemplate.opsForValue().set("key","value");
//1.1 没有,则从数据库查询
if(article==null){
article = articleDao.findById(id).get();
bos.set(article);
//设置过期时间
bos.expire(30, TimeUnit.SECONDS);
}
//1.2 有,直接返回redis数据
return article;
}*/
public Article findById(String id) {
//1.先从redis查询是否有该文章数据
Article article = (Article)redisTemplate.opsForValue().get("article_"+id);
//1.1 没有,则从数据库查询
if(article==null){
article = articleDao.findById(id).get();
redisTemplate.opsForValue().set("article_"+id,article,30,TimeUnit.SECONDS);
}
//1.2 有,直接返回redis数据
return article;
}
1.2 修改或删除后清除缓存
概述:如果修改、删除了数据,要从缓存中删除,如果没有删除缓存中的数据,那查询会查询到旧的数据
修改 ArticleService中修改删除方法
/**
* 修改
* @param article
*/
public void update(Article article) {
articleDao.save(article);
//删除缓存
redisTemplate.delete("article_"+article.getId());
}
/**
* 删除
* @param id
*/
public void deleteById(String id) {
articleDao.deleteById(id);
//删除缓存
redisTemplate.delete("article_"+id);
}
1.3 缓存过期处理
概述,设置30秒过期
1.3.1
方法一
public Article findById(String id) {
//1.先从redis查询是否有该文章数据
BoundValueOperations bos = redisTemplate.boundValueOps("article_" + id);
Article article = (Article)bos.get();
//1.1 没有,则从数据库查询
if(article==null){
article = articleDao.findById(id).get();
bos.set(article);
//设置过期时间
bos.expire(30, TimeUnit.SECONDS);
}
//1.2 有,直接返回redis数据
return article;
}
1.3.2
方法二
public Article findById(String id) {
//1.先从redis查询是否有该文章数据
Article article = (Article)redisTemplate.opsForValue().get("article_"+id);
//1.1 没有,则从数据库查询
if(article==null){
article = articleDao.findById(id).get();
redisTemplate.opsForValue().set("article_"+id,article,30,TimeUnit.SECONDS);
}
//1.2 有,直接返回redis数据
return article;
}