Lettuce在Spring boot中的使用方式

Lettuce是一个可伸缩线程安全的Redis客户端。多个线程可以共享同一个RedisConnection.本文是基于Lettuce5,主要介绍的知识点如下:

  1. Lettuce在Spring Boot中的配置
  2. Lettuce的同步,异步,响应式使用方式
  3. 事件的订阅
  4. 发布自定义事件
  5. 读写分离
  6. 读写分离策略实现源码
  7. 客户端分片实现
@Configuration
public class LettuceConfig {

    /**
     * 配置客户端资源
     * @return
     */
    @Bean(destroyMethod = "shutdown")
    ClientResources clientResources() {
        return DefaultClientResources.builder().ioThreadPoolSize(8).computationThreadPoolSize(10).build();
    }


    /**
     * 配置Socket选项
     * keepAlive=true
     * tcpNoDelay=true
     * connectionTimeout=5秒
     * @return
     */
    @Bean
    SocketOptions socketOptions(){
       return SocketOptions.builder().keepAlive(true).tcpNoDelay(true).connectTimeout(Duration.ofSeconds(5)).build(); 
    }
    /**
     * 配置客户端选项
     * @return
     */
    @Bean
    ClientOptions clientOptions(SocketOptions socketOptions) {
        return ClientOptions.builder().socketOptions(socketOptions).build();
    }

    /**
     * 创建RedisClient
     * @param clientResources 客户端资源
     * @param clientOptions 客户端选项
     * @return 
     */
    @Bean(destroyMethod = "shutdown")
    RedisClient redisClient(ClientResources clientResources, ClientOptions clientOptions) {
        RedisURI uri = RedisURI.builder().withSentinel("xx.xx.xx.xx", 26009).withPassword("abcd1234").withSentinelMasterId("xxx").build();
        RedisClient client = RedisClient.create(clientResources, uri);
        client.setOptions(clientOptions);
        return client;
    }

    /**
     * 创建连接
     * @param redisClient
     * @return
     */
    @Bean(destroyMethod = "close")
    StatefulRedisConnection<String, String> connection(RedisClient redisClient) {
        return redisClient.connect();
    }
}

 基本使用

public Mono<ServerResponse> hello(ServerRequest request) throws  Exception {
    //响应式使用
    Mono<String> resp = redisConnection.reactive().get("gxt_new");
    //同步使用
    redisConnection.sync().get("test");
    redisConnection.async().get("test").get(5, TimeUnit.SECONDS);
    return ServerResponse.ok().body(resp, String.class);
}

 客户端订阅事件

     客户端使用事件总线传输运行期间产生的事件;EventBus可以从客户端资源进行配置和获取,并用于客户端和自定义事件。  

如下事件可以被客户端发送:

  • 连接事件
  • 测量事件
  • 集群拓扑事件
client.getResources().eventBus().get().subscribe(e -> {
            System.out.println("client 订阅事件: " + e);
        });

client 订阅事件: ConnectionActivatedEvent [/xx:49910 -> /xx:6008]
client 订阅事件: ConnectionActivatedEvent [/xx:49911 -> /xx:6018]
client 订阅事件: ConnectedEvent [/xx:49912 -> /xx:6018]

 发布事件

    发布使用也是通过使用eventBus进行发布事件,Event接口只是一个标签接口

 eventBus.publish(new Event() {
            @Override
            public String toString() {
                return "自定义事件";
            }
        });

   订阅者就可以订阅到这个自定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

陈脩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值