Open houdq opened 1 year ago
一般采用这种写法
采用各种reis 客户端和 API.比如Jredis api
Spring Data Redis 是 Spring Data 家族的一个项目,它为 Spring 应用程序提供了与 Redis 数据存储交互的支持。Spring Data Redis 通过 RedisTemplate 和 RedisConnectionFactory 为 Redis 提供了高级的 Redis 操作接口。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- RedisTemplate源码
@Autowired private RedisTemplate<String, Object> redisTemplate;
public void setValue(String key, Object value) { redisTemplate.opsForValue().set(key, value); }
public Object getValue(String key) { return redisTemplate.opsForValue().get(key); }
-注入RedisTemplate
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component;
@Component public class RedisService {
@Autowired
private RedisTemplate<String, String> redisTemplate;
public void setValue(String key, String value) {
redisTemplate.opsForValue().set(key, value);
}
public String getValue(String key) {
return redisTemplate.opsForValue().get(key);
}
}
### 注解法
如果你用 springboot,使用 @Cacheable 注解来实现 Redis 缓存非常简单,您只需要按照以下步骤即可:
1. 添加依赖:首先,在 pom.xml 文件中添加 spring-boot-starter-cache 和 spring-boot-starter-data-redis 依赖。
2. 配置 Redis:在 application.properties 或 application.yml 文件中配置 Redis 连接信息。
3. 创建缓存配置:在您的应用程序中创建一个缓存配置类,并使用 @Configuration 和 @EnableCaching 注解进行标注。在这个类中,您可以使用 CacheManagerBuilder.build() 方法来创建一个 RedisCacheManager 对象。
4. 使用 @Cacheable:在需要缓存的方法上使用 @Cacheable 注解,指定缓存名称以及需要缓存的数据 key。
下面是一个使用 @Cacheable 注解来实现 Redis 缓存的示例:
@Service public class UserService {
@Autowired
private UserRepository userRepository;
@Cacheable(value = "user", key = "#id")
public User getUserById(Long id) {
return userRepository.findById(id).orElse(null);
}
// 其他业务方法...
}
应用层操作
应用层和缓存服务器中间增加代理层
抛个砖! 回答这个问题先搞明白几个问题:
Redis is an open source (BSD licensed), in-memory data structure store used as a database, cache, message broker, and streaming engine. Introduction to Redis
redis.io/docs/about/
我英语也不好,抛开定于不看,reids 就是一个内存存储!
它通过避免锁争用来保持低延迟。 Redis Cluster 提供水平扩展,如果不是更好,应该和垂直扩展一样好:N 个单核机器相当于一个跨越 N 个内核的进程。 流水线为您提供更多的吞吐量。Redis 客户端可以通过管道传输达到 ~1M qps 的请求,这比常规流量吞吐量高一个数量级。 无论如何,单台机器的上升空间是有限的。 单线程更简单,我猜的。
网络 I/O 方面:Redis 使用单线程来处理所有客户端的请求,这在某些情况下可能会成为性能瓶颈。因此,在 Redis 4.0 版本及以上,引入了多线程 I/O 模型,可以让 Redis 在处理网络请求时使用多个线程,从而提高系统的吞吐量和性能。 数据存储方面:Redis 默认使用单线程来处理数据的读写请求,但是在一些高并发的场景下,这样的做法可能会成为性能瓶颈。因此,在 Redis 6.0 版本及以上,引入了多个 I/O 线程和多个工作线程,可以让 Redis 在处理数据的读写请求时使用多个线程,并行地执行操作,从而提高系统的吞吐量和性能。 Redis 的多线程主要是为了提高系统的吞吐量和性能,并不是为了并发执行业务逻辑。
参考: Introduction to Redis redis-analysis-part-1-threading-model/
缓存的本质和缓存实践
为什么要用缓存?
缓存的本质