缓存学习-redis,redisson分布式锁,SpringCache缓存使用
文章目录
前言
这里介绍一下,redis整合Springboot的简单使用
一、redis使用步骤
1.引入pom依赖
代码如下(示例):
<!-- 引入redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.配置文件yml
代码如下(示例):
spring:
#redis配置
redis:
host: localhost
port: 6379
2.使用redis
代码如下(示例):
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class ProductApplicationTest {
@Resource
private StringRedisTemplate stringRedisTemplate;
@Test
public void test02(){
ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue();
valueOperations.set("name","bgg");
System.out.println("-----:"+valueOperations.get("name"));
}
}
二、redisson分布式锁使用步骤
1.引入pom依赖
代码如下(示例):
<!-- 使用redis的分布式锁 -->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.16.4</version>
</dependency>
<!-- boot整合更方便 但是为了学习先使用上面-->
<!-- <dependency>-->
<!-- <groupId>org.redisson</groupId>-->
<!-- <artifactId>redisson-spring-boot-starter</artifactId>-->
<!-- <version>3.16.4</version>-->
<!-- </dependency>-->
2.编写redisson配置类
代码如下(示例):
package com.bgg.gulimall.product.config;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 配置redisson
* @author lmc
* @date 2021/11/19 14:07
*/
@Configuration
public class MyRedissonConfig {
/**
* 所有redisson的使用,都通过RedissonClient对象
* @return
*/
@Bean(destroyMethod = "shutdown")
public RedissonClient redisson(){
Config config = new Config();
//协议 redis:/rediss:
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
return Redisson.create(config);
}
}
3.使用redisson
代码如下(示例):使用redis缓存数据,并加锁
/**
* redis中查分类信息
* bug: springboot整合redis,默认使用的是lettuce,会出现堆外内存不足的异常,因为没有清理
* 解决:1.升级lettuce客户端 2.使用jedis(这是旧的,长时间未更新,暂时如此 pom.xml中修改)
* @return
*/
//TODO redis bug待解决
public Map<String, List<Catalog2Vo>> getCatelogJson1() {
/**
* 1.空结果缓存:解决缓存穿透
* 2.设置过期时间(加随机值):解决缓存雪崩
* 3.加锁:解决缓存击穿
*/
//1.加入缓存逻辑,存json字符串 json跨语言跨平台 序列化与反序列化
String catelogJson = redisTemplate.opsForValue().get("catelogJson");
if(StringUtils.isBlank(catelogJson)){
//2.缓存中没有,再从数据库查,并放入缓存
Map<String, List<Catalog2Vo>> map =