首页 > 数据库 >SpringBoot使用Redis分布式缓存

SpringBoot使用Redis分布式缓存

时间:2023-10-29 10:44:51浏览次数:34  
标签:缓存 SpringBoot max Redis 192.168 RedisTemplate new 序列化 redisTemplate

Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

RedisTempate

引入依赖

<!--spring boot 2.0以后默认使用lettuce-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--lettuce 依赖commons-pool-->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.11.1</version>
</dependency>
<!-- jackson -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.1</version>
</dependency>

application.yml配置

实际开发中,jedis和lettuce二选一即可。

server:
  port: 9999

#系统默认连接池,这种方式 redisTemplate 可直接使用默认,在使用的地方直接注入即可
spring:
  redis:
    cluster:
      nodes: 192.168.198.155:7000,192.168.198.155:7001,192.168.198.155:7002,192.168.198.155:7003,192.168.198.155:7004,192.168.198.155:7005
      max-redirects: 3
    timeout: 6000
    #lettuce客户端
    lettuce:
      pool:
        max-active: 50
        max-idle: 8
        min-idle: 0
        max-wait: 1000ms
      shutdown-timeout: 100ms
    #jedis客户端
    jedis:
      pool:
        max-active: 50
        max-idle: 8
        min-idle: 0
        max-wait: 1000ms

Jedis和Lettuce的配置类

实际开发中二选一即可。

  • RedisJedisClusterConfig.java
@Configuration
public class RedisJedisClusterConfig {

    @Bean(name = "redisJedisTemplate")
    public RedisTemplate<String, Object> redisJedisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new StringRedisSerializer());
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        return redisTemplate;
    }
}
  • RedisLettuceClusterConfig.java
@Configuration
public class RedisLettuceClusterConfig extends CachingConfigurerSupport {

    @Bean(name = "redisLettuceTemplate")
    public RedisTemplate<String, Object> redisLettuceTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(factory);

        // 使用Jackson2JsonRedisSerialize 替换默认序列化
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);

        // key采用String的序列化方式
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        // value序列化方式采用jackson
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        // hash的key也采用String的序列化方式
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        // hash的value序列化方式采用jackson
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();

        return redisTemplate;
    }
}

Spring Boot Data(数据) Redis 中提供了 RedisTemplate 和 StringRedisTemplate;

StringRedisTemplate 是 RedisTemplate 的子类,两个方法基本一致,不同之处在于 操作的数据类型不同:

  • RedisTemplate 两个泛型都是 Object,意味着存储的 key 和 value 都可以是一个对象。
  • StringRedisTemplate 两个泛型都是 String,意味着存储的 的 key 和 value 都只能是字符串。

使用 RedisTemplate 默认是将对象序列化到 Redis 中,所以 放入的对象必须实现对象序列化接口。

两者的 数据是不共通的;也就是说 StringRedisTemplate 只能管理 StringRedisTemplate 里面的数据,RedisTemplate 只能管理 RedisTemplate 中的数据。

RedisTemplate<String, Object>工具类

下面我们就以RedisTemplate<String, Object> 模板为基础提供一个操作redis的工具类。

 

测试验证

 

标签:缓存,SpringBoot,max,Redis,192.168,RedisTemplate,new,序列化,redisTemplate
From: https://www.cnblogs.com/xfeiyun/p/17795581.html

相关文章

  • springboot项目实现断点续传功能
    这篇文章主要介绍了springboot项目实现断点续传,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 java代码packagecom.ruoyi.web.upload.controller;importcom.ruoyi.web.upload.dto.FileChunkDTO;importcom.ruoyi.......
  • Redis实现消息队列的几种方式及基于Stream的消息队列演示
    消息队列(MessageQueue),字面意思就是存放消息的队列。最简单的消息队列模型包括3个角色:●消息队列:存储和管理消息,也被称为消息代理(MessageBroker)●生产者:发送消息到消息队列●消费者:从消息队列获取消息并处理消息Redis提供了三种不同的方式来实现消息队列:◆list结构:基......
  • java——redis随笔——实战——优惠券秒杀——分布式锁
    注意:synchronized用户单机(jvm)上面的锁,对于分布式应用则无能为力。所以对于分布式系统,则需要分布式锁。 分布式锁:满足分布式系统或集群模式下多线程课件并且可以互斥的锁分布式锁的核心思想就是让大家共用同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分......
  • Redis 数据持久化方案
    今日目标掌握Redis数据持久化原理在分布式系统中,存储非结构化数据的中间件Redis是必不可少的,Redis在小、中、大甚至高并发系统中都有发挥起作用的场合,在之前我已经给大家介绍过Redis的基础数据结构(String/Hash/Set/ZSet/List)的增删改查操作。现在思考一个问题,Redis如果仅仅只是将......
  • 一些研发工程师在Springboot注意点
    一些研发工程师在Springboot注意点1.正确设计代码目录结构虽然您有很大的自由度,但有一些基本规则值得遵循来设计您的源代码结构。避免使用默认包。确保所有内容(包括入口点)都在命名良好的包中,这样您就可以避免与组装和组件扫描相关的意外情况;将Application.java(应用程序的入口类)......
  • [ Redis 2 ] 持久化
    Redis_2持久化1.Redis.conf详解redis.conf从上向下详解1.1单位配置1redis对单位的大小写是不敏感的,单位可以是gb,GB,Gb等等。2可以包含其他配置文件的配置1.2网络配置绑定的ip和端口号bind127.0.0.1protected-modeyes#保护模式port63791.3通用配置Gener......
  • thymeleaf引用JS加随机数防止缓存
    一、运行环境1、Thymeleaf2.2.22、SpringBoot2.6.4二、实际代码<scriptth:src="@{/back/js/cloud/manageAddress.js(__${#httpServletRequest.getSession().getId()}__)}"></script>说点废话。都说ChatGPT智能,至少我感觉3.5一般国内有人搭建了要收费 其实ChatGPT对写代码还是......
  • SpringBoot 自定义注解实现过程
    1、新建SpringBoot-Test 其中pom.xml文件如下:<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schem......
  • redis缓存更新策略,缓存穿透,缓存雪崩,缓存击穿。封装redis工具类
    (redis缓存)缓存是存储数据的临时地方,一般读写性能高1.给商铺添加缓存思路:在对应的serviceImpl里写逻辑@OverridepublicResultqueryById(Longid){Stringkey=CACHE_SHOP_KEY+id;//1.从redis查询商铺缓存StringshopJSON=stringRedisTemplate.opsF......
  • Linux 下使用 Docker 安装 Redis
    1、下载redisdockerpullredis:6.2.62、提前创建挂载目录mkdir-p/mydata/redis/confmkdir-p/mydata/redis/datamkdir-p/mydata/redis/logtouch/mydata/redis/conf/redis.conftouch/mydata/redis/log/redis.logchmod777/mydata/redis/log/redis.log3、启......