好的,下面是带注释的代码:
1. 添加Redis依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. 配置Redis连接:
spring.redis.host=localhost
spring.redis.port=6379
3. 创建一个缓存管理类:
@Component
public class RedisCacheManager implements CacheManager {
private final RedisTemplate<String, Object> redisTemplate;
public RedisCacheManager(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
@Override
public Cache getCache(String name) {
return new RedisCache(name, redisTemplate);
}
@Override
public Collection<String> getCacheNames() {
return Collections.emptyList();
}
}
- `@Component`注解表示这是一个Spring Bean。
- `RedisCacheManager`实现了`CacheManager`接口,用于管理缓存。
- `RedisTemplate`是Spring提供的Redis客户端模板,用于操作Redis。
- `getCache`方法用于获取一个指定名称的缓存实例。
- `getCacheNames`方法返回所有缓存的名称。
4. 创建一个Redis缓存类:
public class RedisCache implements Cache {
private final String name;
private final RedisTemplate<String, Object> redisTemplate;
public RedisCache(String name, RedisTemplate<String, Object> redisTemplate) {
this.name = name;
this.redisTemplate = redisTemplate;
}
@Override
public String getName() {
return name;
}
@Override
public Object getNativeCache() {
return redisTemplate;
}
@Override
public ValueWrapper get(Object key) {
Object value = redisTemplate.opsForValue().get(key.toString());
return value != null ? new SimpleValueWrapper(value) : null;
}
@Override
public <T> T get(Object key, Class<T> type) {
Object value = redisTemplate.opsForValue().get(key.toString());
return value != null ? type.cast(value) : null;
}
@Override
public void put(Object key, Object value) {
redisTemplate.opsForValue().set(key.toString(), value);
}
@Override
public void evict(Object key) {
redisTemplate.delete(key.toString());
}
@Override
public void clear() {
redisTemplate.execute((RedisCallback<Object>) connection -> {
connection.flushDb();
return null;
});
}
}
- `RedisCache`实现了Spring的`Cache`接口,用于操作缓存。
- `name`表示缓存的名称。
- `redisTemplate`是Redis客户端模板,用于操作Redis。
- `getName`方法返回缓存的名称。
- `getNativeCache`方法返回Redis客户端模板。
- `get`方法用于获取缓存中指定键的值。
- `put`方法用于向缓存中添加一个键值对。
- `evict`方法用于从缓存中删除指定键的值。
- `clear`方法用于清空缓存。
5. 在需要使用缓存的地方注入CacheManager:
@Service
public class MyService {
private final CacheManager cacheManager;
public MyService(CacheManager cacheManager) {
this.cacheManager = cacheManager;
}
@Cacheable(value = "myCache", key = "#id")
public String getValueById(String id) {
// 从数据库中获取数据
return "value";
}
@CachePut(value = "myCache", key = "#id")
public void updateValueById(String id, String value) {
// 更新数据库中的数据
}
@CacheEvict(value = "myCache", key = "#id")
public void deleteValueById(String id) {
// 从数据库中删除数据
}
}
- `@Service`注解表示这是一个Spring Service Bean。
- `MyService`类中注入了`CacheManager`实例,用于操作缓存。
- `@Cacheable`注解表示这个方法的返回值将被缓存。
- `@CachePut`注解表示这个方法的返回值将被缓存,并且会更新缓存中的值。
- `@CacheEvict`注解表示这个方法将从缓存中删除指定键的值。文章来源:https://www.toymoban.com/news/detail-486736.html
下面是一个使用上面提供的缓存管理类和Redis缓存类的例子:文章来源地址https://www.toymoban.com/news/detail-486736.html
@RestController
public class MyController {
private final MyService myService;
public MyController(MyService myService) {
this.myService = myService;
}
@GetMapping("/get/{id}")
public String getValueById(@PathVariable String id) {
return myService.getValueById(id);
}
@PostMapping("/update")
public void updateValueById(@RequestParam String id, @RequestParam String value) {
myService.updateValueById(id, value);
}
@DeleteMapping("/delete/{id}")
public void deleteValueById(@PathVariable String id) {
myService.deleteValueById(id);
}
}
-
MyController
是一个Spring MVC的控制器,用于处理HTTP请求。 -
MyService
是一个Spring Service Bean,用于操作缓存。 -
getValueById
方法使用@Cacheable
注解,表示这个方法的返回值将被缓存,如果缓存中存在指定键的值,则直接返回缓存中的值,否则从数据库中获取值并缓存起来。 -
updateValueById
方法使用@CachePut
注解,表示这个方法的返回值将被缓存,并且会更新缓存中的值。 -
deleteValueById
方法使用@CacheEvict
注解,表示这个方法将从缓存中删除指定键的值。 - 在
MyController
中注入了MyService
实例,用于操作缓存。 -
@GetMapping
、@PostMapping
和@DeleteMapping
注解分别表示处理HTTP GET、POST和DELETE请求。
到了这里,关于springboot redis实现缓存的例子的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!