01-Redis Spring Boot中整合Redis

Redis

一个使用C语言编写的key-value的数据库,也被称作NoSQL数据库。用于高速缓存数据,存放在内存中。

5种数据类型

string

list

set

sorted set

hash

jedis的使用

其中的Jedis类用于访问Redis服务器,可以与Server建立连接并发送命令

// 建立Redis的操作对象
Jedis jedis = new Jedis("192.168.12.39","6379");
//密码验证
String status = jedis.auth("123123");
// 消息验证
sout("ping=" + jedis.ping());
// 设置key-value
jedis.set("jedis-key1","value");
// 从缓存获取值
String val = jedis.get("jedis-key1");
sout(val);
// 关闭连接
try{
    
}finally{
    if(jedis != null){
        jedis.close();
    }
}

发布和订阅

发布订阅(pub/sub)是一种消息通信模式:发布者(pub)发送消息,订阅 者(sub)接收消息。

redis作为一个server,在订阅者和发布者之间起到了消息路由的功能, 解耦消息发布者和消息订阅者。

订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息,发布者通过publish命令向redis server发送特定类型的消 息。

• 一个client可以订阅多个 channel,一个channel也可以被多个client订阅。

• 当客户端通过subscribe或psubscribe订阅后就进入订阅模式,除非使

用unsubscribe或punsubscribe命令退出订阅模式,否则不能发送其他 命令。

• 监听

MyPubSub ps = new MyPubSub();

jedis.subscribe(ps, “channel1");

注:MyPubSub类继承自JedisPubSub类, 它是Redis驱动包提供的一 个抽象类,用于实现对消息的处理

JedisPubSub类中提供的可被子类重写的方法

public class MyPubSub extends JedisPubSub {
//从订阅的频道收到消息时的回调
public void onMessage(String channel, String message) { }
//从订阅的频道模式收到消息时的回调
public void onPMessage(String pattern, String channel, String message) { }
//订阅频道时的回调
public void onSubscribe(String channel, int subscribedChannels) { }
//取消订阅频道时的回调
public void onUnsubscribe(String channel, int subscribedChannels) {}
public void onPUnsubscribe(String pattern, int subscribedChannels) {}
public void onPSubscribe(String pattern, int subscribedChannels) {}
}

Spring Data Redis

Spring Data Redis(SDR)是Spring提供的组件,用来简化访问Redis,它也是对Jedis组件的封装。

在Spring Boot项目中整合Redis

spring boot使用lettuce作为客户端jar,它是线程安全的

  • 在application.properties配置:

  • server.port=8081
    server.servlet.context-path=/spbSdr
    
    #Redis配置
    spring.redis.host=192.168.12.39
    spring.redis.port=6379
    spring.redis.password=123123
    spring.redis.database=1
    spring.redis.timeout=5000
    spring.redis.lettuce.pool.max-active=8 
    spring.redis.lettuce.pool.max-wait=-1
    spring.redis.lettuce.pool.max-idle=8
    spring.redis.lettuce.pool.min-idle=0
    

    在RedisConfig配置:

    package com.yq.spbsdr01;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.cache.CacheManager;
    import org.springframework.cache.annotation.CachingConfigurerSupport;
    import org.springframework.cache.annotation.EnableCaching;
    import org.springframework.context.annotation.Bean;
    import org.springframework.data.redis.cache.RedisCacheConfiguration;
    import org.springframework.data.redis.cache.RedisCacheManager;
    import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
    import org.springframework.data.redis.serializer.RedisSerializationContext;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    
    import javax.annotation.Resource;
    import java.time.Duration;
    
    @EnableCaching
    public class RedisConfig extends CachingConfigurerSupport {
        @Resource
        private LettuceConnectionFactory lettuceConnectionFactory;
    
        public CacheManager cacheManager() {
            // 生成默认配置config对象
            RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
            // 设置缓存的默认过期时间,并且不缓存空值
            config = config.entryTtl(Duration.ofMinutes(10)).disableCachingNullValues();
            // 设置针对key和value所使用的序列化器
            config = config.serializeKeysWith(
                        RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
                    .serializeValuesWith(
                            RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
            return RedisCacheManager.builder(lettuceConnectionFactory).cacheDefaults(config).build();
        }
    
        @Bean
        public RedisTemplate<String, Object> redisTemplate() {
            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
            // 设置针对key和value所使用的序列化器
            redisTemplate.setKeySerializer(new StringRedisSerializer());
            redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
    
            redisTemplate.setHashKeySerializer(new StringRedisSerializer());
            redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
    
            redisTemplate.setConnectionFactory(lettuceConnectionFactory);
    
            return redisTemplate;
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
shiro-redis-spring-boot-starter是一个用于集成Apache Shiro和RedisSpring Boot Starter项目。Apache Shiro是一个强大而灵活的Java安全框架,用于身份验证、授权和会话管理等安全功能。而Redis是一个高性能的内存数据库,其具有快速的数据存取能力和持久化支持。 shiro-redis-spring-boot-starter提供了一种简化和快速集成Shiro和Redis的方式,使得在Spring Boot应用实现安全功能变得更加容易。通过使用该Starter,我们可以方便地将Shiro的会话管理功能存储到Redis,从而支持分布式环境下的会话共享和管理。 使用shiro-redis-spring-boot-starter可以带来以下好处: 1. 分布式环境的会话共享:通过将Shiro的会话数据存储到Redis,不同的应用节点可以共享同一个会话,从而实现分布式环境下的会话管理和跨节点的身份验证和授权。 2. 高可用性和性能:Redis作为一个高性能的内存数据库,具有出色的数据读写能力和持久化支持,可以提供可靠的会话存储和高性能的数据访问能力。 3. 简化配置和集成:shiro-redis-spring-boot-starter提供了封装好的配置和集成方式,减少了我们自己实现集成的复杂性和工作量。 总结来说,shiro-redis-spring-boot-starter为我们提供了一种简化和快速集成Shiro和Redis的方式,使得在Spring Boot应用实现安全功能变得更加容易和高效。通过它,我们可以实现分布式环境下的会话共享和管理,提供高可用性和性能的数据存取能力,同时简化了配置和集成的复杂性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李鑫海。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值