spring boot整合redis
安装
启动redis服务
可以双击redis-server.exe文件,也可以进入改目录,使用命令启动服务
连接redis服务
进入redis安装目录,使用以下命令连接:
redis-cli.exe -h 127.0.0.1 -p 6379
基于注解整合redis
1.添加redis的依赖
<!-- springboot 整合redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.4.5</version>
</dependency>
2.使用yml文件配置redis
#springboot整合redis配置
#密码默认为空
spring:
redis:
host: 127.0.0.1
port: 6379
3.启动类上添加@EnableCaching注解(目的是开启缓存)
4.这里以查询方法举例
使用注解@Cacheable(cacheNames=“user”,unless="#result==null"),该方法作用于要使用缓存的方法上。
1.cacheNames:定义缓存空间的名称
2.unles:当result=null时,不进行缓存(就是查询到的数据为null时不进行缓存)
5.对相关的pojo类实现Serializable接口,让类序列化(不然查询的数据无法被缓存且会报错)
常用的几个注解
1.@Cacheable:作用于数据查询的方法
2.@CachePut:作用于更新方法
3.@CacheEvict: 作用于数据删除
4.@CacheConfig(cacheNames=“user”):统筹管理@Cacheable、@CachePut、@CacheEvict注解标注的方法中的公共属性(包括cacheNames,keyGenerator、cacheManager、cacheResolver)
使用@CacheConfig好处是:使用@CacheConfig(cacheNames=“user”)注解可以统一设置缓存空间的名称,这样@Cacheable注解就不需要再设置缓存空间的名称了。如果@Cacheable等注解也设置了,则采取就近原则。
注意点:
1.pojo类必须序列化
2.必须声明缓存空间名称(即:使用@CacheConfig(cacheNames=“user”)注解及其@Cacheable等注解声明)
基于api的Redis缓存实现
1.继承CrudRepository接口,第一个参数为pojo类,第二个为主键的引用类型
@Repository
public interface UserRepository extends CrudRepository<User,Integer> {
List<User> findById(int id);
Optional<User> findByAge(int age);
Optional<User> findBySex(String sex);
Optional<User> findByName(String name);
// 更新数据
// int updateUser(String name,int id);
// 删除数据
int deleteUser(int id);
}
2.编写用于对缓存控制的类ApiUserServices,使用@Autowired注入RedisTemplate实例。
**
* 基于redis的api的缓存操作
* 通过该api:1.查询缓存 2.可以更新缓存 3.删除缓存 4.定制缓存过期时间
* 这里使用Optional接收数据好处:不用像List集合那样比较麻烦的需要判读为空的情况
*
*/
@Service
public class ApiUserServices {
@Autowired
private UserRepository userRepository;
Logger logger= LoggerFactory.getLogger(ApiUserServices.class);
@Autowired
private RedisTemplate redisTemplate;
// 查询数据
public User findById(int userID){
// 从缓存中查询数据 如果缓存中有对应数据就返回,否者从redis数据库中查询
Object object=redisTemplate.opsForValue()