Java开发在项目中如何引入Redis缓存
程序员文章站
2022-06-21 14:15:09
在webshop-prodect项目的pom.xml文件中引入相关依赖,如下: org.springframework.boot spring-boot-starter-data-redis ...
在webshop-prodect项目的pom.xml文件中引入相关依赖,如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <!--排除redis的异步客户端lettuce--> <exclusions> <exclusion> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> </exclusion> </exclusions> </dependency> <!--引入redis的客户端jedis--> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency>
修改webshop-prodect项目的application.yml文件,加上redis的相关配置,如下:
新建redis的配置类RedisConfig,具体内容如下:
package com.example.springboot.redis; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.RedisSerializer; import javax.annotation.PostConstruct; @Configuration public class RedisConfig { @Autowired private RedisTemplate redisTemplate; @PostConstruct public void init() { initRedisTemplate(); } /**
* 设置redis的key-value序列化器为字符串序列化器
*/ private void initRedisTemplate() { RedisSerializer stringSerializer = redisTemplate.getStringSerializer(); redisTemplate.setKeySerializer(stringSerializer); redisTemplate.setHashKeySerializer(stringSerializer); redisTemplate.setValueSerializer(stringSerializer); redisTemplate.setHashValueSerializer(stringSerializer); } }
之后就可以使用注入RedisTemplate类来操作redis中的相应数据,或者使用SpringCache的注解方式来操作redis中数据,而哪些数据是可以放入redis的,需要根据业务情况做分析,读多写少的数据放入redis可以大程度减少与数据库的磁盘交互,基于内存的数据读取可以极大的优化数据查询性能,但是如果是写多读少的数据,要考虑的点就比较多了,如何保证缓存一致性就是一个大问题,是采用双写模式还是失效模式,解决方案就还得针对到具体的数据类型了,比如如果要求数据是强一致性的,那么建议加锁排队,保证操作数据的顺序,如果要求数据是最终一致性,可以容忍短时间的数据不一致,那么给缓存数据加上过期时间即可,当然了,还有一种类型的锁叫做读写锁,可以做到读读操作时无锁,而只要有写操作发生就加锁,阻塞后续的操作,这样在写时就可以保证数据的一致性,而读时的性能又不会受影响。
本文地址:https://blog.csdn.net/weixin_38106322/article/details/108855266