Redis的Java客户端Jedis
Jedis:一款java操作redis数据库的工具
一、使用步骤
-
导入相关的jar包
commons-pool2-2.3.jar
jedis-2.7.0.jar
获取连接(默认本机,端口6379)
Jedis jedis = new Jedis(); // 默认本机,端口6379
Jedis jedis = new Jedis("localhost", 6379);
- 操作
jedis.set("username", "晓庆");
- 关闭链接
jedis.close();
二、Jedis操作各种redis中的数据结构
接口方法和基本命令语法是一样的!,下面的案例省略连接和关闭步骤
1.字符串类型string
-
set
设置;
jedis.set("username", "小红");
-
get
获取
String username = jedis.get("username");
-
setex(key, lifetime秒, value)
: 指定过期时间
jedis.setex("username",5, "小红");
-
del
: 删除(通用)
jedis.del("username");
2.hash类型: map格式
-
hset
: 设置
jedis.hset("user", "name", "晓庆");
jedis.hset("user", "age", "18");
jedis.hset("user", "gender", "male");
-
hget
: 获取一个
String name = jedis.hget("user", "name");
-
hgetAll
:获取所有
Map<String, String> map = jedis.hgetAll("user");
map.forEach((key, value) -> System.out.println(key + ":" + value));
-
hdel
:删除
jedis.hdel("user", "name");
3.列表类型list: linkedList格式,支持重复元素
-
lpush/rpush
: 列表左边/右边添加
jedis.lpush("myList", "a", "b", "c");
jedis.rpush("myList", "1", "2", "3");
-
lrange start end
: 范围获取
List<String> myList = jedis.lrange("myList", 0, -1);
myList.forEach(System.out::print);
-
lpop/rpop
: 删除:列表左边/右边出队列
String lPop = jedis.lpop("myList");
String rPop = jedis.rpop("myList");
4.集合类型set:
不允许重复的元素
-
sadd
:添加
jedis.sadd("mySet", "java", "python", "c", "javaScript");
-
smembers
:获取所有元素
Set<String> set = jedis.smembers("mySet");
set.forEach(System.out::print);
-
srem
:删除
jedis.srem("mySet", "javaScript");
5.有序集合sortedset:
不允许重复元素,且元素有序
-
zadd
: 添加
jedis.zadd("score", 80, "齐天大圣");
jedis.zadd("score", 25, "弼马温");
jedis.zadd("score", 100, "斗战胜佛");
-
zrange
: 范围获取
Set<String> set = jedis.zrange("score", 0, -1);
set.forEach(System.out::print);
-
zrem
: 删除
jedis.zrem("score", "弼马温");
6.通用命令
统一处理
1.查找所有的键
jedis.keys("*").forEach(System.out::print);
2.查询类型
jedis.type("score");
3.集体删除del(String[] str)
可变长参数
String[] strs = {"score", "myset", "user", "mylist"};
jedis.del(strs);
三、Jedis连接池:JedisPool
1.JedisPoll基本使用
-
使用步骤
- 1.(可选)创建一个配置对象
- 2.创建Jedis连接池对象(可选:传参->配置)
- 3.获取连接
- 4.使用
- 5.归还连接
// 1. 创建一个配置对象【可选】
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50); // 最大允许的连接数
config.setMaxIdle(10); // 最大空闲连接
// 创建Jedis连接池对象
// 2.1 默认配置、关闭连接池
JedisPool jedisPool0 = new JedisPool();
jedisPool0.close();
// 2.2 指定配置文件
JedisPool jedisPool = new JedisPool(config, "localhost", 6379);
// 3. 获取连接
Jedis jedis = jedisPool.getResource();
// 4. 使用
jedis.set("name", "小懒");
// 5. 归还连接池
jedis.close();
2.JedisPoll连接池配置介绍
jedis.properties配置介绍
# 最大活动对象数
redis.pool.maxTotal=1000
# 最大能够保持idel状态的对象数
redis.pool.maxIdle=100
# 最小能够保持idel状态的对象数
redis.pool.minIdle=50
# 当池内没有返回对象时,最大等待时间
redis.pool.maxWaitMillis=10000
# 当调用borrow Object方法时,是否进行有效性检查
redis.pool.testOnBorrow=true
# 当调用return Object方法时,是否进行有效性检查
redis.pool.testOnReturn=true
# “空闲链接”检测线程,检测的周期、毫秒数、如果为负值,表示不运行“检测线程”,默认值为-1
redis.pool.timeBetweenEvictionRunsMillis=30000
# 向调用者输出“链接”对象时,是否检测它的空闲超时
redis.pool.testWhileIdle=true
# 对于“空闲链接”监测系那成而言,每次检测的连接资源的个数,默认为3
redis.pool.numTestsPerEvictionRun=50
# redis服务器的IP
redis.ip=xxxxxx
# redis服务器的Port
redis1.port=6379
3.连接池工具类实现
- 配置文件
jedis.properties
host=127.0.0.1
port=6379
maxTotal=50
maxIdle=10
- JedisPoolUtils.java
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;
public class JedisPoolUtils {
private static JedisPool jedisPool;
static {
// 读取配置文件
Properties pro = new Properties();
InputStream in = JedisPoolUtils.class
.getClassLoader()
.getResourceAsStream("jedis.properties");
try {
pro.load(in);
} catch (IOException e) {
e.printStackTrace();
} finally {
// ?这个地方需要关闭流不?
try {
in.close();
} 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();
}
}
四、小试牛刀
1.需求
- 提供index.html页面,页面中有一个省份 下拉列表
- 当 页面加载完成后 发送ajax请求,加载所有省份
2.友情提示
数据库的数据一旦发生改变,则需要更新缓存
- 数据库的表执行 增删改的相关操作,需要将redis缓存数据情况,再次存入
- 在service对应的增删改方法中,将redis数据删除。