您的位置:首页 > 数据库 > Redis

Springboot简单整合redis

2020-07-15 06:18 232 查看

这里使用的redisTemplate直接连接redis,没有使用lettuce

1.导入依赖

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

2.进行配置

这里配置redis地址,端口,密码等信息

spring:
redis:
password:
port: 6379
host: localhost

springboot的自动配置类会自动获取相关配置信息并存入到配置信息的类中,从源码中可以看到,已经自动配置了<object,object>和<string,string>类型的redisTemplate,但是多数使用<string,obeject>类型的redisTemplate,可以自己写一个配置类,注册一个string,object类型的进入容器

Redis的自动配置类

自己的配置类

在网上看了很多json序列化都是用的jackson的序列化工具,然后发现阿里的fastjson也自带一个redis的序列器,而且不用配置objectmapper,相当好用

@Configuration
public class RedisConfig {

@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<String, Object> template=new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
//json序列化器
FastJsonRedisSerializer<Object> fastJsonRedisSerializer=new FastJsonRedisSerializer<Object>(Object.class);
//设置key序列化方式
template.setKeySerializer(new StringRedisSerializer());
//设置hash的key序列化方式
template.setHashKeySerializer(new StringRedisSerializer());
//设置value的序列化方式
template.setValueSerializer(fastJsonRedisSerializer);
//设置hash的value的序列化方式
template.setHashValueSerializer(fastJsonRedisSerializer);
return template;
}
}

3.在业务层进行使用

使用redis对从数据库中查询的用户数据进行缓存,其中加入了线程锁,防止缓存中没有数据时,高并发的情况下,大量请求从数据库查找数据,造成缓存击穿

@Override
public List<SysUser> selectAllUser() {
//使用redis获取数据
List<SysUser> users = (List<SysUser>) redisTemplate.opsForValue().get("allUser");
//对键进行字符串序列化
redisTemplate.setKeySerializer(redisSerializer);
//双重检测锁
if (users==null) {
lock.lock();
try {
users = (List<SysUser>) redisTemplate.opsForValue().get("allUser");
if (users == null) {
users = userMapper.selectAllUser();
redisTemplate.opsForValue().set("allUser", users);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
return users;
}

并且,在插入,删除,更新数据的时候一定要同步更新缓存,不然会读取到旧数据

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: