redis缓存:
redis是非关系型数据库
数据格式:key = value
步骤:
下载安装
启动redis服务
在项目中进行redis缓存
添加redis依赖(RedisTemplate模板类)
Redis-x64-3.2.100.zip解压打开
redis-server.exe //服务端(服务器) 主要用(启动)
加入依赖
<!--redis服务器启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
服务层实现类注入模板
@Autowired
private RedisTemplate redisTemplate;
然后在此实现类中的方法(需要用到redis的方法中)写逻辑
首先我们要知道redis的规则是什么样子的,也就是说它的数据形式是什么样的?
数据格式:key = value
规则我们自己去设定,如:
key是什么?value又是什么?
如:缓存文章详情:
key:(代表文章+id)article_id 例如:article_1、article_2
value:(代表文章对象)Article对象
/**
* 根据id查询
* @param id
* @return
*/
@Override
public Article findById(Integer id) {
//添加redis(之前是直接从数据库调)
//1.先从redis缓存中查询
Article article = (Article) redisTemplate.opsForValue()
.get("article_" + id);//数据格式:key = value 那key是什么?需要先定义好
//2.判断,如果有数据,直接用
if (article == null) {
//3.如果没有,再从数据库查询
article = articleMapper.findById(id);
//4.缓存查询结果
redisTemplate.opsForValue().set("article_" + id,article);
}
return article;
}
这个时候肯能会报一个序列话错误,需要我们给实体类加一个序列化接口
Serializable
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("t_article") //代表数据库的表名
public class Article implements Serializable {
/**
* 文章id
*/
private Integer id; //文章id
/**
* 文章标题
*/
private String title; //文章标题
/**
* 文章具体内容
*/
private String content; //文章具体内容
/**
* 文章创建时间
*/
private Date created; //文章创建时间
/**
* 文章修改时间
*/
private Date modified; //文章修改时间
/**
* 文章分类
*/
private String categories; //文章分类
/**
* 文章标签
*/
private String tags; //文章标签
/**
* 是否允许评论,默认为true
*/
private boolean allowComment; //是否允许评论,默认为true
/**
* 文章缩略图
*/
private String thumbnail; //文章缩略图
/**
* 文章的点击量
*/
private Integer hits;
/**
* 文章的评论量
*/
private Integer commentsNum;
}
然后打开可视化工具去确认一下有没有
可是都是二级制的内容,我们需要修改一下它的序列化
创建config层
@Configuration //Redis配置类
public class RedisConfig {
//固定模板
@Bean
@SuppressWarnings("all")
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String,Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(factory);
//json序列化配置
Jackson2JsonRedisSerializer jsonRedisSerializer =
new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jsonRedisSerializer.setObjectMapper(mapper);
//String序列化
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
// hash的key采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
// value序列化采用 Jackson
template.setValueSerializer(jsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}