Spring Boot 集成 Redis

Spring-data-redis

在 Spring 中整合 Redis

jedis : 采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全的,使用 jedis pool 连接池

lettuce : 采用netty,实例可以再多个线程中进行共享,不存在线程不安全的情况!可以减少线程数据了

一、配置步骤

  1. 加入 Redis 相关依赖

    properties 复制代码
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
  2. 在 application.properties 中加入 Redis 相关配置

    properties 复制代码
    # Redis数据库索引(默认为0)
    spring.redis.database=0
    # Redis服务器地址
    spring.redis.host=192.168.0.24
    # Redis服务器连接端口
    spring.redis.port=6379
    # Redis服务器连接密码(默认为空)
    spring.redis.password=
    # 连接池最大连接数(使用负值表示没有限制)
    spring.redis.pool.max-active=200
    # 连接池最大阻塞等待时间(使用负值表示没有限制)
    spring.redis.pool.max-wait=-1
    # 连接池中的最大空闲连接
    spring.redis.pool.max-idle=10
    # 连接池中的最小空闲连接
    spring.redis.pool.min-idle=0
    # 连接超时时间(毫秒)
    spring.redis.timeout=1000

二、Spring-data-redis相关功能

(1)模板类

  • RedisTemplate key value 泛型都是object
  • StringRedisTemplate key value 泛型都是String

(2)注意

  1. 两者数据 各自存、各自取,数据互不相通

    • RedisTemplate不能取StringRedisTemplate存入的数据
    • StringRedisTemplate不能取RedisTemplate存入的数据
  2. 序列化策略不同

    • RedisTemplate采用JDK的序列化策略(JdkSerializationRedisSerializer)保存的key和value 都是是采用此策略序列化保存的

      1. 存储时,先将数据序列化为字节数组,再存入 Redis 数据库
      2. 查看 Redis 会发现,是字节数组的形式,类似乱码
      3. 读取时,会将数据当做字节数组转化为我们需要的数据,用来存储对象,但要实现 Serializable 接口
    • StringRedisTemplate采用String的序列化策略(StringRedisSerializer)保存的key和

      value都是String类型,存储和读取,都为可读的数据,采用此策略序列化保存的当存入对象时,会报错:can not cast into String

  3. 两者的关系是 StringRedisTemplate 继承 RedisTemplate

  4. 使用场景

    • 当你的 redis 数据库里面本来存的是字符串数据或者要存取的数据就是字符串类型数据的时候,那么就使用StringRedisTemplate
    • 如果数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对 象,那么使用RedisTemplate是更好的选择
  5. 五大数据类型

    • redisTemplate.opsForValue();//操作字符串
    • redisTemplate.opsForList();//操作List
    • redisTemplate.opsForSet();//操作Set
    • redisTemplate.opsForZSet();//操作ZSet
    • redisTemplate.opsForHash();//操作Hash

(3)序列化策略

改变序列化策略

默认序列化方式存储到redis的数据人工不可读

不同策略序列化的过程有性能高低的

spring-data-redis 提供如下几种序列化策略

java 复制代码
GenericToStringSerializer: //可以将任何对象泛化为字符串并序列化

Jackson2JsonRedisSerializer: //跟JacksonJsonRedisSerializer实际上是一样的

JacksonJsonRedisSerializer: //序列化object对象为json字符串

JdkSerializationRedisSerializer: //序列化java对象

StringRedisSerializer: //简单的字符串序列化
相关推荐
Javatutouhouduan22 分钟前
SpringBoot整合reids:JSON序列化文件夹操作实录
java·数据库·redis·html·springboot·java编程·java程序员
bug攻城狮35 分钟前
Spring Boot应用内存占用分析与优化
java·jvm·spring boot·后端
迪巴拉15251 小时前
基于Vue与Spring Boot+Open Cv的智慧校园考勤系统
前端·vue.js·spring boot
java1234_小锋1 小时前
Java高频面试题:Redis里什么是缓存击穿、缓存穿透、缓存雪崩?
java·redis·缓存
me8321 小时前
【Java】踩坑实录:Spring Boot + Nginx 本地部署404终极排查:从80端口被占用到配置生效全流程
java·spring boot·nginx
y = xⁿ2 小时前
【从零开始学习Redis|第四篇】从底层理解缓存问题:雪崩、击穿、穿透与一致性设计
java·redis·学习·缓存
韩立学长2 小时前
基于Springboot校园志愿者服务平台77pz7812(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
qq_12498707532 小时前
基于SpringBoot微信小程序的智能在线预约挂号系统(源码+论文+部署+安装)
spring boot·后端·微信小程序·毕业设计·计算机毕设·毕业设计源码
代码探秘者2 小时前
【Redis】分布式锁深度解析:实现、可重入、主从一致性与强一致方案
java·数据库·redis·分布式·缓存·面试
霖霖总总2 小时前
[Redis小技巧5]Redis Sorted Set 深度解析:从跳表原理到亿级排行榜架构
redis·架构