java学习3-redis集成
背景:
在Spring Boot项目中集成Redisson的详细教程。利用Redisson,你可以更轻松地在Java应用中操作Redis,并实现各种分布式数据结构与服务。
1、创建项目与依赖
首先,创建一个新的Spring Boot项目,并在pom.xml中添加Redisson的Starter依赖
<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.16.0</version>
</dependency>配置连接信息
在application.yml(或application.properties)中配置Redis服务器的基本连接信息
spring:redis:host: localhost # 你的Redis服务器地址port: 6379 # Redis端口,默认6379# 如果Redis设置了密码,需要配置password项# password: your_redis_password_here核心配置与基础操作
完成基础配置后,你可以开始使用RedissonClient执行一些基础操作。
1、注入RedissonClient
在Spring Boot中,配置好依赖和连接信息后,你可以直接在需要的地方注入RedissonClient对象
@Autowired
private RedissonClient redissonClient;2、基础键值对操作
使用RBucket可以方便地操作字符串类型的键值对
public void basicOperations() {// 获取一个名为"myKey"的存储桶RBucket<String> bucket = redissonClient.getBucket("myKey");// 设置键值,并可设置过期时间bucket.set("这是一条缓存数据", 10, TimeUnit.MINUTES); // 10分钟后过期// 获取值String value = bucket.get();System.out.println("获取到的值: " + value);// 删除键// bucket.delete();
}操作分布式集合
Redisson提供了多种分布式集合。以下是以RMap(分布式Map)为例的简单使用
public void useDistributedMap() {// 获取一个名为"userMap"的分布式MapRMap<String, String> userMap = redissonClient.getMap("userMap");// 向Map中存放数据userMap.put("user001", "用户张三的信息");userMap.put("user002", "用户李四的信息");// 根据键获取值String userInfo = userMap.get("user001");System.out.println("用户001的信息: " + userInfo);// 遍历Map的所有键for (String key : userMap.keySet()) {System.out.println("Key: " + key);}
}使用缓存注解简化开发
除了直接使用RedissonClient,你还可以结合Spring的缓存注解来简化缓存代码的编写
1、启用缓存支持
在Spring Boot的主应用类或者配置类上添加@EnableCaching注解:
@SpringBootApplication
@EnableCaching // 启用Spring的缓存支持
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}2、使用注解管理缓存
在Service层的方法上使用缓存注解,Spring会自动处理数据的缓存与读取
@Service
public class UserService {// @Cacheable: 方法执行前先检查缓存,如果缓存存在,直接返回缓存数据@Cacheable(value = "userCache", key = "#userId")public User getUserById(String userId) {// 模拟从数据库查询用户信息System.out.println("从数据库查询用户: " + userId);User user = new User();user.setId(userId);user.setName("用户:" + userId);return user;}// @CacheEvict: 用于清除缓存@CacheEvict(value = "userCache", key = "#userId")public void updateUser(String userId) {// 更新用户信息...System.out.println("更新用户数据,并清除缓存: " + userId);}// @CachePut: 无论如何都执行方法,并将结果放入缓存@CachePut(value = "userCache", key = "#user.id")public User updateUserProfile(User user) {// 更新用户资料...System.out.println("更新用户资料,并刷新缓存");return user;}
}