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://hellolee@redis-server: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();
    }
}

 

posted @ 2019-06-30 16:57  王兴龙123  阅读(1057)  评论(0编辑  收藏  举报