springboot整合redisson

01 搭建redis服务

我是在自己的云服务通过docker搭建了一个单机的redis服务

docker run -d --rm --name redis5 -p 6379:6379 redis --requirepass "123456"

02 创建应用

1.在pom.xml文件导入redisson依赖

<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>3.11.5</version>
</dependency>

2.配置连接redis的信息

我们有两种方式配置连接redis,其它配置方式参考官方文档
第1种,通过appliancation.properties文件去配置

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=123456

第2种,通过@bean的方式配置

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author [email protected]
 * @date 2019-11-26
 **/
@Configuration
public class RedissonConfig {
    @Bean
    public RedissonClient redissonClient() {
        Config config = new Config();
        config.useSingleServer()
                .setAddress("redis://127.0.0.1:6379")
                .setPassword("123456");
        return Redisson.create(config);
    }
}

03 现在我们就可以使用redisson客户端

1.缓存数据

下面我们主要测试了redis的两种数据结构,分别是stringlist,其它数据结构的使用方式类似。大家可以参考官方文档

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

    @Resource
    private RedissonClient redissonClient;

    @Test
    public void testBucket() {
        RBucket<Object> bucket = redissonClient.getBucket("name", StringCodec.INSTANCE);
        Object o = bucket.get();
        System.out.println(o);
    }

    @Test
    public void testList() {
        RList<String> interests = redissonClient.getList("interests");
        interests.add("篮球");
        interests.add("爬山");
        interests.add("编程");
    }
}

2.分布式锁

官方文档提供了很全的使用方式。

下面我就以简单的分布式锁的使用作为测试。

代码还是很简单,第1步,获取锁;第2步,加锁;第3步,释放锁。

测试时,我们可以起一个服务,然后同时访问"/lock1"和"/lock2"或者起两个服务,一个服务访问"/lock1",另一个服务访问"/lock2"。

通过控制台的打印我们就能发现分布式锁达到我们想要的效果。

    @Resource
    private RedissonClient redissonClient;

    @GetMapping("/lock1")
    public String lock1() {
    	// 1.获取分布式锁
        RLock lock = redissonClient.getLock("my:lock");
        // 2.进行加锁操作
        lock.lock();
        System.out.println(LocalDateTime.now() + " lock1 locked");
        try {
            TimeUnit.SECONDS.sleep(10);
        } catch (InterruptedException e) {
            System.out.println(e.getMessage());
            Thread.currentThread().interrupt();
        }
        // 3.释放锁资源
        lock.unlock();
        System.out.println(LocalDateTime.now() + "lock1 unlocked");
        return "lock1";
    }

    @GetMapping("/lock2")
    public String lock2() {
        RLock lock = redissonClient.getLock("my:lock");
        lock.lock();
        System.out.println(LocalDateTime.now() + " lock2 locked");
        try {
            TimeUnit.SECONDS.sleep(10);
        } catch (InterruptedException e) {
            System.out.println(e.getMessage());
        }
        lock.unlock();
        System.out.println(LocalDateTime.now() + " lock2 unlocked");
        return "lock2";
    }

03 总结

Redisson底层采用的是Netty 框架,支持异步的操作方式。
API很全,对redis的操作基本都能满足我们的开发需求。

你可能感兴趣的:(springboot,redis)