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

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

http://www.rkmt.cn/news/1488975.html

相关文章:

  • 102、日志分析工具:MATLAB与Python脚本
  • 题题-4
  • 深度解析飞算 JavaAI 智能引导的五大步骤:AI 是如何把一句需求变成工程级 Java 代码的?
  • OpenClaw连接DeepSeek图文教程全解析
  • 走进ChatGLM-6B:把轻量级AI对话装进个人电脑的实用指南
  • 后湖大道空调维修|后湖大道空调移机|后湖大道空调加氟|后湖大道空调回收 高性价比宅到家快速上门 - 武汉宅到家
  • 如何高效管理九大网盘下载:JavaScript直链解析工具的完整指南
  • 103、飞控仿真环境搭建:Gazebo与PX4 SITL
  • Shopify Python API:官方 Shopify Admin SDK
  • 告别手动抄表:用UaExpert的Data Access View高效监控与记录产线数据
  • 2026年 2,4-二氟硝基苯厂家推荐榜单:高纯度合成工艺与医药中间体应用实力品牌深度解析 - 品牌发掘
  • 2026年 钢丝电缆收卷机厂家推荐榜单:排线机/收线机/自动收线机精密移位与多功能机型实力解析 - 品牌发掘
  • MPC8245嵌入式Linux内核移植实战:从源码修改到硬件配置全解析
  • 2026北京配眼镜推荐,学生党去哪,性价比和品质都要 - 配眼镜新资讯
  • 汽车电子的特殊词汇理解
  • WordPress子比小游戏合集插件源码
  • 常青花园空调维修|常青花园空调移机|常青花园空调加氟|常青花园回收 高性价比宅到家快速上门 - 武汉宅到家
  • Linux内核学习轨迹第六部:VFS的设计思想与整体架构(第一节)
  • 计算机小程序毕设实战-django大数据基于微信小程序的直播带货商品数据分析系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 怀旧推荐:俄罗斯经典游戏,新玩法!
  • 如何快速解锁百度网盘macOS版SVIP功能:完整破解指南
  • 2026 常州防水补漏服务商口碑测评榜单|全屋渗漏维修机构优选指南 - 宅安选房屋修缮
  • 直播系统聊天技术(十):基于实时消息总线的活动系统架构设计
  • 有留服认证的海外EMBA怎么选?五大权威项目详细解析 - 品牌测评鉴赏家
  • 2026湖州AI搜索优化服务商避坑指南:十大机构横向排名与选型报告 - 品牌报告
  • 2026 南宁防水补漏服务商口碑测评榜单|全屋渗漏维修机构优选指南 - 宅安选房屋修缮
  • 京东商品批量采集系统:整店下载、SKU图提取与主图视频下载
  • NXP eIQ机器学习环境在QorIQ Layerscape嵌入式平台的部署与实战指南
  • Path of Building终极指南:流放之路离线构筑计算器完全教程
  • 2026年广东正规婚恋平台口碑优选推荐指南:线上相亲、同城交友、靠谱婚介、本地婚恋机构怎么选 - 海棠依旧大