jedis入门教程
Posted lywj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jedis入门教程相关的知识,希望对你有一定的参考价值。
1 jedis介绍
2 java连接Redis
1 导入jar包
2 连接实例
@Test //获得单一的jedis对象操作数据库 public void test1(){ //1、获得连接对象 设置ip地址和端口 Jedis jedis = new Jedis("192.168.204.128", 6379); //2 、设置数据 jedis.set("name", "zhangsan"); //3 获得数据 String name = jedis.get("name"); System.out.println(name); //4 释放资源 jedis.close(); }
3 连接超时问题的处理
也可以直接使用下面的命令:开启端口的远程访问。
/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT /etc/rc.d/init.d/iptables save
4 通过连接池获得连接
//通过jedis的pool获得jedis连接对象 @Test public void test2(){ //0、创建池子的配置对象 JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxIdle(30);//最大闲置个数 poolConfig.setMinIdle(10);//最小闲置个数 poolConfig.setMaxTotal(50);//最大连接数 //1、创建一个redis的连接池 JedisPool pool = new JedisPool(poolConfig, "192.168.186.131", 6379); //2、从池子中获取redis的连接资源 Jedis jedis = pool.getResource(); //3、操作数据库 jedis.set("xxx","yyyy"); System.out.println(jedis.get("xxx")); //4、关闭资源 jedis.close(); pool.close(); //实际开发中池子不要关闭,池子关闭了别人就没法使用了 }
4 连接池工具类
1 工具类代码
import java.io.IOException; import java.io.InputStream; import java.util.Properties; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class JedisPoolUtils { private static JedisPool pool = null; static{ //加载配置文件 InputStream in = JedisPoolUtils.class.getClassLoader().getResourceAsStream("redis.properties"); Properties pro = new Properties(); try { pro.load(in); } catch (IOException e) { e.printStackTrace(); } //获得池子对象 JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxIdle(Integer.parseInt(pro.get("redis.maxIdle").toString()));//最大闲置个数 poolConfig.setMinIdle(Integer.parseInt(pro.get("redis.minIdle").toString()));//最小闲置个数 poolConfig.setMaxTotal(Integer.parseInt(pro.get("redis.maxTotal").toString()));//最大连接数 pool = new JedisPool(poolConfig,pro.getProperty("redis.url") , Integer.parseInt(pro.get("redis.port").toString())); } //获得jedis资源的方法 public static Jedis getJedis(){ return pool.getResource(); } }
2 配置文件
配置文件放在src目录下面:
redis.maxIdle=30 redis.minIdle=10 redis.maxTotal=100 redis.url=192.168.186.131 redis.port=6379
5 redis有密码的jedis连接方式
单机版
package cn.e3mall.jedis; import org.junit.Test; import redis.clients.jedis.Jedis; /** * * @title:JedisTest * @description: * @author jepson * @date 2018年6月3日 下午4:20:19 * @version 1.0 */ public class JedisTest { @Test public void testJedis(){ // 第一步:创建一个Jedis对象。需要指定服务端的ip及端口。 Jedis jedis = new Jedis("192.168.25.128", 6379); //设置密码 jedis.auth("123456"); // 第二步:使用Jedis对象操作数据库,每个redis命令对应一个方法。 jedis.set("name", "殷桃丸子"); String result = jedis.get("name"); // 第三步:打印结果。 System.out.println(result); // 第四步:关闭Jedis jedis.close(); } }
如果redis有密码,这里不指定密码的话,会报下面的异常
单机版-从连接池获取连接
@Test public void testJedispool(){ //0、创建池子的配置对象 JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxIdle(30);//最大闲置个数 poolConfig.setMinIdle(10);//最小闲置个数 poolConfig.setMaxTotal(50);//最大连接数 //1、创建一个redis的连接池 JedisPool pool = new JedisPool(poolConfig, "192.168.25.128", 6379); //2、从池子中获取redis的连接资源 Jedis jedis = pool.getResource(); jedis.auth("123456");//设置密码 //3、操作数据库 jedis.set("user","王五"); System.out.println(jedis.get("user")); //4、关闭资源 jedis.close(); pool.close(); //实际开发中池子不要关闭,池子关闭了别人就没法使用了 }
6 jedis连接redis集群版
补充知识点:redis-cli客户端连接Redis集群的方法:
[[email protected] redis01]# ./redis-cli -h 192.168.25.128 -p 7006 -c
@Test public void testJedisCluster() throws Exception { // 第一步:使用JedisCluster对象。需要一个Set<HostAndPort>参数。Redis节点的列表。 Set<HostAndPort> nodes = new HashSet<>(); nodes.add(new HostAndPort("192.168.25.128", 7001)); nodes.add(new HostAndPort("192.168.25.128", 7002)); nodes.add(new HostAndPort("192.168.25.128", 7003)); nodes.add(new HostAndPort("192.168.25.128", 7004)); nodes.add(new HostAndPort("192.168.25.128", 7005)); nodes.add(new HostAndPort("192.168.25.128", 7006)); JedisCluster jedisCluster = new JedisCluster(nodes); // 第二步:直接使用JedisCluster对象操作redis。在系统中单例存在。 jedisCluster.set("hello", "100"); String result = jedisCluster.get("hello"); // 第三步:打印结果 System.out.println(result); // 第四步:系统关闭前,关闭JedisCluster对象。 jedisCluster.close(); }
7 封装JedisClient接口实现单机版和集群版通用
将常用的操作redis的方法提取出来一个接口,分别对应单机版和集群版创建两个实现类。
1 JedisClient接口的定义
package cn.e3mall.common.jedis; import java.util.List; import java.util.Map; import java.util.Set; /** * jedis操作redis的常用方法提取 * @title:JedisClient * @description: * @author jepson * @date 2018年6月3日 下午7:52:31 * @version 1.0 */ public interface JedisClient { //commons start Boolean exists(String key); Long expire(String key, int seconds); Long ttl(String key); Long persist(String key); String type(String key); Long del(String key); String ping(); //commons end //String start String set(String key, String value); String get(String key); String getSet(String key,String value); Long incr(String key); Long incrBy(String key,Long integer); Double incrByFloat(String key,Double value); Long decr(String key); Long decrBy(String key,Long integer); Long append(String key,String value); //String类型的方法end //hash start; Long hset(String key, String field, String value); String hmset(String key,Map<String,String> map ); String hget(String key, String field); List<String> hmget(String key, String... fields); Map<String, String> hgetAll(String key); Long hincrby(String key,String field,long value); Long hlen(String key); Set<String> hkeys(String key); List<String> hvals(String key); Long hdel(String key, String... fields); Boolean hexists(String key, String field); //hash end; }
2 单机版的实现类
package cn.e3mall.common.jedis; import java.util.List; import java.util.Map; import java.util.Set; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; /** * 单机版redis的方法 * @title:JedisClientPool * @description: * @author jepson * @date 2018年6月3日 下午6:47:41 * @version 1.0 */ public class JedisClientPool implements JedisClient { private JedisPool jedisPool; //连接池 private String password; //单机版密码 //get/set public JedisPool getJedisPool() { return jedisPool; } public void setJedisPool(JedisPool jedisPool) { this.jedisPool = jedisPool; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public Boolean exists(String key) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); Boolean result = jedis.exists(key); jedis.close(); return result; } @Override public Long expire(String key, int seconds) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); Long result = jedis.expire(key, seconds); jedis.close(); return result; } @Override public Long ttl(String key) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); Long result = jedis.ttl(key); jedis.close(); return result; } @Override public Long persist(String key) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); Long result = jedis.persist(key); jedis.close(); return result; } @Override public String type(String key) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); String result = jedis.type(key); jedis.close(); return result; } @Override public Long del(String key) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); Long result = jedis.del(key); jedis.close(); return result; } @Override public String ping() { Jedis jedis = jedisPool.getResource(); jedis.auth(password); String result = jedis.ping(); jedis.close(); return result; } @Override public String set(String key, String value) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); String result = jedis.set(key, value); jedis.close(); return result; } @Override public String get(String key) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); String result = jedis.get(key); jedis.close(); return result; } @Override public String getSet(String key, String value) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); String result = jedis.getSet(key, value); jedis.close(); return result; } @Override public Long incr(String key) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); Long result = jedis.incr(key); jedis.close(); return result; } @Override public Long incrBy(String key, Long integer) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); Long result = jedis.incrBy(key, integer); jedis.close(); return result; } @Override public Double incrByFloat(String key, Double value) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); Double result = jedis.incrByFloat(key, value); jedis.close(); return result; } @Override public Long decr(String key) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); Long result = jedis.decr(key); jedis.close(); return result; } @Override public Long decrBy(String key, Long integer) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); Long result = jedis.decrBy(key, integer); jedis.close(); return result; } @Override public Long append(String key, String value) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); Long result = jedis.append(key, value); jedis.close(); return result; } @Override public Long hset(String key, String field, String value) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); Long result = jedis.hset(key, field, value); jedis.close(); return result; } @Override public String hmset(String key, Map<String, String> map) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); String result = jedis.hmset(key, map); jedis.close(); return result; } @Override public String hget(String key, String field) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); String result = jedis.hget(key, field); jedis.close(); return result; } @Override public List<String> hmget(String key, String... fields) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); List<String> result = jedis.hmget(key, fields); jedis.close(); return result; } @Override public Map<String, String> hgetAll(String key) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); Map<String,String> result = jedis.hgetAll(key); jedis.close(); return result; } @Override public Long hincrby(String key, String field, long value) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); Long result = jedis.hincrBy(key, field, value); jedis.close(); return result; } @Override public Long hlen(String key) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); Long result = jedis.hlen(key); jedis.close(); return result; } @Override public Set<String> hkeys(String key) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); Set<String> result = jedis.hkeys(key); jedis.close(); return result; } @Override public List<String> hvals(String key) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); List<String> result = jedis.hvals(key); jedis.close(); return result; } @Override public Long hdel(String key, String... fields) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); Long result = jedis.hdel(key, fields); jedis.close(); return result; } @Override public Boolean hexists(String key, String field) { Jedis jedis = jedisPool.getResource(); jedis.auth(password); Boolean result = jedis.hexists(key, field); jedis.close(); return result; } }
3 集群版实现类
package cn.e3mall.common.jedis; import java.util.List; import java.util.Map; import java.util.Set; import redis.clients.jedis.JedisCluster; /** * redis集群redis客户端 * @title:JedisClientCluster * @description: * @author jepson * @date 2018年6月3日 下午6:48:24 * @version 1.0 */ public class JedisClientCluster implements JedisClient { private JedisCluster jedisCluster; public JedisCluster getJedisCluster() { return jedisCluster; } public void setJedisCluster(JedisCluster jedisCluster) { this.jedisCluster = jedisCluster; } @Override public Boolean exists(String key) { return jedisCluster.exists(key); } @Override public Long expire(String key, int seconds) { return jedisCluster.expire(key, seconds); } @Override public Long ttl(String key) { return jedisCluster.ttl(key); } @Override public Long persist(String key) { return jedisCluster.persist(key); } @Override public String type(String key) { return jedisCluster.type(key); } @Override public Long del(String key) { return jedisCluster.del(key); } @Override public String ping() { return jedisCluster.ping(); } @Override public String set(String key, String value) { return jedisCluster.set(key, value); } @Override public String get(String key) { return jedisCluster.get(key); } @Override public String getSet(String key, String value) { return jedisCluster.getSet(key, value); } @Override public Long incr(String key) { return jedisCluster.incr(key); } @Override public Long incrBy(String key, Long integer) { return jedisCluster.incrBy(key, integer); } @Override public Double incrByFloat(String key, Double value) { return jedisCluster.incrByFloat(key, value); } @Override public Long decr(String key) { return jedisCluster.decr(key); } @Override public Long decrBy(String key, Long integer) { return jedisCluster.decrBy(key, integer); } @Override public Long append(String key, String value) { return jedisCluster.append(key, value); } @Override public Long hset(String key, String field, String value) { return jedisCluster.hset(key, field, value); } @Override public String hmset(String key, Map<String, String> map) { return jedisCluster.hmset(key, map); } @Override public String hget(String key, String field) { return jedisCluster.hget(key, field); } @Override public List<String> hmget(String key, String... fields) { return jedisCluster.hmget(key, fields); } @Override public Map<String, String> hgetAll(String key) { return jedisCluster.hgetAll(key); } @Override public Long hincrby(String key, String field, long value) { return jedisCluster.hincrBy(key, field, value); } @Override public Long hlen(String key) { return jedisCluster.hlen(key); } @Override public Set<String> hkeys(String key) { return jedisCluster.hkeys(key); } @Override public List<String> hvals(String key) { return jedisCluster.hvals(key); } @Override public Long hdel(String key, String... field) { return jedisCluster.hdel(key, field); } @Override public Boolean hexists(String key, String field) { return jedisCluster.hexists(key, field); } }
4 applicationContext-redis.xml配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd"> <!-- 加载配置文件 --> <context:property-placeholder location="classpath:conf/db.properties" /> <!-- 连接redis单机版 --> <bean id="jedisPool" class="redis.clients.jedis.JedisPool"> <constructor-arg name="host" value="${redis.host}"/> <constructor-arg name="port" value="${redis.port}"/> </bean> <bean id="jedisClientPool" class="cn.e3mall.common.jedis.JedisClientPool"> <property name="jedisPool" ref="jedisPool"></property> <property name="password" value="${redis.password}"></property> </bean> <!-- 连接redis集群 --> <!-- <bean id="jedisClientCluster" class="cn.e3mall.common.jedis.JedisClientCluster"> <property name="jedisCluster" ref="jedisCluster"/> </bean> <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster"> <constructor-arg name="nodes"> <set> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="${redis.host1}"></constructor-arg> <constructor-arg name="port" value="${redis.port1}"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="${redis.host2}"></constructor-arg> <constructor-arg name="port" value="${redis.port2}"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="${redis.host3}"></constructor-arg> <constructor-arg name="port" value="${redis.port3}"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="${redis.host4}"></constructor-arg> <constructor-arg name="port" value="${redis.port4}"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="${redis.host5}"></constructor-arg> <constructor-arg name="port" value="${redis.port5}"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="${redis.host6}"></constructor-arg> <constructor-arg name="port" value="${redis.port6}"></constructor-arg> </bean> </set> </constructor-arg> </bean> --> </beans>
注意:单机版和集群版不能共存,使用单机版时注释掉集群版的配置。
使用集群版时把单机版的配置注释掉。
5 db.properties配置
# mysql数据库 jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/e3mall?characterEncoding=utf-8 jdbc.username=root jdbc.password=root #redis单机版数据库 redis.password=123456 redis.host=192.168.25.128 redis.port=6379 #redis集群数据库 redis.host1=192.168.25.128 redis.port1=7001 redis.host2=192.168.25.128 redis.port2=7002 redis.host3=192.168.25.128 redis.port3=7003 redis.host4=192.168.25.128 redis.port4=7004 redis.host5=192.168.25.128 redis.port5=7005 redis.host6=192.168.25.128 redis.port6=7006
6 测试
package cn.e3mall.jedis; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.e3mall.common.jedis.JedisClient; /** * 测试jedisclient * * @title:JedisClientTest * @description: * @author jepson * @date 2018年6月3日 下午7:36:48 * @version 1.0 */ public class JedisClientTest { @Test public void testJedisClient() throws Exception { // 初始化spring容器 ApplicationContext applicationContext = new ClassPathXmlApplicationContext( "classpath:spring/applicationContext-redis.xml"); // 从容器中获得JedisClient对象 JedisClient jedisClient = applicationContext.getBean(JedisClient.class); jedisClient.set("user", "lisi"); String string = jedisClient.get("user"); String ping = jedisClient.ping(); System.out.println(ping); } }
以上是关于jedis入门教程的主要内容,如果未能解决你的问题,请参考以下文章