zoukankan      html  css  js  c++  java
  • 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集群的方法

    [root@admin 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);
        }
    }
  • 相关阅读:
    NOIP1998提高组——挖地雷
    模板——EXBSGS
    vue 知识点
    jq_js
    ruby 基础知识(一)
    idea maven pom配置文件
    .net core dapper (5)
    .net core dapper (4)
    .net core dapper (3)
    .net core dapper (2)
  • 原文地址:https://www.cnblogs.com/jepson6669/p/8377715.html
Copyright © 2011-2022 走看看