jedis的使用
前言
Jedis: 一款java操作redis数据库的工具.
使用时先下载好jar包(也可maven,本文就是)
一、简单使用示例
1.快速入门
在运行时记得打开redis服务器不然会报错,在maven中使用jedis jar包时可能会遇到一些意外情况(如果你用的是idea2020版,是因为idea在maven这个地方有bug),还有jedis关闭资源时可能会有问题,没有close()方法,可评论或私信与我交流,相互学习,相互进步。
package com.huiqing;
import redis.clients.jedis.Jedis;
public class JedisTest1 {
//1.获取链接
private static Jedis jedis = new Jedis("localhost", 6379);
//获取连接的第二种方式,这种方式不写参数,但默认就是上面的参数,仅对于本地连接
// private static Jedis jedis = new Jedis();
public static void main(String[] args) {
//2.操作
jedis.set("username", "zhangsan");
//3.获取资源
String username = jedis.get("username");
System.out.println(username);
//3.关闭资源
jedis.close();
}
}
2.操作五种数据格式
package com.huiqing;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class JedisTest2 {
//三个步骤1.获取链接 2.操作redis 3.关闭资源
//现在上面获取链接,下面做演示就不用一个一个获取了
private static Jedis jedis = new Jedis();
/**
* String类型
*/
@Test
public void testString() {
//操作
jedis.set("username", "lisi");
String username = jedis.get("username");
System.out.println(username);
//关闭资源
jedis.close();
}
/**
* hashMap类型
* key : field : value
*/
@Test
public void testHash() {
jedis.hset("user", "name", "zhangsan");
jedis.hset("user","sex","male");
//指定获取特定字段
String name = jedis.hget("user", "name");
System.out.println(name);
//获取hashMap(user)中的所有数据
Map<String, String> user = jedis.hgetAll("user");
for (String key : user.keySet()) {
String value = user.get(key);
System.out.println(key + " :" + value);
}
//删除key
jedis.del("user");
jedis.close();
}
/**
* linkedList类型
*
* 支持重复元素
* lpush / rpush
* lpop / rpop
* lrange start end 获取数据,要指定范围
*/
@Test
public void testList(){
//存入数据
jedis.lpush("myListName","张迪","工头","张迪"); //从左边存,存进去了两个张迪
jedis.rpush("myListName","雷总","伟业"); //从右边存
//获取数据
List<String> myListName = jedis.lrange("myListName", 0, -1);
for (String name : myListName) {
System.out.println(name);
}
//弹出数据
String myListName1 = jedis.lpop("myListName"); //从左边弹出,返回弹出的元素
System.out.println(myListName1);
String myListName2 = jedis.rpop("myListName"); //从右边弹出,返回弹出的元素
System.out.println(myListName2);
//删除数据
jedis.del("myListName");
jedis.close();
}
/**
* Set类型
* 不允许重复元素
* sadd 存储
* smember 获取元素
*/
@Test
public void testSet(){
//存储
jedis.sadd("mySet","争争","庆哥");
// jedis.sadd("mySet","争争"); //没有报错,但这个'争争'是不能够存入的
//获取数据
Set<String> mySet = jedis.smembers("mySet");
for (String element : mySet) {
System.out.println(element);
}
//删除
jedis.del("mySet");
jedis.close();
}
/**
* sortedSet 有序集合类型,不允许重复,并且元素有顺序
*/
@Test
public void testSortedSet(){
//存储数据
//参数String key ,double score, String member 第二个参数算是给他们排个序吧!(不同的number用同一个score也能存进去,最后存入的number会排在先存入的number)
jedis.zadd("mySortedSet",1,"张迪");
jedis.zadd("mySortedSet",2,"工头");
jedis.zadd("mySortedSet",3,"争争");
//获取数据
Set<String> mySortedSet = jedis.zrange("mySortedSet", 0, -1);
for (String s : mySortedSet) {
System.out.println(s);
}
jedis.del("mySortedSet");
jedis.close();
}
}
二、jedis连接池:jedisPool
五步走战略
创建配置对象 ——> 创建连接池对象 ——> 获取链接 ——> 使用 ——> 关闭
1.示例
package com.huiqing;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisTest3 {
/**
* 五步走战略
* 创建配置对象 ——> 创建连接池对象 ——> 获取链接 ——> 使用——> 关闭
* @param args
*/
public static void main(String[] args) {
//1.创建配置对象
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50);//最大连接对象
config.setMaxIdle(10);//最大闲置对象
//2.创建jedis连接池对象
JedisPool jedisPool = new JedisPool(config, "localhost", 6379);
//3.获取链接
Jedis jedis = jedisPool.getResource();
//4.使用
jedis.set("myStringName","庆哥");
String myStringName = jedis.get("myStringName");
System.out.println(myStringName);
//5.关闭,归还到连接池中
jedis.close();
}
}
2.jedies详细配置
#最大活动对象数
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
redis.port=6379
三、创建连接池工具类
java的特性之一“封装”,接下我们上面的东西封装成一个工具类,以方便使用。
1.jedis.properties
host=127.0.0.1
port=6379
maxTota1=50
maxIdle=10
2.JediesPoolUtils工具类
一劳永逸啊!!!
package com.huiqing;
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 JedisPoolUnits {
private static JedisPool jedisPool;
static {
//读取配置文件
InputStream is = JedisPoolUnits.class.getClassLoader().getResourceAsStream("jedis.properties");
//创建Properties对象
Properties properties = new Properties();
//关联文件
try {
properties.load(is);
} catch (IOException e) {
e.printStackTrace();
}
//获取数据,设置到JeidsPoolConfig中
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
config.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdel")));
//初始化JedisPool
jedisPool = new JedisPool(config, properties.getProperty("host"), Integer.parseInt(properties.getProperty("port")));
}
/**
* 获取连接方法
*/
public static Jedis getJedis(){
return jedisPool.getResource();
}
}