redis(lettuce)

Posted wxl123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis(lettuce)相关的知识,希望对你有一定的参考价值。

1.依赖包

            <dependency>
                <groupId>org.apache.commons</groupId><!--连接池依赖包-->
                <artifactId>commons-pool2</artifactId>
                <version>2.6.2</version>
            </dependency>

            <dependency><!--lettuce依赖包-->
                <groupId>io.lettuce</groupId>
                <artifactId>lettuce-core</artifactId>
                <version>5.1.7.RELEASE</version>
            </dependency>            

2.lettuce结合commons-pool2连接池结合的连接redis数据库类

package com.yootk.lettuce.util;

import io.lettuce.core.RedisClient;
import io.lettuce.core.RedisURI;
import io.lettuce.core.api.StatefulRedisConnection;
import io.lettuce.core.support.ConnectionPoolSupport;
import org.apache.commons.pool2.impl.GenericObjectPool;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

public class RedisConnectionUtil 
    public static final String REDIS_ADDRESS = "redis://[email protected]:6379/0";
    private static final int MAX_IDLE = 10 ; // 最大的维持连接数量
    private static final int MIN_IDLE = 1 ; // 最小维持的可用数量
    private static final int MAX_TOTAL = 1 ; // 最大的可用数量
    private static final boolean TEST_ON_BORROW = true ;
    private static GenericObjectPool<StatefulRedisConnection<String, String>> pool ;
    private static final RedisURI REDIS_URI = RedisURI.create(REDIS_ADDRESS) ;
    private static final RedisClient REDIS_CLIENT = RedisClient.create(REDIS_URI) ; // 构建RedisClient实例
    private static final ThreadLocal<StatefulRedisConnection> REDIS_CONNECTION_THREAD_LOCAL = new ThreadLocal<>()  ;
    static 
        // 1、如果要进行连接池的操作,则肯定要进行一些连接池的基本配置
        GenericObjectPoolConfig config = new GenericObjectPoolConfig() ; // 配置对象
        config.setMaxIdle(MAX_IDLE); // 设置最大维持连接数量
        config.setMinIdle(MIN_IDLE); // 设置最小维持连接数量
        config.setMaxTotal(MAX_TOTAL); // 连接池总共的可用连接数量
        config.setTestOnBorrow(TEST_ON_BORROW); // 连接测试后返回
        // 2、连接池的创建需要依赖于连接的配置类实例
        pool = ConnectionPoolSupport.createGenericObjectPool(() -> REDIS_CLIENT.connect(), config);
    
    public static StatefulRedisConnection getConnection() 
        StatefulRedisConnection<String, String> connection = REDIS_CONNECTION_THREAD_LOCAL.get() ;
        if (connection == null) 
            connection = build() ;
            REDIS_CONNECTION_THREAD_LOCAL.set(connection);
        
        return connection ;
    
    public static void close() 
        StatefulRedisConnection<String, String> connection = REDIS_CONNECTION_THREAD_LOCAL.get() ;
        if (connection != null) 
            connection.close();
            REDIS_CONNECTION_THREAD_LOCAL.remove();
        
    
    private static StatefulRedisConnection build() 
        try 
            return pool.borrowObject() ;
         catch (Exception e) 
            return null ;
        
    

3.举例

package com.yootk.lettuce.data;
import com.yootk.lettuce.util.RedisConnectionUtil;
import io.lettuce.core.api.async.RedisAsyncCommands;
import java.util.HashMap;
import java.util.Map;
public class HashCommand 
    public static void main(String[] args) throws Exception
        RedisAsyncCommands commands = RedisConnectionUtil.getConnection().async();// 创建操作命令
        commands.hset("member-lee", "name", "小李老师").get();
        // 在进行Hash内容设置的时候还可以将内容保存在Map集合里面,进行整体的内容定义
        Map<String, String> map = new HashMap<>();
        map.put("age", String.valueOf(18));
        map.put("salar", String.valueOf(1.1));
        commands.hmset("member-lee", map).get();
        System.out.println("【获取Hash数据】" + commands.hgetall("member-lee").get());
        RedisConnectionUtil.close();
    

 

以上是关于redis(lettuce)的主要内容,如果未能解决你的问题,请参考以下文章

redis网络波动,Jedis/Lettuce是阻塞还是失败?

使用 Reactive Lettuce 流水线 Redis 命令

Redis连接池Lettuce踩坑记录

springboot2.x版本整合redis(单机/集群)(使用lettuce)

Redis连接池Lettuce Jedis 区别

redis 的Lettuce配置