1. Redis简介
Redis(Remote Dictionary Server)是一个开源的内存数据库,支持多种数据结构,具有极高的性能。它通常用作缓存、中间件,支持持久化和主从复制,广泛应用于高并发、低延迟的场景
(1) 数据类型
Redis 支持以下五种基本数据类型:
- String:最常用的类型,可存储字符串、整数、浮点数
- List:双向链表,支持元素的插入、删除,适用于队列场景
- Set:无序集合,支持交集、并集、差集等操作
- Hash:类似于Java中的Map结构,适合存储对象数据
- ZSet(Sorted Set):有序集合,带分数的元素集合,适用于排行榜、排名系统等场景
(2) 关键优势
- 高性能:单线程模型,支持每秒百万级请求
- 丰富的数据结构:可以满足多样化的场景需求
- 持久化机制:支持数据落盘(RDB和AOF两种方式)
- 分布式:支持主从复制,便于构建高可用集群
2. Redis的基本使用
(1) 配置
安装 Redis 后,配置文件通常为 redis.conf
,常用配置包括端口、最大连接数、持久化设置等
- 端口:默认端口为 6379
- 持久化:通过 RDB 或 AOF 来设置数据持久化的方式
(2) 启动
可以通过命令 redis-server
启动 Redis,也可以指定配置文件来启动:
bash
redis-server /path/to/redis.conf
(3) 连接
可以通过命令行客户端 redis-cli
或通过编程方式(如Jedis、Lettuce)连接 Redis
(4) 基本操作
-
设置键值 :
bashSET key value
-
获取键值 :
bashGET key
-
删除键 :
bashDEL key
(5) 可视化工具
常用 Redis 可视化管理工具:
- Redis Desktop Manager:跨平台的 GUI 管理工具
- Another Redis Desktop Manager (RDM):开源 Redis 管理工具
- FastoRedis:基于 C++ 的 Redis 客户端
3. Jedis操作Redis
Jedis 是 Java 语言的 Redis 客户端,提供了方便的 API 操作 Redis
(1) 常用方法API
- set:设置键值
- get:获取键值
- del:删除键
- exists:检查键是否存在
- expire:设置键过期时间
(2) 基本操作
java
Jedis jedis = new Jedis("localhost", 6379);
jedis.set("key", "value");
String value = jedis.get("key");
(3) 连接池
为了提高性能和复用连接,Jedis 支持连接池:
java
JedisPool jedisPool = new JedisPool(new JedisPoolConfig(), "localhost");
try (Jedis jedis = jedisPool.getResource()) {
jedis.set("key", "value");
}
4. SpringBoot操作Redis
通过 SpringBoot 的 spring-boot-starter-data-redis
来简化对 Redis 的操作
(1) spring-boot-starter-data-redis
在 SpringBoot 项目中,添加以下依赖:
XML
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
(2) 基本操作
RedisTemplate 是 SpringBoot 中用于操作 Redis 的核心类,支持多种数据类型的操作
java
@Autowired
private RedisTemplate<String, Object> redisTemplate;
redisTemplate.opsForValue().set("key", "value");
Object value = redisTemplate.opsForValue().get("key");
(3) 封装
可以通过封装 Redis 工具类简化 Redis 的常用操作:
java
public class RedisUtils {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public void set(String key, Object value) {
redisTemplate.opsForValue().set(key, value);
}
public Object get(String key) {
return redisTemplate.opsForValue().get(key);
}
}
5. SpringBoot集成Redis使用Cache缓存
Spring Boot 集成 Redis 后,支持使用 Cache 注解实现缓存功能
(1) RedisConfig配置
需要配置 Redis 的连接信息和序列化方式,避免存储乱码:
java
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return template;
}
}
(2) Cache注解
Spring 提供了 @Cacheable、@CachePut 和 @CacheEvict 注解,用于缓存管理:
- @Cacheable:方法执行结果缓存
- @CachePut:更新缓存
- @CacheEvict:清除缓存
java
@Cacheable(value = "users", key = "#id")
public User getUserById(Long id) {
return userRepository.findById(id).orElse(null);
}
(3) JSON注解
为了在 Redis 中以 JSON 形式存储数据,可以配置 GenericJackson2JsonRedisSerializer
来序列化和反序列化数据
通过以上配置和方法,可以将 SpringBoot 与 Redis 集成,提供缓存能力,有效提升应用性能
这份总结涵盖了Redis的基础概念、操作方式以及SpringBoot中的实际应用