jedis是redis的一个Java客户端,它是一个jar包,我们需要在项目中引入它。
<dependency>
<groupId>redis.clientsgroupId>
<artifactId>jedisartifactId>
<version>2.9.0version>
dependency>
在使用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(); // 释放连接
}
/*
* 获取string
* String get(String key)
*/
@Test
public void getString() {
Jedis jedis = new Jedis("localhost", 6379);
System.out.println(jedis.get("str1"));
jedis.close();
}
/*
* 保存string
* String set(String key, String value)
*/
@Test
public void setString() {
Jedis jedis = new Jedis("localhost", 6379);
jedis.set("jedisString1", "jedisStringValue");
jedis.close();
}
/*
* 保存有过期时间的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
}
/*
* 操作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();
}
/*
* 操作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();
}
/*
* 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();
}
/*
* 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();
}
/*
* 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();
}