redis缓存

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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值