redis学习(二)--jedis

Jedis的使用

jedis是redis的一个Java客户端,它是一个jar包,我们需要在项目中引入它。

1. jedis的maven依赖

<dependency>
    <groupId>redis.clientsgroupId>
    <artifactId>jedisartifactId>
    <version>2.9.0version>
dependency>

2.简单的demo

1) 打开客户端并进行简单的操作

在使用java操作redis时,首先要开启redis的服务。即打开本地的redis-server.exe。同时为了方便查看效果,我们将redis的持久化方式设置为aof,同时设置appendsync always 即每次操作都进行持久化。

/*
* 查看所有的key
* Set keys(String pattern)
*/
@Test
public void keys() {
    Jedis jedis = new Jedis("localhost", 6379); // 创建jedis连接
    jedis.keys("*").forEach(System.out::println);
    jedis.close(); // 释放连接
}

2) 获取简单的string类型数据

/*
* 获取string
* String get(String key)
*/
@Test
public void getString() {
    Jedis jedis = new Jedis("localhost", 6379);
    System.out.println(jedis.get("str1"));
    jedis.close();
}

3) 保存简单的string类型数据

/*
* 保存string
* String set(String key, String value)
*/
@Test
public void setString() {
    Jedis jedis = new Jedis("localhost", 6379);
    jedis.set("jedisString1", "jedisStringValue");
    jedis.close();
}

4) 使用setex() 方法,存储有指定过期时间的 key-value

/*
* 保存有过期时间的key-value
* String setex(String key, int seconds, String value)
*/
@Test
public void testSetEx() {
    Jedis jedis = new  Jedis("localhost", 6379);
    jedis.setex("expirationTimeKey1", 20, "expirationTimeValue1");
    System.out.println("get immediately : " + jedis.get("expirationTimeKey1")); // 首先获取一下
    try { // 休眠二十秒多一点
        Thread.sleep(20001);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println("after 20 s : " + jedis.get("expirationTimeKey1")); // 再次获取
	// 会发现第二次拿到的value为null
}

5) 操作hash

/*
* 操作hash
* Long hset(String key, String field, String value)
* String hget(String key, String field)
* Map hgetAll(String key)
*/
@Test
public void testHash() {
    Jedis jedis = new Jedis(); // 使用Jedis默认构造方法, 参数默认为"localhost", 6379
    jedis.hset("jedisHash1", "field1", "value1"); // 保存hash
    jedis.hset("jedisHash1", "field2", "value2");
    System.out.println(jedis.hget("jedisHash1", "field1")); // 获取hash中的单个元素
    System.out.println("============hgetAll=========");
    jedis.hgetAll("jedisHash1").values().forEach(System.out::println); // 获取所有
    jedis.close();
}

6) 操作list

/*
* 操作list
* Long lpush(String key, String... values), rpush相同,存入的顺序不同
* List lrange(String key, int start, int end) 0 -1 可以获取所有元素
* String lpop(String key) rpop相同,弹出顺序不同
*/
@Test
public void testList() {
    Jedis jedis = new Jedis();
    jedis.del("jedisList1", "jedisList2");
    Long lpush1 = jedis.lpush("jedisList1", "s1", "s2", "s3"); // 左端压入
    Long lpush2 = jedis.rpush("jedisList2", "s1", "s2", "s3"); // 右端压入
    jedis.lrange("jedisList1", 0, -1).forEach(System.out::print);
    System.out.println();
    jedis.lrange("jedisList2", 0, -1).forEach(System.out::print);
    System.out.println();

    jedis.lpop("jedisList1"); // 左端弹出
    jedis.rpop("jedisList1"); // 右端弹出
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println("====弹出后=====");
    jedis.lrange("jedisList1", 0, -1).forEach(System.out::print);
    jedis.close();
}

7) 操作set

/*
* Long sadd(String key, String... values)
* Set smembers(String key)
* Long srem(String key, String value)
*/
@Test
public void testSet() {
    Jedis jedis = new Jedis();
    jedis.sadd("jedisSet1", "val1", "val3", "val2");
    jedis.smembers("jedisSet1").forEach(System.out::println);
    jedis.srem("jedisSet1", "val2");
    System.out.println("====after srem======");
    jedis.smembers("jedisSet1").forEach(System.out::println);
    jedis.close();
}

8) 操作sortedset

/*
* Long zadd(String key, double score, String value)
* Long zadd(String key, Map scoreMembers)
* Set zrange(String key, int start, int end) 0 -1 可以获取所有元素
* Long zrem(String key, String value)
*
*/
public void testSortedSet() {
        Jedis jedis = new Jedis();
        // 一种添加方式
        jedis.zadd("heroes", 1, "孙悟空");
        // 另一种添加方式
        Map<String, Double> heroes = new HashMap<>();
        heroes.put( "王昭君", (double) 2);
        heroes.put( "猪八戒", (double) 3);
        heroes.put( "李白", (double) 4);
        jedis.zadd("heroes", heroes);
        // 获取sortedset中的所有元素
        jedis.zrange("heroes", 0, -1).forEach(System.out::println);

        jedis.zrem("heroes", "王昭君");
        System.out.println();
        jedis.zrange("heroes", 0 , -1).forEach(System.out::println);
        jedis.close();
    }

9) 连接池的使用

/*
* JedisPoolConfig: 连接池的配置信息
* void setMaxTotal(int maxTotal)
* void setMaxIdel(int maxIdle)
* JedisPool 连接池
* Jedis getResource()
*/
@Test
public void testJedisPool() {
    // 1. 创建 JedisPoolConfig对象
    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    jedisPoolConfig.setMaxTotal(50); // 最大连接总数
    jedisPoolConfig.setMaxIdle(10); // 最大空闲连接数
    // 2. 创建连接池
    JedisPool pool = new JedisPool(jedisPoolConfig, "localhost", 6379);
    // 3. 获取连接
    Jedis jedis = pool.getResource();
    Set<String> keys = jedis.keys("*");
    keys.forEach(System.out::println);
    jedis.close();
}

你可能感兴趣的:(Java,工具使用)