当前位置: 首页 > article >正文

Spring Data Redis的基本使用

目录

一、简介

二、环境搭建

三、RedisTemplate

四、序列化配置

一、简介

Spring Data Redis 是 Spring 提供的用于简化与 Redis 交互的子项目,封装了 Redis 的底层操作,提供了统一的模板和 Repository 支持,方便开发者使用面向对象的方式操作 Redis。

使用 Spring Data Redis,可以:

  • 轻松地与 Redis 进行数据交互,包括字符串、哈希、列表、集合、有序集合等数据类型。
  • 支持基于注解的缓存机制,与 Spring Cache 整合。
  • 提供了事务支持、发布/订阅(Pub/Sub)、Lua 脚本执行等高级特性。
  • 支持多种 Redis 客户端连接器,如 Lettuce(默认)和 Jedis

二、环境搭建

1. 添加依赖

在使用 Spring Boot 开发时,只需在 pom.xml 中添加 spring-boot-starter-data-redis 依赖即可:

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

**注意:**默认情况下使用 Lettuce 作为 Redis 客户端,如果需要使用 Jedis,需要额外添加依赖并进行配置。

2. 配置 Redis 连接

application.yml 中配置 Redis 的连接信息:

spring:
  redis:
    host: localhost
    port: 6379
    password: yourpassword  # 如果没有密码,可不配置
    database: 0

三、RedisTemplate

1. 简介

RedisTemplate 是 Spring Data Redis 提供的核心模板类,用于执行 Redis 的各种操作。它支持所有的 Redis 数据类型,并提供了一系列的便捷方法。

2. 注入 RedisTemplate

Spring Boot 自动配置了 RedisTemplate,可以直接在代码中注入使用。

@Service
public class RedisService {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    // 业务方法
}

**注意:**默认情况下,RedisTemplate 的键(Key)和值(Value)都使用 java.io.Serializable 进行序列化。如果需要使用其他序列化方式,需要进行配置。

3. 常用操作

String 操作
// 设置键值对
redisTemplate.opsForValue().set("name", "张三");

// 获取值
String name = (String) redisTemplate.opsForValue().get("name");

// 设置键的过期时间
redisTemplate.opsForValue().set("session:123", "userData", 30, TimeUnit.MINUTES);

// 增加数值
redisTemplate.opsForValue().increment("counter", 1);

// 删除键
redisTemplate.delete("name");
Hash 操作
// 设置哈希字段
redisTemplate.opsForHash().put("user:1001", "username", "lisi");
redisTemplate.opsForHash().put("user:1001", "email", "lisi@example.com");

// 获取哈希字段
Object username = redisTemplate.opsForHash().get("user:1001", "username");

// 获取整个哈希
Map<Object, Object> userMap = redisTemplate.opsForHash().entries("user:1001");

// 删除哈希字段
redisTemplate.opsForHash().delete("user:1001", "email");
List 操作
// 左侧压入列表
redisTemplate.opsForList().leftPush("tasks", "task1");
redisTemplate.opsForList().leftPush("tasks", "task2");

// 获取列表元素
List<Object> tasks = redisTemplate.opsForList().range("tasks", 0, -1);

// 弹出列表元素
Object task = redisTemplate.opsForList().leftPop("tasks");
Set 操作
// 添加成员到集合
redisTemplate.opsForSet().add("online_users", "user1", "user2");

// 获取集合成员
Set<Object> onlineUsers = redisTemplate.opsForSet().members("online_users");

// 判断成员是否存在
boolean isMember = redisTemplate.opsForSet().isMember("online_users", "user1");
ZSet 操作
// 添加成员到有序集合
redisTemplate.opsForZSet().add("leaderboard", "player1", 100);
redisTemplate.opsForZSet().add("leaderboard", "player2", 200);

// 获取有序集合成员
Set<Object> topPlayers = redisTemplate.opsForZSet().reverseRange("leaderboard", 0, -1);

4. StringRedisTemplate

StringRedisTemplateRedisTemplate 的子类,专门用于操作字符串类型的数据,默认采用 StringRedisSerializer 进行序列化。

@Service
public class StringRedisService {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    public void demo() {
        // 设置字符串
        stringRedisTemplate.opsForValue().set("city", "北京");

        // 获取字符串
        String city = stringRedisTemplate.opsForValue().get("city");
    }
}

四、序列化配置

默认情况下,RedisTemplate 使用 JdkSerializationRedisSerializer 进行序列化,这会导致存储的键和值不可读。为了方便查看和调试,可以修改序列化方式:

@Configuration
public class RedisConfig {

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

        // 使用 StringRedisSerializer 序列化键
        StringRedisSerializer stringSerializer = new StringRedisSerializer();
        template.setKeySerializer(stringSerializer);
        template.setHashKeySerializer(stringSerializer);

        // 使用 Jackson2JsonRedisSerializer 序列化值
        Jackson2JsonRedisSerializer<Object> jsonSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        template.setValueSerializer(jsonSerializer);
        template.setHashValueSerializer(jsonSerializer);

        template.afterPropertiesSet();
        return template;
    }
}

说明:

  • 键和哈希键使用 StringRedisSerializer,值和哈希值使用 Jackson2JsonRedisSerializer
  • 这样配置后,Redis 中存储的键和值都是可读的字符串或 JSON。

http://www.kler.cn/a/380831.html

相关文章:

  • 【MySQL】 运维篇—故障排除与性能调优:案例分析与故障排除练习
  • OpenStack API 来创建用户
  • 2024年云手机推荐榜单:高性能云手机推荐
  • 为什么TCP(TIME_WAIT)2倍MSL
  • 【ACM出版,EI稳定检索,九大高校联合举办, IEEE Fellow支持】2024年计算机视觉与艺术研讨会(CVA 2024,11月29-12月1日)
  • 「Mac畅玩鸿蒙与硬件15」鸿蒙UI组件篇5 - Slider 和 Progress 组件
  • Spring Boot 与 Vue 共铸卓越采购管理新平台
  • OpenID Connect 和 OAuth 2.0 有什么不同?
  • 揭秘rust中默认参数类型不为人知的秘密,你确定不来了解下吗?
  • Java 基于SpringBoot+Vue 的公交智能化系统,附源码、文档
  • Django Form 实现多层(嵌套)模型表单
  • 深度学习模块创作(缝合)教程|适合1-360月小宝宝食用,干货满满
  • 深度学习基础知识-损失函数
  • 【C/C++】memcpy函数的模拟实现
  • Mac OS 配置Docker+Mysql
  • C++中的继承——第一篇
  • ​CSS之三
  • 【OJ题解】C++实现字符串大数相乘:无BigInteger库的字符串乘积解决方案
  • vue中强制更新视图
  • 网络信息系统的整个生命周期
  • 服务器作业2
  • AUTOSAR COM 模块的主要功能导读以及示例
  • 【jvm】如何设置Eden、幸存者者区的比例
  • C语言 | Leetcode C语言题解之第521题最长特殊序列I
  • C++模拟实现list
  • NRF52832学习笔记(41)——添加串口库libuarte