【十次方社交網站項目】MySql建庫建表、緩存處理(redis、Spring Cache)

一、MySql建庫建表(容器)

systemctl start docker

docker images

在這裏插入圖片描述
在這裏插入圖片描述

二、緩存處理

1、以docker的形式搭建Redis 服務

docker run -di --name=lee_redis -p 6379:6379 redis

2、SpringDataRedis

Spring-data-redis是spring大家族的一部分,提供了在srping應用中通過簡單的配置訪問redis服務,對reids底層開發包(Jedis, JRedis, and RJC)進行了高度封裝,RedisTemplate提供了redis各種操作

3、例子:實現文章的緩存處理

(1)在social-article的pom.xml中引入依賴

  <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-redis</artifactId>
   </dependency>

(2)修改application.yml ,在spring節點下添加配置

  redis:
    host: 192.168.25.136

(3)修改ArticleService 引入RedisTemplate,並修改findById方法

	@Autowired
	private RedisTemplate redisTemplate;

	/**
	 * 根據ID查詢實體
	 * @param id
	 * @return
	 */
	public Article findById(String id) {

		// 先從緩存中查詢當前對象
		Article article = (Article) redisTemplate.opsForValue().get("article_" + id);

		// 如果緩存沒有則到數據庫查詢並放入緩存
		if (article == null) {
			// 從數據庫中進行查詢
			article = articleDao.findById(id).get();
			// 存入緩存
			redisTemplate.opsForValue().set("article_" + id, article);
		}
		return article;
	}

這樣在查詢的時候,就會自動將文章放入緩存

(3)修改或刪除後清除緩存

	/**
	 * 修改
	 * @param article
	 */
	public void update(Article article) {
		// 刪除緩存
		redisTemplate.delete( "article_" + article.getId() );
		articleDao.save(article);
	}

	/**
	 * 刪除
	 * @param id
	 */
	public void deleteById(String id) {
		// 刪除緩存
		redisTemplate.delete( "article_" + id );
		articleDao.deleteById(id);
	}

(4)緩存過期處理

修改findById方法 ,設置1天的過期時間

 // 存入緩存 設置過期時間爲1天
 redisTemplate.opsForValue().set("article_" + id, article,1, TimeUnit.DAYS);

三、Spring Cache

Spring Cache使用方法與Spring對事務管理的配置相似。Spring Cache的核心就是對某
個方法進行緩存,其實質就是緩存該方法的返回結果,並把方法參數和結果用鍵值對的
方式存放到緩存中,當再次調用該方法使用相應的參數時,就會直接從緩存裏面取出指
定的結果進行返回。

  • 常用註解
    @Cacheable-------使用這個註解的方法在執行後會緩存其返回結果。
    @CacheEvict--------使用這個註解的方法在其執行前或執行後移除Spring Cache中的某些
    元素。
	/**
	 * 根據ID查詢實體
	 * @param id
	 * @return
	 */
	@Cacheable(value = "gathering",key = "#id")
	public Gathering findById(String id) {
		return gatheringDao.findById(id).get();
	}

	/**
	 * 修改
	 * @param gathering
	 */
	@CacheEvict(value = "gathering",key = "#gathering.id")
	public void update(Gathering gathering) {
		gatheringDao.save(gathering);
	}

	/**
	 * 刪除
	 * @param id
	 */
	@CacheEvict(value = "gathering",key = "#id")
	public void deleteById(String id) {
		gatheringDao.deleteById(id);
	}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章