SpringBoot使用Redis实现分布式缓存

目录
  • springboot使用Redis实现分布式缓存
  • Redis实现主从复制
  • Redis集群的构建

springboot使用Redis实现分布式缓存

1、环境构建

​ 1.1 通过MybatisX工具逆向功能快速初始化一个工程(springboot+mybatis-plus)

​ 1.2 构建controller层测试各模块的功能

​ 1.3 相同的请求没有实现共享数据,需要开启mybatis的二级缓存

​ 1.4 springboot环境下开启mybatis-plus的二级缓存

1.5编写获取spring工厂的工具类

@Component
public class ApplicationContextUtils implements ApplicationContextAware {

    private  static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }
    public static Object getBean(String beanName){
        return applicationContext.getBean(beanName);
    }
}

1.6编写Redis缓存类

@Slf4j
public class RedisCache  implements Cache {

    private final String id;

    public RedisCache(String id){
        this.id = id;
    }

    // 操作模块的mapper文件的命名空间 唯一标识符
    @Override
    public String getId() {
        log.info("id= {}",id);
        return this.id;
    }

    // 将数据写入redis
    @Override
    public void putObject(Object key, Object value) {

        log.info("===============将查询的数据开始写入缓存===============");
        RedisTemplate redisTemplate = getRedisTemplate();
        redisTemplate.opsForHash().put(id, key.toString(), value);

        log.info("===============将查询的数据写入缓存完毕===============");

    }

    // 获取缓存中的数据
    @Override
    public Object getObject(Object key) {
        log.info("============开始从缓存中获取数据=============");
        RedisTemplate redisTemplate = getRedisTemplate();
        log.info("============从缓存中获取数据完毕=============");
        return redisTemplate.opsForHash().get(id, key.toString());
    }

    // 移除缓存中的数据
    @Override
    public Object removeObject(Object key) {
        return null;
    }

    // 清空缓存
    @Override
    public void clear() {
        log.info("==========清空缓存=============");
        RedisTemplate redisTemplate = getRedisTemplate();
        redisTemplate.delete(id);
    }

    // 获取缓存的数量
    @Override
    public int getSize() {
        RedisTemplate redisTemplate = (RedisTemplate) 			ApplicationContextUtils.getBean("redisTemplate");
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        int size = redisTemplate.opsForHash().size(id).intValue();
        return size;
    }

    private RedisTemplate getRedisTemplate(){
        RedisTemplate redisTemplate = (RedisTemplate) ApplicationContextUtils.getBean("redisTemplate");
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }

}

1.7Redis中有关联关系缓存数据的处理

@CacheNamespaceRef(DeptMapper.class)  // 引用有关联关系的命名空间
public interface EmpMapper extends BaseMapper<Emp> {

}
注:以上设置完成后,两个模块会使用相同的key(命名空间)存储数据到缓存中

1.8 Redis中key进行摘要算法

DigestUtils.md5DigestAsHex(key.toString().getBytes()) // 通过该操作可以减少key的长度

Redis实现主从复制

1.准备三台已经安装Redis的虚拟机

​​​​​​​2.查看三台虚拟机的ip地址

3.通过远程连接工具FinalShell连接

4.修改从节点配置文件

启动三台服务器上的redis后,输入一下命令查看redis主从配置状态

info replication

修改从节点服务器的配置文件redis.conf

replicaof  主机ip 主机redis接口
masterauth 密码

修改后重启两个从机,在主机和从机分别输入一下命令查看如下:

info replication

验证主从架构

至此主从架构设置完成

Redis集群的构建

以上结构的集群构建可以在一台虚拟机环境中进行模拟,首先创建一台已经安装好Redis数据库的虚拟机

开启虚拟机并在虚拟机的根路径下创建好7000,7001,7002,7003,7004,7005六个文件夹,之后将redis解压目录下的redis.conf配置文件拷贝到以上几个文件夹中,同时按照以下参数完成配置文件的修改

修改配置文件中的参数

以上6个文件夹中文件全部修改完毕之后,可以按照以下指令启动全部的redis节点

查看redis服务是否已经全部启动成功

ps aux|grep  redis

全部启动成功之后,执行以下指令,将多个节点组合成集群,同时实现主从备份

确认集群的主从从节点信息

输入yes,确认主从节点信息后,输出以下信息,表示集群构建成功

使用一下指令登录集群中的任意节点实现数据的操作,查看集群是否可正常工作

./redis-cli -a cyclone -c -h 192.168.220.11 -p 7001   连接

-a 表示连接密码  没有可省略
-c 表示集群方式进行启动
-h ip 地址
-p 表示端口号

如果在springboot项目中连接Redis集群可按照一下方式进行配置

redis:
    cluster:
       nodes: 192.168.1.1:6379 ,.....

以上就是SpringBoot使用Redis实现分布式缓存的详细内容,更多关于Springboot Redis分布式缓存的资料请关注我们其它相关文章!

(0)

相关推荐

  • SpringBoot中的Redis 缓存问题及操作方法

    目录 1.五大基本数据类型和操作 1.1 字符串-string 1.2 列表-list 1.3 集合-set 1.4 键值对-hash 1.5 有序集合-zset 2.Redis整合 2.1 spring-boot-starter-data-redis 依赖 2.2 redis配置 2.3 SpringBoot框架自动配置的redisTemplate 2.3.1 清空数据库 2.3.2 添加数据 2.3.3 获取数据 2.3.4 修改值 (出现错误) 2.4 自定义redisTemplate 2

  • SpringBoot集成redis实现分布式锁的示例代码

    1.准备 使用redis实现分布式锁,需要用的setnx(),所以需要集成Jedis 需要引入jar,jar最好和redis的jar版本对应上,不然会出现版本冲突,使用的时候会报异常redis.clients.jedis.Jedis.set(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String; 我使用的redis版本是2.3.0,Jedis使用的是3.3.0 <de

  • SpringBoot集成Redis数据库,实现缓存管理

    目录 一.Redis简介 二.Spring2.0集成Redis 1.核心依赖 2.配置文件 3.简单测试案例 4.自定义序列化配置 5.序列化测试 三.源代码地址 一.Redis简介 Spring Boot中除了对常用的关系型数据库提供了优秀的自动化支持之外,对于很多NoSQL数据库一样提供了自动化配置的支持,包括:Redis, MongoDB, Elasticsearch.这些案例整理好后,陆续都会上传Git. SpringBoot2 版本,支持的组件越来越丰富,对Redis的支持不仅仅是扩展

  • SpringBoot整合Redis入门之缓存数据的方法

    目录 前言 为什么要使用Redis呢? 相关依赖 配置 数据库 实体类 RedisConfig Mapper Service接口 Service实现类 测试Redis Controller 前言 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主持.从2013年5月开始,Redis的开发由Pivotal赞助. 为什么要使用Redis呢? 举个例子,

  • SpringBoot基于Redis的分布式锁实现过程记录

    目录 一.概述 二.环境搭建 三.模拟一个库存扣减的场景 四.总结 一.概述 什么是分布式锁 在单机环境中,一般在多并发多线程场景下,出现多个线程去抢占一个资源,这个时候会出现线程同步问题,造成执行的结果没有达到预期.我们会用线程间加锁的方式,比如synchronized,lock,volatile,以及JVM并发包中提供的其他工具类去处理此问题. 但是随着技术的发展,分布式系统的出现,各个应用服务都部署在不同节点,由各自的JVM去操控,资源已经不是在 线程 之间的共享,而是变成了 进程 之间的

  • SpringBoot使用Redis实现分布式锁

    前言 在单机应用时代,我们对一个共享的对象进行多线程访问的时候,使用java的synchronized关键字或者ReentrantLock类对操作的对象加锁就可以解决对象的线程安全问题. 分布式应用时代这个方法却行不通了,我们的应用可能被部署到多台机器上,运行在不同的JVM里,一个对象可能同时存在多台机器的内存中,怎样使共享对象同时只被一个线程处理就成了一个问题. 在分布式系统中为了保证一个对象在高并发的情况下只能被一个线程使用,我们需要一种跨JVM的互斥机制来控制共享资源的访问,此时就需要用到

  • 详解SpringBoot集成Redis来实现缓存技术方案

    概述 在我们的日常项目开发过程中缓存是无处不在的,因为它可以极大的提高系统的访问速度,关于缓存的框架也种类繁多,今天主要介绍的是使用现在非常流行的NoSQL数据库(Redis)来实现我们的缓存需求. Redis简介 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件,Redis 的优势包括它的速度.支持丰富的数据类型.操作原子性,以及它的通用性. 案例整合 本案例是在之前一篇SpringBoot + Mybatis + RESTful的基础上来集

  • SpringBoot使用Redis缓存的实现方法

    (1)pom.xml引入jar包,如下: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> (2)修改项目启动类,增加注解@EnableCaching,开启缓存功能,如下: package springboot; import org

  • SpringBoot整合Redis、ApachSolr和SpringSession的示例

    本文介绍了SpringBoot整合Redis.ApachSolr和SpringSession,分享给大家,具体如下: 一.简介 SpringBoot自从问世以来,以其方便的配置受到了广大开发者的青睐.它提供了各种starter简化很多繁琐的配置.SpringBoot整合Druid.Mybatis已经司空见惯,在这里就不详细介绍了.今天我们要介绍的是使用SpringBoot整合Redis.ApacheSolr和SpringSession. 二.SpringBoot整合Redis Redis是大家比

  • SpringBoot redis分布式缓存实现过程解析

    前言 应用系统需要通过Cache来缓存不经常改变得数据来提高系统性能和增加系统吞吐量,避免直接访问数据库等低速存储系统.缓存的数据通常存放在访问速度更快的内存里或者是低延迟存取的存储器,服务器上.应用系统缓存,通常有如下作用:缓存web系统的输出,如伪静态页面.缓存系统的不经常改变的业务数据,如用户权限,字典数据.配置信息等 大家都知道springBoot项目都是微服务部署,A服务和B服务分开部署,那么它们如何更新或者获取共有模块的缓存数据,或者给A服务做分布式集群负载,如何确保A服务的所有集群

  • SpringBoot中使用redis做分布式锁的方法

    一.模拟问题 最近在公司遇到一个问题,挂号系统是做的集群,比如启动了两个相同的服务,病人挂号的时候可能会出现同号的情况,比如两个病人挂出来的号都是上午2号.这就出现了问题,由于是集群部署的,所以单纯在代码中的方法中加锁是不能解决这种情况的.下面我将模拟这种情况,用redis做分布式锁来解决这个问题. 1.新建挂号明细表 2.在idea上新建项目 下图是创建好的项目结构,上面那个parent项目是其他项目不用管它,和新建的没有关系 3.开始创建controller,service,dao(mapp

随机推荐