java操作Redis数据API->Jedis
Jedis引入
作为java码农,如何在代码中操作Redis呢?
Jedis的介绍
Redis不仅可以使用命令来操作,现在基本上主流的语言都有API支持,比如Java、C#、C++、PHP、Node.js、Go等。
在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis等其中官方推荐使用Jedis和Redisson。
Jedis操作redis需要导入jar包如下:
Jedis类常用方法
每个方法就是redis中的命令名,方法的参数就是命令的参数。每个Jedis对象似于JDBC中Connection对象,获取一个Jedis对象本质上就是获取一个连接对象。
连接和关闭功能
new Jedis(String host, int port)创建一个连接对象参数1:主机名参数2:端口号 6379void close()关闭连接
对string操作的方法说明
set(String key,String value)添加字符串类型的键和值String get(String key)通过键获取值del(String … keys)删除一个或多个键和值
对list操作的方法说明
lpush(String key,String…values)从左边添加1个或多个元素List<String> lrange(String key,long start,long end)获取一个范围内所有的元素
案例:Jedis的基本操作
目标
使用Jedis上面的方法来访问Redis,向服务器中写入字符串,并且取出打印控制台上。
步骤
创建Jedis对象,指定服务器地址和端口号向服务器写入,set字符串类型的数据,person=张三从服务器中读取上面的数据打印输出,get得到字符串的值关闭Jedis对象,释放资源通过客户端查看数据库中是否有数据
代码
package com
.fs
;
import redis
.clients
.jedis
.Jedis
;
public class Demo1Base {
public static void main(String
[] args
) {
Jedis jedis
= new Jedis("localhost", 6379);
jedis
.set("book","人鬼情喂鸟");
String book
= jedis
.get("book");
jedis
.close();
System
.out
.println(book
);
}
}
Jedis连接池的使用
目标
Jedis连接池相关的API案例:使用Jedis连接池
jedis连接池的基本概念
jedis连接资源的创建与销毁是很消耗程序性能,所以jedis为我们提供了jedis的连接池技术,jedis连接池在创建时初始化一些连接对象存储到连接池中,使用jedis连接资源时不需要自己创建jedis对象,而是从连接池中获取一个资源进行redis的操作。使用完毕后,不需要销毁该jedis连接资源,而是将该资源归还给连接池,供其他请求使用。
Jedis连接池API
用于创建连接池的配置信息
JedisPoolConfig配置类功能说明
JedisPoolConfig()构造方法,创建一个配置对象void setMaxTotal()连接池中最大连接数void setMaxWaitMillis()设置最长等待时间,单位是毫秒
JedisPool连接池类说明
JedisPool(配置对象,服务器名,端口号)构造方法,创建连接池的类参数1:上面的配置对象参数2:服务器名参数3:端口号Jedis getResource()从连接池中获取一个创建好的连接对象,返回Jedis对象
JedisPool的基本使用
需求:
使用连接池优化jedis操作,从连接池中得到一个创建好的Jeids对象,并且使用这个Jedis对象。向Redis数据库写入一个set集合,并且取出集合。打印到控制台,并且查看数据库中信息。
开发步骤
创建连接池配置对象,设置最大连接数10,设置用户最大等待时间2000毫秒通过配置对象做为参数,创建连接池对象从连接池里面获取jedis连接对象,执行redis命令。执行redis命令写入list集合执行redis命令读取list集合输出读取的数据关闭连接对象(通常连接池不关闭)
执行代码
package com
.fs
;
import redis
.clients
.jedis
.Jedis
;
import redis
.clients
.jedis
.JedisPool
;
import redis
.clients
.jedis
.JedisPoolConfig
;
import java
.util
.List
;
public class Demo2Pool {
public static void main(String
[] args
) {
JedisPoolConfig config
= new JedisPoolConfig();
config
.setMaxTotal(10);
config
.setMaxWaitMillis(2000);
JedisPool pool
= new JedisPool(config
,"localhost", 6379);
Jedis jedis
= pool
.getResource();
jedis
.lpush("students", "孙悟空", "猪八戒", "白骨精");
List
<String> students
= jedis
.lrange("students", 0, -1);
System
.out
.println(students
);
jedis
.close();
}
}
ResourceBundle类的使用
作用
用于简化properties属性文件的读取
需求
使用ResourceBundle类得到jedis.properties中的port属性,并且输出
代码
jedis.properties的内容
# 连接池的最大连接数
maxTotal=10
# 最长等待时间为2秒钟
maxWaitMillis=2000
# 服务器名字
host=localhost
# 端口号
port=6379
使用ResourceBundle类:
package com
.fs
;
import java
.util
.ResourceBundle
;
public class Demo3Resource {
public static void main(String
[] args
) {
ResourceBundle bundle
= ResourceBundle
.getBundle("jedis");
String host
= bundle
.getString("host");
System
.out
.println(host
);
}
}
Jedis连接池工具类的实现
实现步骤
配置文件
在src目录下创建连接池的工具类: jedis.properties
工具类创建
创建静态成员变量JedisPool对象在静态代码块中,读取src下的配置文件,得到ResourceBundle对象得到上面的四个参数,其中host是字符串类型,其它参数要转成整数类型实例化配置对象,实例化连接池对象编写静态方法getJedis()返回Jedis对象
使用工具类
创建string对象读取string对象关闭jedis对象
代码
jedis.properties配置文件
# 主机名
host=localhost
# 端口号
port=6379
# 最大连接数
maxTotal=20
# 最长等待时间
maxWaitMillis=3000
JedisUtils.java
package com
.fs
.utils
;
import redis
.clients
.jedis
.Jedis
;
import redis
.clients
.jedis
.JedisPool
;
import redis
.clients
.jedis
.JedisPoolConfig
;
import java
.util
.ResourceBundle
;
public class JedisUtils {
private static JedisPool pool
;
static {
ResourceBundle bundle
= ResourceBundle
.getBundle("jedis");
int maxTotal
= Integer
.parseInt(bundle
.getString("maxTotal"));
int maxWaitMillis
= Integer
.parseInt(bundle
.getString("maxWaitMillis"));
int port
= Integer
.parseInt(bundle
.getString("port"));
String host
= bundle
.getString("host");
JedisPoolConfig config
= new JedisPoolConfig();
config
.setMaxTotal(maxTotal
);
config
.setMaxWaitMillis(maxWaitMillis
);
pool
= new JedisPool(config
, host
, port
);
}
public static Jedis
getJedis() {
return pool
.getResource();
}
}
使用工具类
package com
.fs
;
import com
.itheima
.utils
.JedisUtils
;
import redis
.clients
.jedis
.Jedis
;
public class Demo4Use {
public static void main(String
[] args
) {
Jedis jedis
= JedisUtils
.getJedis();
jedis
.set("car", "BWM");
String car
= jedis
.get("car");
System
.out
.println(car
);
jedis
.close();
}
}