springboot中使用redis

redis在springboot中使用示例

引入依赖

创建好的springboot工程,是引入了springboot的依赖的,继承springboot的子项目,其中使用的就是springboot工程的版本,对于springboot-1.x 和 2.x来说,对于redis的依赖是不一样的,否则redis连接可能会出错;这里以2.x为例,2.x直接将配置放置在了父工程的依赖管理中,我们直接使用下面的依赖:

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

配置redis

引入依赖完成了,但是需要使用redis,我们需要先有一个redis,如果没有的话,可以看看docker快速启动一个redis,这里假设已经有了redis,springboot提供了许多中间件的自动装配功能,引入了上面的依赖,redis的自动装配就会被扫描,然而初始化redis连接的条件是要配置了redis的连接,我们可以在工程的: application.properties(默认)/application.yml(推荐使用,手动改后缀)中配置我们的redis连接:

spring:
  redis:
    host: localhost #redis服务地址
    port: 6379 #服务端口默认6379
    database: 0 # reids中的数据库编号
    jedis:  # 连接设置
      pool: # 连接池参数
        max-active: 40  # 最大活跃线程
        max-idle: 10    # 最大等待连接数
        max-wait: 3000  # 等待连接超时时间

开始使用

使用之前,首先先要保证自己的redis能够连接(可以使用redis-cli命令行或者redis-desktop manager查看)。接下来需要使用redis做一个最简单的使用示例,由于我们在项目中配置了reids,springboot的自动装配就帮我们注入了RedisTemplate, 我们可以直接操作RedisTemplate,使用其中的模板方法(设计模式中的一种), 推荐使用StringRedisTemplate,如果是简单操作的话;

@Repository
public class RedisTest {

    @Autowried
    private RedisTemplate redistemplate;

    public void set(String key, Object value) {
        redistemplate.opsForValue().set(key, value);
    }

    public Object get(String key) {
        return redistemplate.opsForValue().get(key);
    }

}

这样可以进行测试,但是可能会出现一些问题,特别是在做转换的时候,那是因为们少了一些配置,如果使用StringRedisTemplate操作的话,简单测试是比较简单的;

使用配置

redis中的数据存储是需要序列化和反序列化的,所以我们需要配置和redis通信之间的序列化方案,否则,key可能无法正常命中, value可能不是预计的值;一般来说我们使用可能会存储json比较多,可以配置将redis的key的序列化方式配置成string类型的序列化,而value的序列化方式配置成json序列化,但是我个人不是很喜欢直接配置成json序列化,而是全都使用string的方式,由业务来处理json数据的转换;

// 主要就是RedisTemplate中的方法:
redistemplate.setKeySerializer(serializer); //设置key的
redistemplate.setValueSerializer(serializer); //设置value的
redistemplate.setHashKeySerializer(serializer); //设置hash数据中的key的
redistemplate.setHashValeSerializer(serializer); //设置hash数据中的value的

//对于serializer,提供有一下几种,也可以自行实现:
JdkSerializationRedisSerializer // jdk的序列化方案;
Jackson2JsonRedisSerializer //jackson 转json的方案;
StringRedisSerializer //字符串的方案 (目前最常用的方案)
... //还有几种不常用,也可以自己实现;

相关操作

在redis中提供许多种类的数据结构,在springboot中我们如何愉快的操作他们呢, RedisTemplate当然已经帮我们封装好了;


// 操作简单的字符串:
redistemplate.opsForValue();
// 操作List
redistemplate.opsForList();
// 操作 Set
redistemplate.opsForSet();
// 操作 Zset
redistemplate.opsForZSet();
// 操作hash
redistemplate.opsForHash();
... //以上是常用的,还有如地理坐标等的操作,使用到可以再看;

每种操作返回的是一个封装好的CURD的Operations,对应的是不同的方法操作;基本上和redis-cli中的操作都能由对应;

发布订阅

发布订阅是redis的一个附加功能,没有专业的消息队列那么强大,对于一些简单的数据分享场景可能也会使用到:

//消息的发送
redisTemplate.convertAndSend("topic", "message");

// 消息的订阅接收, 主要就是注册2个对象,可以放在一个@Configuration中
// 这个对象声明订阅的主题;
@Bean
public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter responseListenerAdapter) {
    RedisMessageListenerContainer container = new RedisMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.addMessageListener(responseListenerAdapter, new PatternTopic("topic"));
    return container;
}

//这个对象定义好消息如何处理, 就是自己定义一个对象,将对象和处理的方法名称作为参数传入;
@Bean
public MessageListenerAdapter loginListenerAdapter() {
    return new MessageListenerAdapter("这里传入一个处理器的类", "处理器中处理方法的名称");
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容