Redis+整合SpringDataRedis

2023-11-22 20:36

本文主要是介绍Redis+整合SpringDataRedis,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Nosql和缓存的背景

数据库架构设计的发展史
第一阶段:单库:随着访问量的增加出现了性能问题
第二阶段:缓存:通过缓存,缓解数据库的压力,优化数据结构和索引
第三阶段:读写分离:数据写入的压力增加,主从复制和读写分离的方案进入视野
第四阶段:分库分表:主表的写压力过高,开始使用InnoDB引擎,以及分库分表技术

核心问题:
传统数据库的扩展性差(需要复杂的技术来实现),大数据下IO压力大,表结构更加困难

持久化方式

持久化:将数据(如内存中的对象)保存到可永久保存的存储设备中

方式一:RDB方式
在指定的时间间隔内对数据进行快照存储。先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储,是一次的全量备份
方式二:AOF方式
以日志文本的形式记录服务器所处理的每一个数据更改指令,然后通过重放来恢复数据,是连续的增量备份

Redis整合SpringDataRedis

Spring Data是Spring公司的顶级项目,里面包含了N多个二级子项目,这些子项目都是相当独立的项目。每个子项目是对不同API的封装
所有Spring Boot整合Spring Data xxx的启动器都叫做spring-boot-starter-data-xxx
Spring Data好处很方便操作对象类型。
把Redis不同值的类型放到一个opsForxxx方法中
opsForValue:String值
opsForList:列表List
opsForHash:哈希表Hash
opsForZSet:有序集合Sorted Set
opsForSet:集合
使用步骤:
1.添加依赖

 <!--导入redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.5.0</version></dependency>

2.配置文件

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/userdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456mybatis.type-aliases-package=com.zuxia.entity
mybatis.mapper-locations=classpath:mapper/*.xml#配置redis 服务参数
spring.redis.database=1
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=spring.redis.jedis.pool.max-active=80
spring.redis.jedis.pool.max-wait=-1spring.redis.jedis.pool.max-idle=50spring.redis.jedis.pool.min-idle=30spring.redis.timeout=500

3.编写配置类

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){RedisTemplate<String ,Object> redisTemplate=new RedisTemplate<>();redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class));redisTemplate.setConnectionFactory(factory);return redisTemplate;}
}
  1. Controller类
package com.zuxia.controller;import com.sun.org.apache.xpath.internal.operations.Mod;
import com.zuxia.entity.Product;
import com.zuxia.service.IProduct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class ProductController {@Autowiredprivate IProduct iProduct;@GetMapping("/show")public String select(Integer id, Model model){Product product = iProduct.findByID(id);model.addAttribute("product",product);return "show";}@RequestMapping("/del")@ResponseBodypublic String del(Integer id, Model model){int i=iProduct.del(id);if(i>0){return "删除成功";}return "删除失败";}@RequestMapping("/update ")@ResponseBodypublic String update(Product product, Model model){int i=iProduct.update(product);if(i>0){return "修改成功";}return "修改失败";}@RequestMapping("/add")@ResponseBodypublic String Add(Product product, Model model){int i=iProduct.insert(product);if(i>0){return "增加成功";}return "曾加失败";}
}
  1. Service类
package com.zuxia.service.impl;import com.zuxia.entity.Product;
import com.zuxia.mapper.ProductMapper;
import com.zuxia.service.IProduct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.stereotype.Service;@Service
public class ProductServiceImpl implements IProduct {@Autowired(required = false)private ProductMapper productMapper;@Autowiredprivate RedisTemplate<String,Object> redisTemplate;@Overridepublic Product findByID(Integer id) {String key="product:"+id;//先从redis中获取数据if(redisTemplate.hasKey(key)){//判断id是否在缓存中存在System.out.println("执行缓存");//设置value的值redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<Product>(Product.class));//从缓存中获取数据Product product=(Product) redisTemplate.opsForValue().get(key);return product;}System.out.println("执行mysql数据查询");Product product=productMapper.findByID(id);//将查到的值存入缓存中redisTemplate.opsForValue().set(key,product);return product;}@Overridepublic int del(Integer id) {int i=productMapper.del(id);String key="prodoct:"+id;//判断缓存中是否存在boolean ret=  redisTemplate.hasKey(key);if(ret){System.out.println("缓存中的数据删除了");redisTemplate.delete(key);}return i;}@Overridepublic int update(Product product) {int i=productMapper.update(product);if(i>0){String key="product"+product.getId();if(redisTemplate.hasKey(key)){System.out.println("缓存的数据更改了");redisTemplate.opsForValue().set(key,product);}}return i;}@Overridepublic int insert(Product product) {return productMapper.insert(product);}
}

这篇关于Redis+整合SpringDataRedis的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/412749

相关文章

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

Springboot整合Redis主从实践

《Springboot整合Redis主从实践》:本文主要介绍Springboot整合Redis主从的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言原配置现配置测试LettuceConnectionFactory.setShareNativeConnect

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

SpringBoot整合Apache Flink的详细指南

《SpringBoot整合ApacheFlink的详细指南》这篇文章主要为大家详细介绍了SpringBoot整合ApacheFlink的详细过程,涵盖环境准备,依赖配置,代码实现及运行步骤,感兴趣的... 目录1. 背景与目标2. 环境准备2.1 开发工具2.2 技术版本3. 创建 Spring Boot

Spring Boot 整合 Apache Flink 的详细过程

《SpringBoot整合ApacheFlink的详细过程》ApacheFlink是一个高性能的分布式流处理框架,而SpringBoot提供了快速构建企业级应用的能力,下面给大家介绍Spri... 目录Spring Boot 整合 Apache Flink 教程一、背景与目标二、环境准备三、创建项目 & 添

Redis指南及6.2.x版本安装过程

《Redis指南及6.2.x版本安装过程》Redis是完全开源免费的,遵守BSD协议,是一个高性能(NOSQL)的key-value数据库,Redis是一个开源的使用ANSIC语言编写、支持网络、... 目录概述Redis特点Redis应用场景缓存缓存分布式会话分布式锁社交网络最新列表Redis各版本介绍旧

Java如何从Redis中批量读取数据

《Java如何从Redis中批量读取数据》:本文主要介绍Java如何从Redis中批量读取数据的情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一.背景概述二.分析与实现三.发现问题与屡次改进3.1.QPS过高而且波动很大3.2.程序中断,抛异常3.3.内存消