IDEA 中使用 Jedis 操作 Redis

七 IDEA 中使用 Jedis 操作 Redis

Jedis is a blazingly small and sane Redis java client.

Jedis was conceived to be EASY to use.

Jedis 是一款可以让我们在java中操作redis数据库的工具,下载其jar包,或者引入到 maven 中即可,使用还是非常简单的

(一) 引入依赖和编码

我这里创建了一个空项目,然后创建一个普通的 maven 模块用来演示 jedis

首先引入 jedis 依赖,后面需要所以还引入了fastjson

版本自己去 maven 中去查就可以了,因为我们 linux 中安装的 redis 是一个新的版本,所以我们依赖也用了最新的

<dependencies>
    <dependency>
        <groupId>redis.clientsgroupId>
        <artifactId>jedisartifactId>
        <version>3.4.0version>
    dependency>

    <dependency>
        <groupId>com.alibabagroupId>
        <artifactId>fastjsonartifactId>
        <version>1.2.75version>
    dependency>
dependencies>

创建测试类

  • 如果是本机,例如 windows 下,启动 win 下的 redis 服务,然后用 127.0.0.1 访问
  • 如果是远程机器,虚拟机或者云服务器,使用对应 ip 访问
  • new Jedis 时空构造代表默认值 “localhost”, 6379端口
public class Demo01 {
    public static void main(String[] args) {
        // 远程 linux(虚拟机)
        Jedis jedis = new Jedis("192.168.122.1", 6379);
        // 测一下是否连通
        System.out.println(jedis.ping());
    }
}

(二) 连接 linux 的操作步骤

如果直接输入ip和端口,会连接不上,所以需要先做以下操作

① 保证 6379 端口开放

以 centos 7.9 为例,其他版本例如 6.x 可以查一下具体命令,以及防火墙是不是给拦截了,只要保证端口能访问到就可以了

  • 开启6379端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
# 显示 
succss
  • 重启防火墙
firewall-cmd --reload
# 显示
success
  • 检查端口是否开启
firewall-cmd --query-port=6379/tcp
# 显示
yes
  • 重启 redis 服务
[root@centos7 bin]# redis-cli shutdown
[root@centos7 bin]# redis-server myconfig/redis.conf 

你还可以在 window 的机器上,使用 telnet 192.168.122.1 6379 的方式测试一下是否能访问到,如果出现错误,请检查端口和防火墙的问题

② 修改 redis 配置文件

  • 注释绑定的ip地址(注释掉 bind 127.0.0.1 这一句)

  • 设置保护模式为 no(protected-mode 把 yes 改为 no)

    • Linux上的 redis 处于安全保护模式,这就让你无法从虚拟机外部去轻松建立连接,所以在 redis.conf 中设置保护模式(protected-mode)为 no

IDEA 中使用 Jedis 操作 Redis_第1张图片

再次在 IDEA 中访问,就可以访问到了

(三) 常见 API

(1) 字符串类型 - String

// 存储
jedis.set("address","beijing");

// 获取
String address = jedis.get("address");

// 关闭连接
jedis.close();

补充:setex() 方法可以存储数据,并且指定过期时间

// 将aaa-bbb存入,且10秒后过期
jedis.setex("aaa",10,"bbb")

(2) 列表类型 - list

// 存储
jedis.lpush("listDemo","zhangsan","lisi","wangwu");//从左
jedis.rpush("listDemo","zhangsan","lisi","wangwu");//从右
	
// 获取
List<String> mylist = jedis.lrange("listDemo", 0, -1);
	        
// 删除,并且返回元素
String e1 = jedis.lpop("listDemo");//从左
String e2 = jedis.rpop("listDemo");//从右

// 关闭连接
jedis.close();

(3) 集合类型 - set

// 存储
jedis.sadd("setDemo","zhangsan","lisi","wangwu");

// 获取
Set<String> setDemo = jedis.smembers("setDemo");

// 关闭连接
jedis.close();

(4) 有序集合类型 - sortedset/zset

// 存储
jedis.zadd("sortedsetDemo",20,"zhangsan");
jedis.zadd("sortedsetDemo",10,"lisi");
jedis.zadd("sortedsetDemo",60,"wangwu");
	
// 获取
Set<String> sortedsetDemo = jedis.zrange("sortedsetDemo", 0, -1);

// 关闭连接
jedis.close();

(5) 哈希类型 - hash

// 存储
jedis.hset("hashDemo","name","lisi");
jedis.hset("hashDemo","age","20");
	
// 获取
String name = jedis.hget("hashDemo", "name");

// 获取所有数据
Map<String, String> user = jedis.hgetAll("hashDemo");
	
Set<String> keySet = user.keySet();
for (String key : keySet) {
	//获取value
	String value = user.get(key);
	System.out.println(key + ":" + value);
}

// 关闭连接
jedis.close();

(四) Jedis 执行事务

public class Demo01 {
    public static void main(String[] args) {
        // 远程 linux(虚拟机)
        Jedis jedis = new Jedis("192.168.122.1", 6379);

        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", "zhangsan");
        jsonObject.put("age", "21");

        // 开启事务
        Transaction multi = jedis.multi();
        String result = jsonObject.toJSONString();

        try {
            multi.set("userA", result);
            multi.set("userB", result);
            // 执行事务
            multi.exec();
        } catch (Exception e) {
            // 放弃事务
            multi.discard();
        } finally {
            System.out.println(jedis.get("userA"));
            System.out.println(jedis.get("userB"));
            // 关闭连接
            jedis.close();
        }
    }
}

为了将结果显示出来,在关闭前添加两句输出语句

执行结果:

{“name”:“zhangsan”,“age”:“21”}
{“name”:“zhangsan”,“age”:“21”}

(五) Jedis 连接池

为什么我们要使用连接池呢?

我们要使用Jedis,必须建立连接,我们每一次进行数据交互的时候,都需要建立连接,Jedis虽然具有较高的性能,但建立连接却需要花费较多的时间,如果使用连接池则可以同时在客户端建立多个连接并且不释放,连接的时候只需要通过一定的方式获取已经建立的连接,用完则归还到连接池,这样时间就大大的节省了

下面就是我们直接创建了一个连接池,不过我们使用时一般都会封装一个工具类

@Test
public void testJedisPool(){
    // 0.创建一个配置对象
    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxTotal(50);
    config.setMaxIdle(10);

    // 1.创建Jedis连接池对象
    JedisPool jedisPool = new JedisPool(config,"192.168.122.1",6379);

    // 2.获取连接
    Jedis jedis = jedisPool.getResource();
    
    // 3. 存储
    jedis.set("name","zhangsan");
    // 4. 输出结果
    System.out.println(jedis.get("name"));
    
    //5. 关闭 归还到连接池中
    jedis.close();;
}

(一) 连接池工具类

直接使用工具类就可以了

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

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * JedisPool工具类
 * 加载配置文件,配置连接池的参数
 * 提供获取连接的方法
 */
public class JedisPoolUtils {

    private static JedisPool jedisPool;

    static {
        //读取配置文件
        InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
        //创建Properties对象
        Properties pro = new Properties();
        //关联文件
        try {
            pro.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //获取数据,设置到JedisPoolConfig中
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
        config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));

        //初始化JedisPool
        jedisPool = new JedisPool(config, pro.getProperty("host"), Integer.parseInt(pro.getProperty("port")));
    }


    /**
     * 获取连接方法
     */
    public static Jedis getJedis() {
        return jedisPool.getResource();
    }
}

别忘了配置文件

host=192.168.122.1
port=6379
maxTotal=50
maxIdle=100

调用代码

@Test
public void testJedisPoolUtil(){

    // 0. 通过连接池工具类获取
    Jedis jedis = JedisPoolUtils.getJedis();

    // 1. 使用
    jedis.set("name","lisi");
    System.out.println(jedis.get("name"));

    // 2. 关闭 归还到连接池中
    jedis.close();;

}

你可能感兴趣的:(Redis,redis,java,idea)