3.1 SpringDataRedis

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;
    }

猜你喜欢

转载自blog.csdn.net/qq_45850872/article/details/107878785
3.1