SpringBoot整合Spring Data Redis

Redis

Redis 遵守BSD协议,是一个高性能的key-value键值对的非关系型数据库。Redis运行在内存中,所有的操作都是原子性的,支持事务,读写速度每秒可执行上万次。

Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

Spring Data Redis

官方文档: https://spring.io/projects/spring-data-redis

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
	<groupId>com.ronin</groupId>
	<artifactId>redis_demo</artifactId>
	<version>1.0.0-SNAPSHOT</version>
	<name>redis_demo</name>
	<packaging>jar</packaging>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<!-- Spring Boot Begin -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!-- Spring Boot End -->
		<!-- Spring Data -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>
		<!-- MySql Connection -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!-- Lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>
		<!-- Apacher Common -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>
application.yml
server: 
  port: 9004
spring: 
  application:  
    name: redis-demo
  datasource:  
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.55.136:3306/article?characterEncoding=UTF8
    username: root
    password: 123456
  jpa: 
    # 数据库类型
    database: MySQL
    # 开启控制台打印sql语句
    show-sql: true
    hibernate:
      ddl-auto: update
# 192.168.55.136:6379 不写端口,默认是6379
  redis:
    host: 192.168.55.136
Service
@Service
@Transactional
public class ArticleService {

	@Autowired
	private ArticleDao articleDao;
	//注入spring data redis提供的RedisTemplate模板
	@Autowired
	private RedisTemplate redisTemplate;
	
	/**
	 * 根据ID查询实体
	 * @param id
	 * @return
	 */
	public Article findById(String id) {
		//从缓存中提取
		Article article = (Article) redisTemplate.opsForValue().get("article_" + id);
		//如果缓存没有则到数据库查询并放入缓存,设置有效时间10秒
		if(article == null){
			//从数据库中查询数据
			article = articleDao.findById(id).get();
			//将数据存放到redis缓存中
			redisTemplate.opsForValue().set("article_" + id,article,10, TimeUnit.SECONDS);
		}
		return article;
	}
	
	/**
	* 修改
	 * @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);
	}
}

注解方式

Spring Data Redis 不仅提供了使用 RedisTemplate 模板操作的方式,它还有提供使用注解操作 Redis 的方式。

使用注解方式开发,需要在 Application.java 启动类中添加 @EnableCaching 注解

@SpringBootApplication
@EnableCaching
public class ArticleApplication {
	public static void main(String[] args) {
		SpringApplication.run(ArticleApplication.class, args);
	}
}
Service

@Cacheable 用于增、查操作,需要提供两个属性:
key: 存入 redis 缓存中的 key 值
value:类似于区域名,在存入 redis 时会开启一块区域存放同一 value 的数据,之后的同 value 操作都会在该区域中查找

@CacheEvict 用于更新、删除操作,也需要提供 key、value 两个属性来匹配

@Service
@Transactional
public class ArticleService {

	@Autowired
	private ArticleDao articleDao;

	/**
	 * 根据ID查询实体
	 * @param id
	 * @return
	 */
	@Cacheable(key = "#id",value = "article")
	public Article findById(String id) {
		return articleDao.findById(id).get();
	}
	
	/**
	 * 修改
	 * @param gathering
	 */
	@CacheEvict(key = "#article.id",value = "article")
	public void update(Article article) {
		articleDao.save(article);
	}

	/**
	 * 删除
	 * @param id
	 */
	@CacheEvict(key = "#id",value = "article")
	public void deleteById(String id) {
		articleDao.deleteById(id);
	}

}

测试

启动服务,通过 api 访问

第一次访问,控制台打印查询数据库的 sql 语句

测试数据是否真的放入缓存,多访问几次方法,查看是否还会打印 sql 语句,如果没有打印,说明数据是从缓存中获取的!!!

Spring Data Redis 基本案例成功!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值