Bootstrap

Redis 系列03--Redis Jedis 客户端

1. redis 配置

修改 redis.conf 文件中的 bind 配置

加上192.168.56.103,这个ip地址是redis所在服务器的ip,这样其他机器就可以通过这个ip地址远程连接redis

另外需要关闭 redis 所在服务器的防火墙

firewall-cmd --state:查看防火墙状态

systemctl stop firewalld.service:关闭防火墙

2. maven 依赖

<!-- 本人redis版本是6.2.6 -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.7.0</version>
</dependency>

3. 代码

1. 基础演示

import redis.clients.jedis.Jedis;

public class JedisTest {
    
    public static void main(String[] args) {
        //创建连接
        Jedis jedis = new Jedis("192.168.56.103", 6379);
        //执行命令
        jedis.set("name","fengxiansheng");
        //释放连接
        jedis.close();
    }
}

运行 main 方法,如果报下面错误,就检查一下上面 redis 的配置

运行成功后:

可以发现已经存储成功

也可以用代码来查看是否存储成功

Jedis jedis = new Jedis("192.168.56.103", 6379);
String result = jedis.set("name", "fengxiansheng2");
System.out.println(result);
System.out.println(jedis.get("name"));
jedis.close();

输出:

2. 操作列表

往 fengxiansheng 这个列表中添加3个元素

Jedis jedis = new Jedis("192.168.56.103", 6379);

Long res = jedis.lpush("fengxiansheng", "test1", "test2", "test3");
System.out.println(res);

jedis.close();

移除并获取列表的第一个元素

String result = jedis.lpop("fengxiansheng");
System.out.println(result);

3. 操作Map

Jedis jedis = new Jedis("192.168.56.103", 6379);

jedis.del("fengxiansheng");
Map<String, String> map = new HashMap<>();
map.put("name","fengxiansheng");
map.put("age","18");
Long res = jedis.hset("fengxiansheng", map);
System.out.println(res);

Map<String, String> result = jedis.hgetAll("fengxiansheng");
System.out.println(result);

jedis.close();

结果

4. 结论

其实 jedis 的 方法名 跟 命令 都是一一对应的,只要熟悉命令,用这些方法自然得心应手

4. Jedis 连接池

多个线程同时操作一个jedis 对象是不安全的,而且频繁的常见和销毁 jedis 对象,比较影响性能,所以推荐使用jedis连接池,来代替 new jedis 对象。

JedisPoolConfig poolConfig = new JedisPoolConfig();
//最大连接数
poolConfig.setMaxTotal(2);
//最大空闲连接数
poolConfig.setMaxIdle(2);
//获取jedis时,是否做有效性检测,如果为true,则得到的jedis实例都是可用的;
poolConfig.setTestOnBorrow(true);
//获取连接的最长等待时间,单位:毫秒,-1:会一直等待,直到获取连接
poolConfig.setMaxWaitMillis(100);


JedisPool jedisPool = new JedisPool(poolConfig, "192.168.56.103",6379);
Jedis jedis1= jedisPool.getResource();
Jedis jedis2 = jedisPool.getResource();
//jedis1、jedis2 都不释放连接

Jedis jedis3 = jedisPool.getResource();

代码中 jedis1、jedis2 获取后,都不释放连接

在获取 jedis3 的时候会等待100毫秒,如果还没获取到报错:

设置 获取连接的等待时间为:-1

//修改成-1
poolConfig.setMaxWaitMillis(100);

那么在获取 jedis3 的时候,会一直等待

上图中,程序一直不结束

在真正使用的时候,最好是搞一个类

public class JedisFactory {

    private static JedisPool jedisPool = null;

    static{
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        //最大连接数
        poolConfig.setMaxTotal(2);
        //最大空闲连接数
        poolConfig.setMaxIdle(2);
        //获取jedis时,是否做有效性检测,如果为true,则得到的jedis实例都是可用的;
        poolConfig.setTestOnBorrow(true);
        //获取连接的最长等待时间,单位:毫秒,-1:会一直等待,直到获取连接
        poolConfig.setMaxWaitMillis(-1);

        jedisPool = new JedisPool(poolConfig, "192.168.56.103",6379);
    }

    public static Jedis getJedis(){
        return jedisPool.getResource();
    }
}

;