redis在springboot中的使用

147 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情

springboot整合redis

1.pom文件引入starter

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.添加redis的相关配置

spring:
     # redis 配置
  redis:
    host: 127.0.0.1
    port: 6379
    password: 123654
    #超时连接
    timeout: 1000ms
    jedis:
      pool:
        #最大连接数据库连接数,设 0 为没有限制
        max-active: 8
        #最大等待连接中的数量,设 0 为没有限制
        max-idle: 8
        #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
        max-wait: -1ms
        #最小等待连接中的数量,设 0 为没有限制
        min-idle: 0

3.为什么进行数据过滤

  1. 我这里有些敏感的信息,想不在缓存里面加载这些数据。

  2. 我加载的数据里面有些数据长度太长了,占内存就不加载到缓存里面。

4.缓存中数据过滤的方式

  1. 我再添加缓存的时候就对添加的数据进行过滤;手动

  2. 我再数据添加的时候让客户端进行数据过滤;自动;主要是序列化的时候是通过json进行的,json可以过滤数据

    我再redis保存数据的时候是用的json串

    这里可以多声明几个bean

@Bean
    public RedisTemplate<String, Object> redisTemplateGroup(RedisConnectionFactory redisConnectionFactory) {
        // 配置redisTemplate
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        RedisSerializer stringSerializer = new StringRedisSerializer();
        redisTemplate.setKeySerializer(stringSerializer); // key序列化
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer(getMapper())); // value序列化
        redisTemplate.setHashKeySerializer(stringSerializer); // Hash key序列化
        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer(getMapper())); // Hash value序列化
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
    
    // 获取JSON工具
   	private final ObjectMapper getMapper() {
   		ObjectMapper mapper = new ObjectMapper();
   		JsonFilterUtil.addFilterForMapper(mapper);
   		//将类名称序列化到json串中,去掉会导致得出来的的是LinkedHashMap对象,直接转换实体对象会失败
   		mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL); 	    //设置输入时忽略JSON字符串中存在而Java对象实际没有的属性
   		mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
   		return mapper;
   	}

发布和订阅

  1. 需要实现一个RedisMessageListenerContainer的bean 里面会指定一个监听的key

  2. 需要实现一个MessageListenerAdapter的bean里面需要配置一个处理监听的方法

  3. 依据发布订阅我们可以做些什么?

    发送广播消息:例如一个聊天程序 用户分布再不同的服务器中,跨服务器聊天的用户接收到消息发现消息是这个服务器上的用户就可以直接推送到客户端了

    发送订阅消息:例如某个用户订阅了一个专栏,专栏写了新文章,监听到又新的内容可以根据订阅这个频道的用户添加推送内容。

    解耦:例如买了东西,异步给你发送email,添加积分类的