java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring Boot  RedisTemplate 数据结构

Spring Boot + RedisTemplate 数据结构的基础操作大全

作者:不吃冰

本文介绍了Redis简介与Spring Boot集成,核心数据类型,RedisTemplate配置与初始化,以及5种数据类型的操作,还涉及高级特性如事务支持和管道技术,结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

📚 一、Redis简介与Spring Boot集成

Redis核心数据类型

Redis支持5种主要数据结构:

Spring Boot集成配置

依赖配置(pom.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>

配置文件(application.yml):

spring:
  redis:
    host: localhost
    port: 6379
    database: 0
    timeout: 3000ms
    lettuce:
      pool:
        max-active: 8
        max-idle: 8

🔧 二、RedisTemplate配置与初始化

序列化配置类

@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        // 设置key序列化为String
        template.setKeySerializer(new StringRedisSerializer());
        // 设置value序列化为JSON
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return template;
    }
}

注入操作对象

@Service
public class RedisService {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    @Autowired
    private ValueOperations<String, Object> valueOps;  // String操作
    @Autowired
    private HashOperations<String, String, Object> hashOps;  // Hash操作
    @Autowired
    private ListOperations<String, Object> listOps;  // List操作
    @Autowired
    private SetOperations<String, Object> setOps;  // Set操作
    @Autowired
    private ZSetOperations<String, Object> zSetOps;  // ZSet操作
}

📊 三、5种数据类型操作详解

1. String类型 - 基础键值存储

// 基本操作
valueOps.set("username", "张三");  // SET
valueOps.get("username");          // GET
valueOps.increment("counter");     // INCR
valueOps.set("token", "abc123", 30, TimeUnit.MINUTES);  // 带过期时间
// 进阶操作
valueOps.setIfAbsent("lock", "locked");  // SETNX(分布式锁)
valueOps.getAndSet("key", "newValue");   // GETSET

2. Hash类型 - 对象存储

// 存储用户对象
Map<String, Object> user = new HashMap<>();
user.put("name", "张三");
user.put("age", 25);
user.put("email", "zhangsan@example.com");
hashOps.putAll("user:1001", user);  // HMSET
// 操作字段
hashOps.get("user:1001", "name");     // HGET
hashOps.hasKey("user:1001", "age");   // HEXISTS
hashOps.keys("user:1001");            // HKEYS
hashOps.increment("user:1001", "age", 1);  // HINCRBY

3. List类型 - 队列和栈

// 队列操作(左进右出)
listOps.leftPush("tasks", "task1");    // LPUSH
listOps.leftPushAll("tasks", "task2", "task3");
listOps.rightPop("tasks");             // RPOP
// 列表操作
listOps.range("messages", 0, 10);      // LRANGE
listOps.index("messages", 0);          // LINDEX
listOps.trim("messages", 0, 99);       // LTRIM(保留最近100条)

4. Set类型 - 无序集合

// 标签系统示例
setOps.add("user:tags:1001", "java", "redis", "spring");  // SADD
setOps.members("user:tags:1001");                         // SMEMBERS
// 集合运算
setOps.intersect("user:tags:1001", "user:tags:1002");     // SINTER(交集)
setOps.union("tag:java:users", "tag:redis:users");        // SUNION(并集)
setOps.isMember("user:tags:1001", "java");                // SISMEMBER

5. ZSet类型 - 有序集合(排行榜)

// 游戏排行榜
zSetOps.add("leaderboard", "player1", 1000);               // ZADD
zSetOps.add("leaderboard", "player2", 2000);
zSetOps.incrementScore("leaderboard", "player1", 500);     // ZINCRBY
// 查询操作
zSetOps.reverseRange("leaderboard", 0, 9);                 // ZREVRANGE(前10名)
zSetOps.rank("leaderboard", "player1");                    // ZRANK(排名)
zSetOps.score("leaderboard", "player1");                   // ZSCORE(分数)
zSetOps.count("leaderboard", 1000, 3000);                  // ZCOUNT(分数区间统计)

⚡ 四、高级特性与实战应用

事务支持

redisTemplate.execute(new SessionCallback<List<Object>>() {
    @Override
    public List<Object> execute(RedisOperations operations) throws DataAccessException {
        operations.multi();  // 开启事务
        operations.opsForValue().set("key1", "value1");
        operations.opsForValue().increment("counter");
        return operations.exec();  // 执行事务
    }
});

管道技术(批量操作)

List<Object> results = redisTemplate.executePipelined(new SessionCallback<Object>() {
    @Override
    public Object execute(RedisOperations operations) throws DataAccessException {
        for (int i = 0; i < 1000; i++) {
            operations.opsForValue().set("key:" + i, "value:" + i);
        }
        return null;
    }
});

到此这篇关于Spring Boot + RedisTemplate 数据结构的基础操作的文章就介绍到这了,更多相关Spring Boot RedisTemplate 数据结构内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文