谷粒学院-首页数据显示-添加Redis缓存、Springboot缓存注解

本文详细介绍了Redis的特性,包括高速读写能力、数据持久化、原子性操作及丰富的数据结构等。通过Spring Boot项目集成Redis,展示了如何配置RedisTemplate和CacheManager,以及使用@Cacheable、@CachePut和@CacheEvict注解实现缓存操作。通过实例展示了如何在首页数据接口中应用Redis缓存,显著提高了数据读取速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis介绍

Redis是当前比较热门的Nosql系统之一,它是一个开源的使用ANSI C语言编写的key-value存储系

统(区别于MySQL的二维表格的形式存储。)。和Memcache类似,但很大程度补偿了Memcache

的不足。和Memcache一样,Redis数据都是缓存在计算机内存中,不同的是,Memcache只能将

数据缓存到内存中,无法自动定期写入硬盘,这就表示,一断电或重启,内存清空,数据丢失。所

以Memcache的应用场景适用于缓存无需持久化的数据。而Redis不同的是它会周期性的把更新的

数据写入磁盘或者把修改操作写入追加的记录文件,实现数据的持久化。

Redis的特点:

1、Redis读取的速度是110000次/s,写的速度是81000次/s;

2、原子 。Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。

3、支持多种数据结构:string(字符串);list(列表);hash(哈希),set(集合);zset(有序集合)

4、持久化,集群部署

5、支持过期时间,支持事务,消息订阅


项目集成Redis

1、在common模块添加依赖

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

<!-- spring2.X集成redis所需common-pool2-->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.6.0</version>
</dependency>

2、在service_base模块添加redis配置文件RedisConfig

@EnableCaching //开启缓存
@Configuration  //配置类
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setConnectionFactory(factory);
        //key序列化方式
        template.setKeySerializer(redisSerializer);
        //value序列化
        template.setValueSerializer(jackson2JsonRedisSerializer);
        //value hashmap序列化
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        return template;
    }

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        //解决查询缓存转换异常的问题
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        // 配置序列化(解决乱码的问题),过期时间600秒
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofSeconds(600))
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                .disableCachingNullValues();
        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                .cacheDefaults(config)
                .build();
        return cacheManager;
    }
}

3、添加redis缓存

由于首页数据变化不是很频繁,而且首页访问量相对较大,所以我们有必要把首页接口数据缓存到

redis缓存中,减少数据库压力和提高访问速度。

改造service_cms模块首页banner接口,首页课程与讲师接口写法类似

Spring Boot缓存注解说明

(1)缓存@Cacheable

根据方法对其返回结果进行缓存,下次请求时,如果缓存存在,则直接读取缓存数据返回;如果缓

存不存在,则执行方法,并把返回的结果存入缓存中。一般用在查询方法上。

(2)缓存@CachePut

使用该注解标志的方法,每次都会执行,并将结果存入指定的缓存中。其他方法可以直接从响应的

缓存中读取缓存数据,而不需要再去查询数据库。一般用在新增方法上。

(3)缓存@CacheEvict

使用该注解标志的方法,会清空指定的缓存。一般用在更新或者删除方法上

修改CrmBannerServiceImpl类中的方法,添加redis缓存注解:

注意'selectIndexList'


本地启动Redis

在service_cms模块配置文件添加redis配置

测试:

启动CmsApplication,时间是5.34秒

查询redis的key,发现多了个key

代码是:

@Cacheable(value = "banner",key = "'selectIndexList'")

我们可以推测规则就是

value::key

用RedisDesktopManager客户端也可以看到变化

第二次测试,发现时间204毫秒,缩短了很多,因为先查了redis缓存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZHOU_VIP

您的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值