【Redis缓存】- Java客户端Jedis

目录

一、概述

二、Jedis 操作 Redis 中的数据结构

1、字符串类型 string

2、哈希类型 hash

3、列表类型 list

4、集合类型 set

5、有序集合类型 sortedset

三、Jedis 连接池 JedisPool

1、JedisPool 的使用

2、JedisPool 连接池工具


一、概述

Java 客户端 Jedis 是一款 java 操作 Redis 数据库的工具,类似于 JDBC,也就是通过 Java 代码来操作数据库。使用步骤如下:

  1. 导入 jar 包:commons-pool2-2.3.jar、jedis-2.7.0.jar
    1. 获取jar包链接:https://pan.baidu.com/s/1ONkaNFEy6uocm7Aghe80rg   提取码:plgt
  2. 使用:
    1. 获取连接
    2. 操作数据
    3. 关闭连接

接下来就以 Redis 的五种数据结构来说明 Jedis 的基本使用

二、Jedis 操作 Redis 中的数据结构

1、字符串类型 string

  1. 获取连接:Jedis jedis = new Jedis("localhost",6379);
  2. 操作数据:
    1. jedis.set("name","oneStar");       //存储
    2. jedis.get("name");       //获取
    3. jedis.setex("name",20,"twoStar");      //将 name:twoStar 键值对存入redis,并且20秒后自动删除该键值对
  3. 关闭连接:jedis.close();

注:可以使用 setex() 方法存储可以指定过期时间的 key value

@Test
public void testString(){
    //1.获取连接
    Jedis jedis = new Jedis("localhost",6379);

    //2.操作数据
    jedis.set("name","oneStar");    //存储
    String name = jedis.get("name");      //获取
    System.out.println(name);

    //可以使用setex()方法存储可以指定过期时间的 key value
    jedis.setex("name",20,"twoStar");

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

2、哈希类型 hash

  1. 获取连接:Jedis jedis = new Jedis();       //如果使用空参构造,默认值 "localhost",6379端口
  2. 操作数据:
    1. jedis.hset("user","name","oneStar");     //存储
    2. jedis.hget("user","name");      //获取
    3. Map<String, String> user = jedis.hgetAll("user");     // 获取hash的所有map中的数据
  3. 关闭连接:jedis.close();
@Test
public void testHash(){
    //1.获取连接
    Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
    //2.操作数据
    jedis.hset("user","name","oneStar");    //存储
    jedis.hset("user","age","18");
    jedis.hset("user","email","[email protected]");
    String name = jedis.hget("user","name");    //获取
    String age = jedis.hget("user","age");
    String email = jedis.hget("user","email");
    System.out.println(name + age + email);

    // 获取hash的所有map中的数据
    Map<String, String> user = jedis.hgetAll("user");
    // keyset
    Set<String> keySet = user.keySet();
    for (String key : keySet) {
        //获取value
        String value = user.get(key);
        System.out.println(key + ":" + value);
    }
    //3.关闭连接
    jedis.close();
}

3、列表类型 list

  1. 获取连接:Jedis jedis = new Jedis();       //如果使用空参构造,默认值 "localhost",6379端口
  2. 操作数据:
    1. jedis.lpush("mylist","a","b","c");        //从左边存
    2. jedis.rpush("mylist","a","b","c");        //从右边存
    3. jedis.lrange("mylist", 0, -1);        //范围获取
    4. jedis.lpop("mylist");        //从左边弹出
    5. jedis.rpop("mylist");       //从右边弹出
  3. 关闭连接:jedis.close();
@Test
public void testList(){
    //1.获取连接
    Jedis jedis = new Jedis();  //如果使用空参构造,默认值 "localhost",6379端口

    //2.操作数据
    //存储
    jedis.lpush("mylist","a","b","c");//从左边存
    jedis.rpush("mylist","a","b","c");//从右边存

    // list 范围获取
    List<String> mylist = jedis.lrange("mylist", 0, -1);
    System.out.println(mylist);

    // list 弹出(删除)
    String element1 = jedis.lpop("mylist");     //弹出左边的c
    System.out.println(element1);
    String element2 = jedis.rpop("mylist");     //弹出右边的c
    System.out.println(element2);

    // list 范围获取
    List<String> mylist2 = jedis.lrange("mylist", 0, -1);
    System.out.println(mylist2);

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

4、集合类型 set

  1. 获取连接:Jedis jedis = new Jedis();       //如果使用空参构造,默认值 "localhost",6379端口
  2. 操作数据:
    1. sadd("myset","a","b","c");       //存储
    2. jedis.smembers("myset");      //获取
  3. 关闭连接:jedis.close();
@Test
public void testSet(){
    //1.获取连接
    Jedis jedis = new Jedis();  //如果使用空参构造,默认值 "localhost",6379端口

    //2.操作数据
    // set 存储
    jedis.sadd("myset","a","b","c");
    // set 获取
    Set<String> myset = jedis.smembers("myset");
    System.out.println(myset);

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

5、有序集合类型 sortedset

  1. 获取连接:Jedis jedis = new Jedis();       //如果使用空参构造,默认值 "localhost",6379端口
  2. 操作数据:
    1. jedis.zadd("mysortedset",18,"oneStar");       //存储
    2. jedis.zrange("mysortedset", 0, -1);       //获取
  3. 关闭连接:jedis.close();
@Test
public void testSortedset(){
    //1.获取连接
    Jedis jedis = new Jedis();  //如果使用空参构造,默认值 "localhost",6379端口

    //2.操作数据
    // Sortedset 存储
    jedis.zadd("mysortedset",18,"oneStar");
    jedis.zadd("mysortedset",16,"twoStar");
    jedis.zadd("mysortedset",55,"threeStar");

    // Sortedset 获取
    Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);
    System.out.println(mysortedset);

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

三、Jedis 连接池 JedisPool

JedisPool 连接池和 JDBC 连接池是类似的,在实际开发中,“获得连接”和“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常会采用连接池技术,来共享连接,这样既不用每次都获取连接、释放连接了。和 JDBC 不同的是 JDBC 使用的是第三方提供的接口,而 jedis 则是自带了连接池,叫 JedisPool

1、JedisPool 的使用

  1. 创建 JedisPool 连接池对象
    1. 创建配置对象:new JedisPoolConfig();
    2. 创建Jedis连接池对象:new JedisPool(config,"localhost",6379);
  2. 调用方法 getResource()方法获取Jedis连接
    1. 获取连接:jedisPool.getResource();
  3. 使用:jedis.set("name","oneStar");
@Test
public void testJedisPool(){
    //1.创建一个配置对象
    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    jedisPoolConfig.setMaxTotal(50);    //最大连接数
    jedisPoolConfig.setMaxIdle(10);     //最大空闲连接

    //2.创建jedis连接对象
    JedisPool jedisPool = new JedisPool(jedisPoolConfig,"localhost",6379);

    //3.获取连接
    Jedis jedis = jedisPool.getResource();

    //4.使用
    jedis.set("name","oneStar");    //存储
    String name = jedis.get("name");    //获取
    System.out.println(name);

    //5.关闭连接(归还连接池)
    jedis.close();
}

2、JedisPool 连接池工具

在 JedisPool 的使用中,会进行相应的配置,而配置不方便修改,增加了代码的耦合度,为了降低耦合度,可以将一些配置抽取到配置文件里面,要修改配置的时候直接修改配置文件即可,不需要修改代码。

【1】首先先要在 src 目录下创建配置文件并写入相关配置:jedis.properties

host=127.0.0.1
port=6379
maxTotal=50
maxIdle=10

【2】编写Jedis工具类

  1. 静态代码块加载配置文件,配置连接池的参数
  2. 提供获取连接的方法
package cn.star;
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;
/**
 * 〈一句话功能简述〉<br> 
 * 〈Jedis工具类〉
 *
 * @author OneStar
 * @create 2019/11/26
 * @since 1.0.0
 */
public class JedisPoolUtil {
    private static JedisPool jedisPool;

    static {
        //读取配置文件
        InputStream is = JedisPoolUtil.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 getJedisPool(){
        return jedisPool.getResource();
    }
}

【3】编写测试类

@Test
public void testJedisPoolUtil(){
    //1.通过连接池工具获取
    Jedis jedis = JedisPoolUtil.getJedisPool();

    //2.使用
    jedis.set("name","LSTAR");    //存储
    String name = jedis.get("name");    //获取
    System.out.println(name);

    //3.关闭连接(归还连接池)
    jedis.close();
}

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章