news 2026/6/8 22:11:03

Redis基础介绍与SpringDataRedis的基础使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis基础介绍与SpringDataRedis的基础使用

这是一份面向初学者的 Redis 基础学习文档,涵盖了 Redis 核心数据结构、Spring Data Redis 框架、RedisTemplate的快速入门、序列化机制以及StringRedisTemplate的使用。


Redis 基础学习文档

1. Redis 简介与常见数据结构

Redis(REmote DIctionary Server)是一款开源的、基于内存的键值存储系统,常用作缓存、消息队列和短暂数据存储。它支持多种数据结构,读写性能极高(可达 10 万+ QPS)。

1.1 String(字符串)

  • 最基本类型,二进制安全,可存储文本、整数、JSON 等。

  • 常用命令:SETGETINCRMSETMGET

SET user:1 "Alice" GET user:1 # "Alice" INCR page_views # 原子递增

1.2 Hash(哈希)

  • 适合存储对象,如用户信息、配置项。

  • 常用命令:HSETHGETHGETALLHMSET

HSET user:2 name "Bob" age 25 HGET user:2 name # "Bob" HGETALL user:2

1.3 List(列表)

  • 双向链表,可作栈或队列。

  • 常用命令:LPUSHRPUSHLPOPRPOPLRANGE

LPUSH tasks "task1" # 头部添加 RPUSH tasks "task2" # 尾部添加 LRANGE tasks 0 -1 # 查看全部

1.4 Set(集合)

  • 无序、唯一,支持交、并、差运算。

  • 常用命令:SADDSMEMBERSSISMEMBERSINTER

SADD tags "redis" "spring" SMEMBERS tags SISMEMBER tags "redis" # 1 (存在)

1.5 Sorted Set(有序集合)

  • 每个元素关联一个分数(score),按分数排序。

  • 常用命令:ZADDZRANGEZREVRANGEZRANK

ZADD leaderboard 100 "Alice" 95 "Bob" ZRANGE leaderboard 0 -1 WITHSCORES

1.6 其他结构

  • Bitmap:位图,适合记录签到、在线状态。

  • HyperLogLog:基数统计,近似去重计数。

  • Geospatial:地理坐标存储与计算。


2. Spring Data Redis 介绍

Spring Data Redis 是 Spring 框架下的一个子项目,用于简化与 Redis 的交互。它提供了:

  • 统一的模板类RedisTemplateStringRedisTemplate

  • 将底层 Redis 连接抽象为RedisConnectionFactory

  • 支持多种序列化策略

  • 提供异常转换、发布订阅、Lua 脚本等功能

核心思想:通过RedisTemplate直接操作 Java 对象,而不必手动处理连接、字节转换等底层细节。


3. RedisTemplate 快速入门

3.1 添加依赖(Maven)

<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>

3.2 配置连接工厂

application.yml中配置 Redis 连接:

spring: redis: host: localhost port: 6379 password: # 无密码可不写 database: 0 lettuce: pool: max-active: 8 max-idle: 8

Spring Boot 会自动配置RedisConnectionFactory,通常无需手动创建 Bean。

3.3 编写示例代码

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; ​ @Component public class RedisDemo { ​ @Autowired private RedisTemplate<String, Object> redisTemplate; ​ public void demo() { // 存储字符串 redisTemplate.opsForValue().set("name", "张三"); String name = (String) redisTemplate.opsForValue().get("name"); ​ // 存储 Hash redisTemplate.opsForHash().put("user:3", "name", "李四"); redisTemplate.opsForHash().put("user:3", "age", 28); ​ // 存储 List redisTemplate.opsForList().rightPush("logs", "login success"); redisTemplate.opsForList().rightPush("logs", "logout"); ​ // 存储 Set redisTemplate.opsForSet().add("hobbies", "basketball", "football"); ​ // 存储 ZSet redisTemplate.opsForZSet().add("rank", "playerA", 99.5); } }

注意:直接使用RedisTemplate<String, Object>时,值默认使用 JDK 序列化(存储为二进制),可读性差且占用空间大,通常需要自定义序列化。


4. RedisTemplate 的各种序列化方式

4.1 默认序列化问题

默认使用JdkSerializationRedisSerializer,会将对象序列化为字节流,并在 key/value 前添加额外字符(如\xAC\xED...),导致:

  • Redis 命令行查看时乱码

  • 跨语言应用无法解析

  • 内存占用较高

4.2 常用序列化器

序列化器特点
StringRedisSerializer字符串/数值直接存储,适合 key
Jackson2JsonRedisSerializerJSON 格式,可读性好,跨语言
GenericJackson2JsonRedisSerializer支持类型信息,反序列化为具体类型
JdkSerializationRedisSerializer默认,不推荐

4.3 自定义 RedisTemplate 序列化配置

推荐key 用 StringRedisSerializer,value 用 Jackson2JsonRedisSerializer

import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(factory); // key 使用 StringRedisSerializer StringRedisSerializer stringSerializer = new StringRedisSerializer(); template.setKeySerializer(stringSerializer); template.setHashKeySerializer(stringSerializer); // value 使用 Jackson2JsonRedisSerializer Jackson2JsonRedisSerializer<Object> jsonSerializer = new Jackson2JsonRedisSerializer<>(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); // 存储类型信息 jsonSerializer.setObjectMapper(objectMapper); template.setValueSerializer(jsonSerializer); template.setHashValueSerializer(jsonSerializer); template.afterPropertiesSet(); return template; } }

使用示例:存入 Java 对象时会自动转为 JSON,命令行可读:

SET user:4 '{"name":"王五","age":30}'

4.4 不同场景的序列化选择

  • Key 统一用字符串:便于管理、调试。

  • Value

    • 简单类型(String、Long) →StringRedisSerializer

    • 复杂对象且只被 Java 使用 →GenericJackson2JsonRedisSerializer(存储@class信息)

    • 跨语言/前端直接使用 →Jackson2JsonRedisSerializer+ 统一对象结构


5. StringRedisTemplate

StringRedisTemplateRedisTemplate<String, String>的特化版本,其 key 和 value 的序列化器均为StringRedisSerializer

5.1 特点

  • key/value 都是字符串,可直接读写普通文本、数字、JSON 字符串。

  • 无需配置,Spring Boot 自动配置,可直接注入使用。

  • 性能略高(避免序列化开销),但无法直接存取 Java 对象(需手动转为 JSON)。

5.2 快速使用

@Autowired private StringRedisTemplate stringRedisTemplate; public void demo() { // 存字符串 stringRedisTemplate.opsForValue().set("city", "Shanghai"); String city = stringRedisTemplate.opsForValue().get("city"); // 存 JSON 字符串 User user = new User("赵六", 35); String json = new ObjectMapper().writeValueAsString(user); stringRedisTemplate.opsForValue().set("user:6", json); }

5.3 与 RedisTemplate 对比

特性RedisTemplate<String, Object>StringRedisTemplate
Key 序列化可自定义,常用 StringRedisSerializer固定 StringRedisSerializer
Value 序列化可自定义(JSON/Java/...)固定 StringRedisSerializer
存储 Java 对象直接存,序列化器处理需手动转 JSON / 字符串
适用场景业务对象缓存、高灵活性简单键值、计数器、纯文本内容

实际开发建议

  • 若只存字符串、整数、JSON 字符串,使用StringRedisTemplate更轻量。

  • 若需要自动序列化复杂对象,配置自定义RedisTemplate


6. 总结

  • Redis 提供了丰富的数据结构,分别适用于不同业务模式。

  • Spring Data Redis 通过RedisTemplate将底层操作封装为 Java API,极大提升开发效率。

  • 序列化是使用 RedisTemplate 的关键点,根据数据格式选择合适的序列化器。

  • StringRedisTemplate是专门处理字符串的模板,简单高效。

掌握以上内容后,你可以在 Spring Boot 项目中熟练使用 Redis 进行缓存、计数、排行榜等操作。继续深入可学习事务、管道、发布订阅以及 Lua 脚本等高级特性。


参考资源

  • Redis 官方文档

  • Spring Data Redis Reference

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 22:07:52

颠覆性开源OCR解决方案:3个实战场景深度解析Umi-OCR的架构优势

颠覆性开源OCR解决方案&#xff1a;3个实战场景深度解析Umi-OCR的架构优势 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片&#xff0c;PDF文档识别&#xff0c;排除水印/页眉页脚&#xff0c;扫描/生成二维码。内置…

作者头像 李华
网站建设 2026/6/8 22:00:30

微信装逼神器步数修改步数教程无需下载软件版

弥夏刷步是一套面向用户自助使用的运动步数管理系统&#xff0c;核心目标是让用户更方便地管理 Zepp Life 运动账号&#xff0c;并将步数同步到微信运动与支付宝等平台。程序整体采用网页端操作方式&#xff0c;用户无需复杂配置&#xff0c;登录后即完成账号管理、步数提交、自…

作者头像 李华
网站建设 2026/6/8 21:55:12

BLE芯片功耗优化实战:从KW47数据解读到电池寿命精准估算

1. 项目概述如果你正在设计一款基于蓝牙低功耗&#xff08;BLE&#xff09;的物联网设备&#xff0c;比如智能门锁、可穿戴手环或者资产追踪标签&#xff0c;那么“续航”这个词一定是你产品规格书里最敏感、也最头疼的指标之一。客户总希望设备能“用得更久”&#xff0c;而电…

作者头像 李华
网站建设 2026/6/8 21:51:36

cmux:专为 AI Agent 和多任务设计的 macOS 终端

一句话定位&#xff1a; cmux 是基于 Ghostty 渲染引擎构建的原生 macOS 终端应用&#xff0c;核心卖点是垂直标签页管理、Agent 通知提醒环、内置浏览器、分屏面板和 CLI/socket 可编程 API。它不是 Ghostty 的 fork&#xff0c;而是一个独立的应用层。 目前仅支持 macOS 14.…

作者头像 李华
网站建设 2026/6/8 21:51:34

【万字文档+源码】基于springboot+vue果树的生长信息管理系统 -学习资料分享

基于springbootvue果树生长系统一、项目概述 1.1 项目背景 在现代农业数字化转型的大趋势下&#xff0c;传统果树种植管理模式面临信息记录零散、生长过程难以追溯、技术交流不便、种植评估缺乏数据支撑等问题&#xff0c;制约了果园管理效率与种植水平的提升。为解决这些痛点…

作者头像 李华