欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java连接Redis实例

程序员文章站 2022-05-18 10:04:50
...

目录

1 Redis文件配置

2 Jedis直连

3 Jedis连接池

4 直连和连接池的对比


1 Redis文件配置

笔者使用Jedis作为Java的客户端来对Linux虚拟机上的Redis进行连接。但在连接之前需要对Redis的配置文件redis.conf进行一些修改。

首先需要将以下的bind配置项注释掉:

Java连接Redis实例

然后将以下的保护模式改为no(默认为yes):

Java连接Redis实例

之后通过该配置文件来打开redis-server,并保证其在java连接时一直处于运行状态。


2 Jedis直连

笔者使用的是jedis 3.0.1版本的maven项目构建的,其代码依赖如下所示:

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.0.1</version>
</dependency>

具体的java代码如下所示:

package com.hys.redis;

import redis.clients.jedis.Jedis;

public class RedisTest {

    public static void main(String[] args) {
        Jedis jedis = null;
        try {
            jedis = new Jedis("192.168.253.129", 6379);
            System.out.println(jedis.ping());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }
}

由上可以看到,连接时需要输入Linux虚拟机的ip地址和Redis服务器的端口号。如果以上配置都没问题,其运行结果应该如下所示:

PONG

3 Jedis连接池

Jedis连接池的写法如下所示:

package com.hys.redis;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class RedisTest {

    public static void main(String[] args) {
        GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
        poolConfig.setMaxTotal(50);
        poolConfig.setMaxIdle(50);
        poolConfig.setMaxWaitMillis(1000);
        JedisPool jedisPool = new JedisPool(poolConfig, "192.168.253.129", 6379);
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            for (int i = 0; i < 10; i++) {
                Pipeline pipeline = jedis.pipelined();
                for (int j = i * 1000; j < (i + 1) * 1000; j++) {
                    pipeline.hset("hashkey" + j, "field" + j, "value" + j);
                }
                pipeline.syncAndReturnAll();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }
}

4 直连和连接池的对比

  优点 缺点
直连
  • 简单方便
  • 适用于少量长期连接的场景
  • 存在每次新建/关闭TCP开销
  • 资源无法控制,存在连接泄露的可能
  • Jedis对象线程不安全
连接池
  • Jedis预先生成,降低开销使用
  • 连接池的形式保护和控制资源的使用
  • 相对于直连,使用相对麻烦,尤其在资源的管理上需要很多参数来保证,一旦规划不合理也会出现问题
相关标签: Redis Jedis