使用Springboot-data-redis整合redis

使用Springboot-data-redis整合redis

1.安装redis可视化工具(RDM)

Releases · tporadowski/redis (github.com)

2.引入依赖

Springboot-data-redis

<!--添加springboot-data-redis依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>

3.在配置文件中修改配置项

#redis配置
spring.redis.host=localhost
spring.redis.port=6379

4.简单测试基于

SpringRedisTemplate操作redis数据库

在测试类中进行简单读写

//注入类StringRedisTemplate
@Autowired
private StringRedisTemplate stringRedisTemplate;
//向redis里面写数据
stringRedisTemplate.opsForValue().set("name","张三");
//从redis里面读取数据
String name = stringRedisTemplate.opsForValue().get("name");
System.out.println(name);

5.实际应用

使用编码形式使用(除此之外还可以使用注解方式使用)

	@Autowired
	private StringRedisTemplate stringRedisTemplate;
	@GetMapping("/all")
	public Result<?> getAll(@Param(value = "") String categoryname){
		List<Category> list = null;
		//先从redis中找list
		String listStr = stringRedisTemplate.opsForValue().get("list");
		if(StrUtil.isBlank(listStr)){
			//如果没有数据就去mysql中获取数据
			list = categoryService.getAll(categoryname);
			//将取出来的数据存入redis
			stringRedisTemplate.opsForValue().set("list", JSONUtil.toJsonStr(list));
		}else {
			//直接使用redis中的数据,但是需要将字符串转为java对象
			list= JSONUtil.toBean(listStr, new TypeReference<List<Category>>() {
			}, true);
		}
		return Result.success(list);

	}

6.实现结果

之前每次都是在mysql数据库中读取数据,刷新页面较慢,整合redis之后,第一次读取数据的时候还是从数据库读取,读取完数据响应给前端的同时,数据以键值对的形式存到redis中,第二次刷新的时候就会很快,并且这次刷新不会读取数据库,直接从redis缓存读取数据。

7.存在的问题,解决

问题现象:当前页面有数据变化的时候,数据库操作成功,但页面数据没有变化,还是数据变化之前的旧数据

原因:页面数据变动后,还是使用之前的缓存,没有进行缓存更新

解决:在数据变动之前清空缓存,需要再次使用的时候自动更新缓存

//当有数据更新的时候,删除redis缓存数据(在增删改的方法中都调用此方法,传入缓存中要清空的键)效果:更新缓存
	private void delRedis(String key){
		stringRedisTemplate.delete(key);
	}

8.附录(注解开发)

@Cacheable`注解的作用:缓存被调用方法的结果(返回值),已经缓存就不再调用注解修饰的方法,适用于查询接口

@CachEvict 的作用 主要针对方法配置,能够根据一定的条件对缓存进行清空

你可能感兴趣的:(redis,spring,boot,java)