使用 Java 操作 radis - Jedis jar 包
1. 使用 Java 客户端操作redis
我们使用 jedis
1.1 什么是 jedis
jedis 是一款 Java 操作redis 数据库的工具。
1.2 jedis使用步骤
-
下载 jedis 的 jar 包。从 maven 上下载
-
下载 commons-pool 。在 Apache 官网, Commons 一栏中有 pool jar包。
-
使用
1.2.1 jedis 的快速入门
一共就是由三行代码:
import org.junit.Test;
import redis.clients.jedis.Jedis;
/**
* jedis 的测试类
*/
public class JedisTest {
/**
* 快速入门
*/
@Test
public void test1() {
// 1. 获取连接
Jedis jedis = new Jedis("localhost", 6379);
// 2. 操作
jedis.set("username", "zhangsan");
// 3. 关闭连接
jedis.close();
}
}
1.2.2 操作 字符串 类型
也非常简单,因为 jedis 中对数据库操作的方法名和 redis 对数据类型的操作名一样。
@Test
public void test2() {
// 1. 获取连接
Jedis jedis = new Jedis(); // 如果使用空参构造,偶人 "localhost" , 6379
// 2. 操作
jedis.set("username", "zhangsan");
String name = jedis.get("username");
System.out.println(name);
// 可以使用 setex 方法 可以指定过期时间的 key value
// 将 activecode 呵呵 键值对 存入 redis 并且 20 秒后自动删除该键值对
jedis.setex("activecode", 20, "呵呵");
name = jedis.get("activecode");
System.out.println(name);
// 3. 关闭连接
jedis.close();
}
1.2.3 操作 哈希 类型
/**
* hash 数据结构操作
*/
@Test
public void test3() {
// 1. 获取连接
Jedis jedis = new Jedis(); // 如果使用空参构造,偶人 "localhost" , 6379
// 2. 操作
jedis.hset("user","name","lisi");
jedis.hset("user","age","23");
jedis.hset("user","gender","male");
// 获取
String name = jedis.hget("user", "name");
System.out.println(name);
// 获取所有数据
Map<String, String> user = jedis.hgetAll("user");
// keyset
Set<String> keySet = user.keySet();
for(String str : keySet) {
System.out.println(str + " : " + user.get(str));
}
jedis.del("user");
// 3. 关闭连接
jedis.close();
}
1.2.4 操作集合类型
/**
* set 数据结构操作
*/
@Test
public void test4() {
// 1. 获取连接
Jedis jedis = new Jedis(); // 如果使用空参构造,偶人 "localhost" , 6379
// 2. 操作
// 存储
jedis.sadd("myset", "java","php","c++");
// 获取
Set<String> myset = jedis.smembers("myset");
System.out.println(myset);
// 3. 关闭连接
jedis.close();
}
1.2.5 操作 有序集合 类型
/**
* sortedset 数据结构操作
*/
@Test
public void test5() {
// 1. 获取连接
Jedis jedis = new Jedis(); // 如果使用空参构造,偶人 "localhost" , 6379
// 2. 操作
// 存储
jedis.zadd("mysortedset", 85, "亚索");
jedis.zadd("mysortedset", 33, "盖伦");
jedis.zadd("mysortedset", 50, "易");
// 获取
Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);
System.out.println(mysortedset);
// 3. 关闭连接
jedis.close();
}
1.2.6 操作 列表 类型
/**
* list 数据结构操作
*/
@Test
public void test6() {
// 1. 获取连接
Jedis jedis = new Jedis(); // 如果使用空参构造,偶人 "localhost" , 6379
// 2. 操作
// 存储
jedis.lpush("mylist","lisi", "zhangsan");
jedis.rpush("mylist","wangwu", "zhaoliu");
// list 范围获取
System.out.println(jedis.lrange("mylist", 0, -1));
// 弹出
System.out.println(jedis.lpop("mylist"));
System.out.println(jedis.rpop("mylist"));
// 3. 关闭连接
jedis.close();
}
1.3 jedis 连接池 - JedisPool
使用
- 创建 JedisPool 连接池对象
- 调用方法 getResource() 获取 Jedis 连接
实例代码
/**
* jedis 连接池使用
*/
@Test
public void test7() {
// 0. 创建一个配置对象
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50);
config.setMaxIdle(10);
// 1. 创建 Jedis 连接池对象
JedisPool jedisPool = new JedisPool(config, "localhost",6379);
// 2. 获取连接
Jedis jedis = jedisPool.getResource();
// 3. 使用
jedis.set("hehe", "haha");
System.out.println(jedis.get("hehe"));
// 4. 关闭 归还到连接池
jedis.close();
}
1.4 jedis 连接池工具类
由于我们对于 jedis 连接池的配置全部都写我们需要运行的类中,这样会导致耦合度太高,我们需要将配置 jedis 连接池的一些方法和属性全部都写到一个工具类中,已以提供复用。
首先我们需要编写一个 properties 以提供数据,并将其放置在 src 文件中:
host=127.0.0.1
port=6379
maxTotal=50
maxIdle=10
接着编者我们的连接池工具类:
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();
}
}
最后,就可以愉快的使用我们的工具类来创建 Jedis 对象了。
/**
* jedis 连接池工具类
*/
@Test
public void test8() {
// 通过连接池工具类获取
Jedis jedis = JedisPoolUtils.getJedis();
// 使用
jedis.set("hello", "world");
// 关闭 归还到连接池
jedis.close();
}