苍穹外卖项目解读(三) redis、cache缓存解读

前言

HM新出springboot入门项目《苍穹外卖》,笔者打算写一个系列学习笔记,“苍穹外卖项目解读”,内容主要从HM课程,自己实践,以及踩坑填坑出发,以技术,经验为主,记录学习,也希望能给在学想学的小伙伴一个参考。

注:本文章是直接拿到项目的最终代码,然后从代码出发,快速逆向学习技术经验! 可能需要一些前置知识

觉得文章有用可以关注点赞收藏期待更新^^,期待您的评论留言

苍穹外卖项目解读(一) 完整代码本地部署运行
苍穹外卖项目解读(二) 管理端JWT令牌、AOP注解开发、分页
苍穹外卖项目解读(三) redis、cache缓存解读

在这里插入图片描述

Redis

摘自https://ac.nowcoder.com/discuss/1139639?type=0&channel=-1&source_id=discuss_terminal_discuss_hot_nctrack

Redis:(Remote Dictionary Server)是一个使用 C 语言编写的,高性能非关系型的键值对数据库。与传统数据库不同的是,Redis 的数据是存在内存中的,所以读写速度非常快,被广泛应用于缓存方向。Redis可以将数据写入磁盘中,保证了数据的安全不丢失,而且Redis的操作是原子性的。

基本数据类型
1、String:最常用的一种数据类型,String类型的值可以是字符串、数字或者二进制,但值最大不能超过512MB。
2、Hash:Hash 是一个键值对集合。
3、Set:无序去重的集合。Set 提供了交集、并集等方法,对于实现共同好友、共同关注等功能特别方便。
4、List:有序可重复的集合,底层是依赖双向链表实现的。
5、SortedSet:有序Set。内部维护了一个score的参数来实现。适用于排行榜和带权重的消息队列等场景。

优点
1、基于内存操作,内存读写速度快。
2、支持多种数据类型,包括String、Hash、List、Set、ZSet等。
3、支持持久化。Redis支持RDB和AOF两种持久化机制,持久化功能可以有效地避免数据丢失问题。
4、支持事务。Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。
5、支持主从复制。主节点会自动将数据同步到从节点,可以进行读写分离。
6、Redis命令的处理是单线程的。Redis6.0引入了多线程,需要注意的是,多线程用于处理网络数据的读写和协议解析,Redis命令执行还是单线程的。
缺点
1、对结构化查询的支持比较差。
2、数据库容量受到物理内存的限制,不适合用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的操作。
3、Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。

更详细的redis相关知识请大家自行搜罗学习

spring:
  redis:
	host: localhost //redis服务主机地址
	port: 6379  //主机port
	password: 123456  //redis服务密码
	database: 1  //redis服务使用那个库db01
--------springframework RedisTemplate子类  StringRedisTemplate-----
public class StringRedisTemplate extends RedisTemplate<String, String> {
    public StringRedisTemplate() {//设置序列化器 string
        this.setKeySerializer(RedisSerializer.string());
        this.setValueSerializer(RedisSerializer.string());
        this.setHashKeySerializer(RedisSerializer.string());
        this.setHashValueSerializer(RedisSerializer.string());
    }

    public StringRedisTemplate(RedisConnectionFactory connectionFactory) {
        this();
        this.setConnectionFactory(connectionFactory); //连接工厂
        this.afterPropertiesSet();
    }

    protected RedisConnection preProcessConnection(RedisConnection connection, boolean existingConnection) {
        return new DefaultStringRedisConnection(connection);
    }
}



-------------------项目的redisconfg------------------------------------
public class RedisConfiguration {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置redis的连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置redis key的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}


操作redis,在服务端我们根据我们需求需要的类型,并是用opsForxxx()调用相关数据结构的存储
此外,简单的redis操作就是存、取、更新、删(过期),建议读者深入了解、系统学习redis

cache

1、SpringCache是Spring提供的一个缓存框架,在Spring3.1版本开始支持将缓存添加到现有的spring应用程序中,在4.1开始,缓存已支持JSR-107注释和更多自定义的选项。

2、Spring Cache利用了AOP,实现了基于注解的缓存功能,并且进行了合理的抽象,业务代码不用关心底层是使用了什么缓存框架,只需要简单地加一个注解,就能实现缓存功能了,做到了对代码侵入性做小。

3、由于市面上的缓存工具实在太多,SpringCache框架还提供了CacheManager接口,可以实现降低对各种缓存框架的耦合。它不是具体的缓存实现,它只提供一整套的接口和代码规范、配置、注解等,用于整合各种缓存方案,比如Caffeine、Guava Cache、Ehcache。

缓存的实现底层技术支持是CGLib动态代理,在目标方法调用前、后分别追加相应的缓存操作,以达到添加缓存、更新缓存、删除缓存的操作。

配置注解

(1)EnableCaching

标注于SpringBoot应用启动类上,添加此注解表示开启Spring Cache缓存;移除表示关闭缓存。如果在全局配置文件中添加如下配置,即使在启动类上标注EnableCaching注解,Spring Cache缓存然后是关闭状态。

spring:
cache:
type: none
如果应用中自定义独立于Spring容器的缓存,则不受此配置影响。

(2)CacheConfig

标注于类上,更具体的说是标注于业务服务类上。统一配置如下参数信息:苍穹外卖项目解读(三) redis、cache缓存解读_第1张图片

在类上统一进行配置,类下的方法自动继承相应的配置。

缓存注解

(1)Cacheable

添加缓存的核心注解,分两种情况:一是对应key值未有缓存数据,先执行方法,然后根据condition和unless条件决定是否添加缓存;二是对应key值已有缓存,不执行方法体,直接返回数据。
苍穹外卖项目解读(三) redis、cache缓存解读_第2张图片

(2)CachePut

更新缓存注解。不管对应key值是否有缓存数据,都执行。
苍穹外卖项目解读(三) redis、cache缓存解读_第3张图片

(3)CacheEvict

主动清除缓存注解。
苍穹外卖项目解读(三) redis、cache缓存解读_第4张图片

觉得文章有用可以关注点赞收藏期待更新^^期待您的评论留言

你可能感兴趣的:(JAVA开发,缓存,redis,数据库)