开始之前先了解一下使用redis作为缓存中间件有那些缺点
1.缓存穿透
当查询请求发送过来的时候,通过redis的key未查到对应的数据,请求会直接打到数据库上,这种被称为:缓存穿透。可能情况redis宕机。
2.缓存击穿
当查询请求发送过来的时候,请求过来的key在redis中不存在,所有的请求直接打到数据库上,这种情况被称为:缓存击穿。
3.缓存雪崩
当大量的查询请求发送过来的时候,在redis中未查询到数据,穿过redis,直接将大量请求打到redis数据库上,数据库受不了这么大的压力,直接崩了,因为请求过去数据库要自己开辟内存,这种被称为:缓存雪崩。一般这种情况发生了,就gg了。
进入正题
springboot项目使用redis已经很方便了,接下来我按照步骤一一为大家呈现
- 在项目中引入所需的pom文件
- 配置相应的redisConfig(建议使用的时候直接继承)
- 写具体的redisDao的实现
1.引pom
<!-- redis 的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<!-- 过滤lettuce,使用jedis作为redis客户端 -->
<exclusions>
<!-- 过滤lettuce,使用jedis作为redis客户端 -->
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.7.1</version>
</dependency>
集成好的引入直接用即可,这里使用jedis排除lettuce
配置好对应的redis的用户名,密码,端口号等
springboot项目扫配置文件顺序是:properties->yml
2.写配置
继承调用配置
@Component
public class RedisBase {
@Resource
public RedisTemplate<String, Object> redisTemplate;
public HashOperations<String, String, Object> redisHashHelp ;
public ListOperations<String, Object> redisListHelp ;
public ValueOperations<String, Object> redisValueHelp;
public SetOperations<String, Object> redisSetHelp;
@PostConstruct
private void init(){
opsForListHelp = redisTemplate.opsForList();
opsForHashHelp = redisTemplate.opsForHash();
opsForValueHelp = redisTemplate.opsForValue();
opsForSetHelp = redisTemplate.opsForSet();
}
}
序列化配置
@EnableCaching
@Configuration
public class GlobalRedisConfig {
@Resource
private RedisConnectionFactory redisConnectionFactory;
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
RedisSerializer<String> stringSerializer = new StringRedisSerializer();
// key序列化
redisTemplate.setKeySerializer(stringSerializer);
// value序列化
redisTemplate.setValueSerializer(RedisSerializer.json());
// Hash key序列化
redisTemplate.setHashKeySerializer(stringSerializer);
// Hash value序列化
redisTemplate.setHashValueSerializer(RedisSerializer.json());
redisTemplate.setEnableDefaultSerializer(true);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
3.写redis的接口和实现类
这里就要根据业务需求进行编写了
建好储存数据转换的RO
更据需求选择使用数据类型常用的就:字符串(strings),散列(hashes)
接口
public interface RedisDao {
public void insert(String key, String ro);
public String find(String key);
}
实现
@Component
public class RedisDaoImpl extends RedisBaseOps implements RedisDao {
@Override
public void insert(String key, String ro) {
super.opsForValueHelp.set(key, ro);
}
@Override
public String fing(Sting key) {
return super.opsForValueHelp.get(key);
}
}
这里需要注意key的设计,这个特别重要!!!
这里只是简单的演示下,详细使用请多看redis官网
人人编程网详细教程网站这里也分享一下,一定要根据实际业务进行编写使用!