SpringBoot(10) - NoSQL(1) - redis

参考:https://docs.spring.io/spring-boot/docs/1.5.17.RELEASE/reference/htmlsingle/#boot-features-nosql

 

SpringBoot Data提供了其他项目帮助访问各种NoSQL技术,包括MongoDB,Neo4J,Elasticsearch,Solr,Redis,Gemfire,Cassandra,Couchbase和LDAP。Spring Boot为Redis,MongoDB,Neo4j,Elasticsearch,Solr Cassandra,Couchbase和LDAP提供自动配置; 也可以使用其他项目,但需要自己配置它们。 请参阅projects.spring.io/spring-data上的相应参考文档。

 

Redis

1. 简介

Redis是一个缓存,消息代理和功能丰富的键值存储。 Spring Boot为Jedis客户端库提供基本的自动配置,并在Spring Data Redis提供的基础上提供抽象。 有一个spring-boot-starter-data-redis的'Starter'用于以方便的方式收集依赖项。

2. 连接Redis

可以像注入任何其他Spring Bean一样注入自动配置的RedisConnectionFactory,StringRedisTemplate或vanilla RedisTemplate实例。 默认情况下,实例将尝试使用localhost:6379连接到Redis服务器:

@Component
public class MyBean {
    @Autowired
    private StringRedisTemplate template;
}

如果你自己添加任何自动配置类型的@Bean,它将替换默认值(除了RedisTemplate,排除是基于bean名称'redisTemplate'而不是它的类型).如果commons-pool2在类路径上,则默认情况下将获得池连接工厂。

3. 示例

确保已经安装好redis,以单机版为例:

pom.xml添加依赖

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

方式一:借助SpringBoot的自动配置

1. application.yml配置:

配置连接redis的host、端口、密码等,借助SpringBoot的自动配置,自动注册JedisConnectionFactory、RedisTemplate

spring:
  redis:
    host: redis01.momo.com
    port: 6379
    # redis密码,默认为空
    password: redis
    # redis分片,默认值0(redis默认有16个分片,0-15)
    database: 0
    pool:
      # 连接池最大连接数,默认值8(负数表示没有限制)
      max-active: 8
      # 连接最大等待时间(负数表示没有限制)
      max-wait: -1
      # 连接池中的最大空闲连接
      max-idle: 8
      # 连接池中的最小空闲连接
      min-idle: 0
    # 连接超时时间(毫秒)
    timeout: 10000

2. 测试

无需其他配置,即可连接redis进行操作。

@RunWith(SpringRunner.class)
@SpringBootTest
public class DefaultRedisTest {

//	@Autowired
//	private RedisTemplate<String, String> redisTemplate;
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    public void testOpsForValueSet() {
        stringRedisTemplate.opsForValue().set("default-name", "小明");
    }
    @Test
    public void testOpsForValueGet() {
        String name = stringRedisTemplate.opsForValue().get("default-name");
        System.out.println(name);
    }
}

方式二:手动配置

1. src/main/resources/config目录下定义redis.properties

# redis config
# redis
redis.host=redis01.momo.com
redis.port=6379
redis.password=redis
redis.database=0
redis.timeout=10000
#redis.usePool=true
# redis pool
redis.maxTotal=100
redis.maxIdle=20
redis.minIdl=0
redis.maxWaitMillis=1000
#redis.testOnBorrow=true
redis.defaultCacheExpireTime=7200

2. 配置类

@Component
@ConfigurationProperties(prefix = "redis")
@PropertySource("classpath:config/redis.properties")
public class RedisProperties {
    private String host;
    private int port;
    private String password;
    private int database;
    private int timeout;
    private boolean usePool;
    private int maxTotal;
    private int maxIdle;
    private int minIdle;
    private long maxWaitMillis;
    private boolean testOnBorrow;
    private long defaultCacheExpireTime;
    // getter setter略
}

3. 自定义RedisTemplate

相关说明见注释

@Configuration
public class SpringRedisConfig {

    @Autowired
    private RedisProperties redisProperties;
//    @Autowired
//    private RedisConnectionFactory connectionFactory;

    /**
     * redis配置
     *
     * @return
     */
    @Bean
    public JedisPoolConfig jedisPoolConfig() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(redisProperties.getMaxTotal());
        jedisPoolConfig.setMaxIdle(redisProperties.getMaxIdle());
        jedisPoolConfig.setMinIdle(redisProperties.getMinIdle());
        jedisPoolConfig.setMaxWaitMillis(redisProperties.getMaxWaitMillis());
        jedisPoolConfig.setTestOnBorrow(true);
        return jedisPoolConfig;
    }

    /**
     * redis连接工厂
     *
     * @return
     */
    @Bean
    public JedisConnectionFactory connectionFactory() {
        JedisConnectionFactory connectionFactory = new JedisConnectionFactory();
        connectionFactory.setPoolConfig(jedisPoolConfig());
        connectionFactory.setHostName(redisProperties.getHost());
        connectionFactory.setPort(redisProperties.getPort());
        connectionFactory.setPassword(redisProperties.getPassword());
        connectionFactory.setDatabase(redisProperties.getDatabase());
        connectionFactory.setTimeout(redisProperties.getTimeout());
        connectionFactory.setUsePool(true);
        return connectionFactory;
    }

    /**
     * 实例化RedisTemplate对象
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        initRedisTemplate(redisTemplate, connectionFactory());
        return redisTemplate;
    }

    /**
     * 设置key、value存入redis的序列化方式
     *
     * @param redisTemplate
     * @param connectionFactory
     */
    private void initRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory connectionFactory) {
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.setConnectionFactory(connectionFactory);
    }
}

4. 测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class CustomRedisTest {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;


    @Test
    public void testOpsForValueSet() {
        redisTemplate.opsForValue().set("name", "小明");
    }
    @Test
    public void testOpsForValueGet() {
        String value = (String) redisTemplate.opsForValue().get("name");
        System.out.println(value);
    }
}

 

demo代码:https://github.com/mytt-10566/springboot-redis

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值