配置SpringBoot

  • 创建SpringBoot项目时勾选Redis起步依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  • 在程序中主要使用RedisTemplate类的方法操作redis数据。实际就是调用lettuce客户端库中的方法

  • 在application.properties文件中配置Redis服务的信息
#配置springboot服务信息
server.port=9090
server.servlet.context-path=/myredis #springboot中redis相关配置
spring.redis.host=127.0.0.1
spring.redis.port=6379

StringRedisTemplate 和 RedisTemplate

两者对比

  • StringRedisTemplate:把k,v 都作为String处理,使用的是String的序列化,可读性好

  • RedisTemplate:把k,v 经过了序列化存到redis。 k,v 是序列化的内容,不能直接识别。默认使用的jdk序列化,可以修改为其他的序列化方式

序列化

为什么要序列化

  • 序列化最终的目的是为了对象可以跨平台存储,和进行网络传输
  • 而我们进行跨平台存储和网络传输的方式就是IO,且我们的IO支持的数据格式就是字节数组
  • 我们必须在把对象转成字节数组的时候就制定一种转化规则(序列化),那么我们就可以从IO流里面读出数据的时候再以这种规则把对象还原回来(反序列化)

序列化和反序列化

  • 序列化:把对象转化为可传输的字节序列过程称为序列化

  • 反序列化:把字节序列还原为对象的过程称为反序列化

何时需要序列化

  • 凡是需要进行“跨平台存储”和”网络传输”的数据,都需要进行序列化

  • 本质上存储和网络传输都需要经过把一个对象状态保存成一种跨平台识别的字节格式,然后其他的平台才可以通过字节信息解析还原对象信息

序列化方式

  • 序列化只是一种拆装组装对象的规则

  • 现在常见的序列化方式有:JDK(不支持跨语言)、JSON、XML、Hessian、Kryo(不支持跨语言)、Thrift、Protofbuff

  • 简单的序列化示例:

  • java的序列化:把java对象转为byte[], 二进制数据

  • json序列化:json序列化功能将对象转换为 JSON 格式或从 JSON 格式转换回对象。例如把一个Student对象转换为JSON字符串{"name":"李四", "age":29} ),反序列化(将JSON字符串 {"name":"李四", "age":29} 转换为Student对象)

代码演示

  • 创建实体类
package com.example.model;

import java.io.Serializable;

public class Food implements Serializable {
//private static final long serialVersionUID = 6071454104230624820L;
private String name;
private double price; @Override
public String toString() {
return "Food{" +
"name='" + name + '\'' +
", price=" + price +
'}';
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public double getPrice() {
return price;
} public void setPrice(double price) {
this.price = price;
} public Food(String name, double price) {
this.name = name;
this.price = price;
} public Food() {
}
}
  • 可以为实体类添加序列化版本号:将那个勾挑上

  • 光标放在实体类上,按alt + 回车,选择为实体类添加序列号

  • controller层。 演示StringRedisTemplate和RedisTemplate,以及json格式的序列化
package com.example.redis;

import com.example.model.Food;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @RestController
public class RedisController { @Resource
StringRedisTemplate stringRedisTemplate; @Resource
RedisTemplate redisTemplate; //使用stringRedisTemplate
@PostMapping("/student/addStu")
public String addStu(String key, String value){
stringRedisTemplate.opsForValue().set(key, value);
return "addStu,使用stringRedisTemplate操作字符串数据 key: " + key + ", value: " + value;
} @GetMapping("/student/getStu")
public String getStu(String key){
String value = stringRedisTemplate.opsForValue().get(key);
return "getStu,使用stringRedisTemplate操作字符串数据, 获取到的value: " + value;
} //使用redisTemplate
@PostMapping("/fruit/addFru")
public String addFru(String key, String value){
//设置序列化方式
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.opsForValue().set(key, value);
return "addFru,使用redisTemplate操作字符串数据, key: " + key + ", value: " + value;
} @GetMapping("/fruit/getFru")
public String getFru(String key){
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
String value = (String) redisTemplate.opsForValue().get(key);
return "getFru,使用redisTemplate操作字符串数据, 获取到的value: " + value;
} //使用redisTemplate序列化成json格式
@PostMapping("/food/addFood")
public String addFood(String name, Double price){
Food food = new Food();
food.setName(name);
food.setPrice(price);
redisTemplate.setKeySerializer(new StringRedisSerializer());
//将value序列化成json格式
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Food.class));
redisTemplate.opsForValue().set("food", food);
return "addFood,使用redisTemplate序列化成json格式";
} @GetMapping("/food/getFood")
public String getFood(String name){
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Food.class));
//反序列化
Food food = (Food) redisTemplate.opsForValue().get(name);
return "getFood,获取到的value: " + food;
}
}

SpringBoot 06: springboot中使用redis的更多相关文章

  1. springboot(七).springboot整合jedis实现redis缓存

    我们在使用springboot搭建微服务的时候,在很多时候还是需要redis的高速缓存来缓存一些数据,存储一些高频率访问的数据,如果直接使用redis的话又比较麻烦,在这里,我们使用jedis来实现r ...

  2. 由浅入深学习springboot中使用redis

    很多时候,我们会在springboot中配置redis,但是就那么几个配置就配好了,没办法知道为什么,这里就详细的讲解一下 这里假设已经成功创建了一个springboot项目. redis连接工厂类 ...

  3. 在SpringBoot中引入Redis

    前言 之前我们只是在Spring中加入Redis用于session的存放,并没有对redis进行主动的存放,这次我们需要加入redis工具类来方便我们在实际使用过程中操作redis 已经加入我的git ...

  4. spring-boot的spring-cache中的扩展redis缓存的ttl和key名

    原文地址:spring-boot的spring-cache中的扩展redis缓存的ttl和key名 前提 spring-cache大家都用过,其中使用redis-cache大家也用过,至于如何使用怎么 ...

  5. SpringBoot中集成redis

    转载:https://www.cnblogs.com/zeng1994/p/03303c805731afc9aa9c60dbbd32a323.html 不是使用注解而是代码调用 需要在springbo ...

  6. 在SpringBoot中添加Redis

    前言 在实际的开发中,会有这样的场景.有一个微服务需要提供一个查询的服务,但是需要查询的数据库表的数据量十分庞大,查询所需要的时间很长. 此时就可以考虑在项目中加入缓存. 引入依赖 在maven项目中 ...

  7. (一)由浅入深学习springboot中使用redis

    很多时候,我们会在springboot中配置redis,但是就那么几个配置就配好了,没办法知道为什么,这里就详细的讲解一下 这里假设已经成功创建了一个springboot项目. redis连接工厂类 ...

  8. SpringBoot中使用Redis

    在SpringBoot中使用Redis,思路如下: 查询时先查Redis缓存,如果缓存中存在信息,就直接从缓存中获取. 如果缓存中没有相关信息,就去数据库中查找,查完顺便将信息存放进缓存里,以便下一次 ...

  9. 在springboot中使用redis缓存,将缓存序列化为json格式的数据

    背景 在springboot中使用redis缓存结合spring缓存注解,当缓存成功后使用gui界面查看redis中的数据 原因 springboot缓存默认的序列化是jdk提供的 Serializa ...

  10. Spring-Boot项目中配置redis注解缓存

    Spring-Boot项目中配置redis注解缓存 在pom中添加redis缓存支持依赖 <dependency> <groupId>org.springframework.b ...

随机推荐

  1. R数据分析:用R建立预测模型

    预测模型在各个领域都越来越火,今天的分享和之前的临床预测模型背景上有些不同,但方法思路上都是一样的,多了解各个领域的方法应用,视野才不会被局限. 今天试图再用一个实例给到大家一个统一的预测模型的做法框 ...

  2. 04_Linux基础-.&..-cat-tac-重定向-EOF-Shell-more-ps-less-head-tail-sed-grep-which-whereis-PATH-bash-usr-locate-find

    04_Linux基础-.&..-cat-tac->&>>-EOF-Shell-more-ps-less-head-tail-sed-grep-which-wherei ...

  3. ubuntu安装BricsCAD

    目录 目录 下载软件包 安装deb软件包 sudo dpkg -i *.deb 将Crack/bricsys.lic中hostid= <YOURHOSTID>替代本机MAC地址(中间不要冒 ...

  4. KingbaseES timestamp 和 timestamptz 差异比较

    KingbaseES 提供两种存储时间戳的数据类型: 不带时区的 TIMESTAMP 和带时区的 TIMESTAMPTZ. TIMESTAMP 数据类型可以同时存储日期和时间,但它不存储时区.这意味着 ...

  5. Reactor And Gev 详解 通俗易懂

    reactor 详解 在类似网关这种海量连接, 很高的并发的场景, 比如有 10W+ 连接, go 开始变得吃力. 因为频繁的 goroutine 调度和 gc 导致程序性能很差. 这个时候我们可以考 ...

  6. kvm里的虚拟机硬盘和网卡使用virtio驱动

    1.首先从虚拟机的xml文件中找到已经使用virtio驱动的硬件,复制里面的address这行参数出来 <address type='pci' domain='0x0000' bus='0x00 ...

  7. Kibana仪表盘(Dashboard)详解

    Kibana 仪表板(Dashboard) 展示保存的可视化结果集合. 在编辑模式下,您可以根据需要安排和调整可视化结果集,并保存仪表板,以便重新加载和共享. 创建一个仪表板 如何创建一个仪表板: 点 ...

  8. Acwing 正方形数组的数目(dfs去重)

    解题代码 #include<iostream> #include<algorithm> #include<cmath> using namespace std; # ...

  9. Go设计模式学习准备——下载bilibili合集视频

    需求 前段时间面试,被问到设计模式.说实话虽然了解面向对象.多态,但突然被问到设计模式,还要说清解决什么问题,自己是有些懵的,毕竟实习主要工作是在原项目基础进行CRUD,自己还是没有深度思考,所以只能 ...

  10. cf1082 A. Vasya and Book

    中文题意: 思路:我们先看看能不能直接从x翻到y,abs(y-x)%d==0,可以就直接输出abs(y-x)/d咯,不行的话之后有2种操作 1.先翻回到第一页,从第一页看看能不能范到y,不能的话翻到最 ...