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を変更し、スプリングノードの下に構成を追加します

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 サービスレイヤー

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のdeleteメソッドを変更します


	/**
	 * 修改
	 * @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 方法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 方法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