大家好,欢迎来到IT知识分享网。
简述
jedis是一款java操作redis数据库的工具,有点类似于jdbc
使用准备
我们首先需要导入jedis的jar包,有两个:
对5种数据的操作
Jedis类用于java程序和redis数据库进行交互,一个最简单的程序就是用java往redis里放数据,注意Jedis类的构造方法如果使用的是空参构造则默认值为自己的ip和6379端口,若要连接别人的数据库则要用别人的ip和端口
//1.获取连接 Jedis jedis = new Jedis("localhost",6379); //2.调用对应的方法操作 jedis.set("username","zhangsan");
String username = jedis.get("username");
//3.关闭连接
jedis.close();
可以使用Jedis操作redis的各种数据结构,需要知道的是jedis的方法和我们用命令操作redis是相似的
string类型
//1.获取连接 Jedis jedis = new Jedis("localhost",6379); //2.调用对应的方法操作 jedis.set("username","zhangsan"); String username = jedis.get("username"); //可存储指定过期时间的数据 jedis.setex("activeCode",20,"valueString"); System.out.println(username); //3.关闭连接 jedis.close();
Hash类型
//1.获取连接 Jedis jedis = new Jedis("localhost",6379); //2.调用对应的方法操作 //存储hash jedis.hset("user","name","zhangsan"); jedis.hset("user","age","23"); jedis.hset("user","gender","male"); //获取单个hash数据 String name = jedis.hget("user", "name"); System.out.println(name); //获取hash的所有map中的数据 Map<String,String> user = jedis.hgetAll("user"); for (String key : user.keySet()) { String value = user.get(key); System.out.println(key+":"+value); } //3.关闭连接 jedis.close();
列表类型
//1.获取连接 Jedis jedis = new Jedis("localhost",6379); //2.调用对应的方法操作 //一次可以存多个值 jedis.lpush("mylist","a","b","c");//从左边存 jedis.rpush("mylist","a","b","c");//从右边存 //获取数据 List<String> mylist = jedis.lrange("mylist", 0, -1); System.out.println(mylist); String element1 = jedis.lpop("mylist"); System.out.println(element1); //3.关闭连接 jedis.close();
set类型
//1.获取连接 Jedis jedis = new Jedis("localhost",6379); //2.调用对应的方法操作 jedis.sadd("myset","java","php","cpp"); Set<String> myset = jedis.smembers("myset"); System.out.println(myset); //3.关闭连接 jedis.close();
有序set类型
//1.获取连接 Jedis jedis = new Jedis("localhost",6379); //2.调用对应的方法操作 jedis.zadd("mysortedset",3,"亚索"); jedis.zadd("mysortedset",5,"盖伦"); jedis.zadd("mysortedset",4,"猴子"); Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1); System.out.println(mysortedset); //3.关闭连接 jedis.close();
jedis连接池
jedis的连接池叫JedisPool,在创建连接池后我们可以从连接池中获取连接,客户端连接Redis使用的是TCP协议,直连的方式每次需要建立TCP连接,而连接池的方式是可以预先初始化好Jedis连接,所以每次只需要从Jedis连接池借用即可,而借用和归还操作是在本地进行的,只有少量的并发同步开销,远远小于新建TCP连接的开销。
用连接池的一次普通的流程:
//创建配置对象 JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(50);//最大的连接数50 config.setMaxIdle(10);//最大的空闲连接数 //创建jedis连接池对象 JedisPool jedisPool = new JedisPool(config,"localhost",6379); //获取连接 Jedis jedis = jedisPool.getResource(); //使用连接 jedis.set("username","hehe"); //关闭、归还连接到连接池中 jedis.close();
将来实际应用的难点在于参数的配置:
#最大活动对象数
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
连接池工具类
如果把配置放在代码里的话耦合度会比较高,所以一般我们把配置放在配置文件中,这样要使用的时候加载配置即可。加载配置我们在工具类的静态代码块中执行:
package util; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** * Jedis连接池的工具类 * 加载配置文件,配置连接池的参数 * 提供获取连接的方法 */ public class JedisPoolUtils { private static JedisPool jedisPool; static{ //获取输入流 InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties"); //创建properties对象 Properties properties = new Properties(); try { properties.load(is); } catch (IOException e) { e.printStackTrace(); } //获取数据、设置到JedisPoolConfig中 JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal"))); jedisPoolConfig.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle"))); String host = properties.getProperty("host"); Integer port = Integer.parseInt(properties.getProperty("port")); System.out.println(host+","+port); jedisPool = new JedisPool(jedisPoolConfig,host,port); } /** * 获取连接的方法 */ public static Jedis getJedis(){ return jedisPool.getResource(); } }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/31045.html