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整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

springboot整合TDengine全过程

《springboot整合TDengine全过程》:本文主要介绍springboot整合TDengine全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录环境准备JDBC-JNI方式准备依赖实体类Mapper配置类测试类RESTful方式实体类配置类测试类总结

Redis的持久化之RDB和AOF机制详解

《Redis的持久化之RDB和AOF机制详解》:本文主要介绍Redis的持久化之RDB和AOF机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述RDB(Redis Database)核心原理触发方式手动触发自动触发AOF(Append-Only File)核

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

浅析如何保证MySQL与Redis数据一致性

《浅析如何保证MySQL与Redis数据一致性》在互联网应用中,MySQL作为持久化存储引擎,Redis作为高性能缓存层,两者的组合能有效提升系统性能,下面我们来看看如何保证两者的数据一致性吧... 目录一、数据不一致性的根源1.1 典型不一致场景1.2 关键矛盾点二、一致性保障策略2.1 基础策略:更新数

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

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