Skip to content

Redis 使用指南

Redis 是一个开源的内存数据结构存储,用作数据库、缓存和消息代理。

文档目录

文档说明
String 字符串操作SET/GET/INCR/DECR/APPEND,含全部重载方法与参数说明
Hash 哈希操作HSET/HGET/HMSET 等,适合存储对象
List 列表操作LPUSH/RPUSH/LPOP/RPOP/BLPOP,消息队列实现
Set 集合操作SADD/SREM/SINTER/SUNION/SDIFF,标签与去重
ZSet 有序集合操作ZADD/ZRANGE/ZINCRBY,排行榜与延迟队列
Redisson 分布式锁分布式锁、公平锁、读写锁、联锁

Spring Boot 集成

1. 添加依赖

xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>

2. application.yml 配置

yaml
spring:
  redis:
      host: localhost
      port: 6379
      password:            # 有密码时填写
      database: 0
      timeout: 3000ms
      lettuce:
        pool:
          max-active: 8
          max-idle: 8
          min-idle: 0
          max-wait: -1ms

3. 配置 RedisTemplate

java
@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);

        StringRedisSerializer stringSerializer = new StringRedisSerializer();
        template.setKeySerializer(stringSerializer);
        template.setHashKeySerializer(stringSerializer);

        Jackson2JsonRedisSerializer<Object> jsonSerializer =
            new Jackson2JsonRedisSerializer<>(Object.class);
        template.setValueSerializer(jsonSerializer);
        template.setHashValueSerializer(jsonSerializer);

        template.afterPropertiesSet();
        return template;
    }

    @Bean
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory) {
        return new StringRedisTemplate(factory);
    }
}

4. 五大操作接口

java
@Autowired
private RedisTemplate<String, Object> redisTemplate;

// 获取各类型操作接口
ValueOperations<String, Object> valueOps = redisTemplate.opsForValue();    // String
HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash(); // Hash
ListOperations<String, Object> listOps = redisTemplate.opsForList();        // List
SetOperations<String, Object> setOps = redisTemplate.opsForSet();           // Set
ZSetOperations<String, Object> zsetOps = redisTemplate.opsForZSet();        // ZSet

快速选择:什么场景用什么类型?

场景类型示例
缓存单值、计数器、分布式锁StringSET user:1001 'Tom'
缓存对象、购物车HashHSET user:1001 name Tom
消息队列、最新动态时间线ListLPUSH queue:tasks task1
标签系统、共同好友、抽奖SetSADD tags:article1 java
排行榜、延迟队列、优先级队列ZSetZADD rank 100 player1
最近更新