美文网首页
(8)redis的Jedis客户端Api使用

(8)redis的Jedis客户端Api使用

作者: Mrsunup | 来源:发表于2019-01-12 23:37 被阅读0次

    Redis Java客户端有很多的开源产品比如Redission、Jedis、lettuce

    Jedis是Redis的Java实现的客户端,其API提供了比较全面的Redis命令的支持;

    Redisson实现了分布式和可扩展的Java数据结构,和Jedis相比,功能较为简单,不支持字符串操作,不支持排
    序、事务、管道、分区等Redis特性。Redisson主要是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。

    lettuce是基于Netty构建的一个可伸缩的线程安全的Redis客户端,支持同步、异步、响应式模式。多个线程可以共享一个连接实例,而不必担心多线程并发问题;

    着重看Jedis的使用

    对于初学者,可以参考github中的jedis的源码包下的测试案例,案例提供了很多的使用方式,可以参考一下
    也可以参考
    参考资料: https://github.com/xetorthio/jedis/tree/master/src/test/java/redis/clients/jedis/tests

    也可以参考wiki的getingstart部分:https://github.com/xetorthio/jedis/wiki/Getting-started

    下面的所有的例子可以参考:

    一、jedis的简单使用

    • 环境准备

    reids环境搭建: 首先需要自己搭建redis的单机环境和开启哨兵模式以及redis集群模式,可以参考的redis博客系列redis的目录简介

    maven依赖:

          <dependency>
              <groupId>redis.clients</groupId>
              <artifactId>jedis</artifactId>
              <version>3.0.0</version>
          </dependency>
    
    • jedis的api单机使用
    /**
     * @Project: redis
     * @description: jedis的api单机使用
     * @author: sunkang
     * @create: 2019-01-12 14:24
     * @ModificationHistory who      when       What
     **/
    public class JedisDemo {
    
        public static void main(String[] args) {
            //三种方式连接
            //1.通过直接的host连接
            String host = "192.168.44.129";
            //超时时间为15000ms
            Jedis jedis = new Jedis(host,6379,15000);
            jedis.set("foo", "bar");
            String value = jedis.get("foo");
            System.out.println(value);
    
            //2.通过HostAndPort 连接
            HostAndPort hostAndPort = new HostAndPort(host,6379);
            Jedis jedis1 = new Jedis(hostAndPort);
            //对字符串的简单操作
            jedis1.set("bar","foo");
            String bar = jedis.get("bar");
            System.out.println(bar);
            //关闭
            jedis1.close();
    
            //3.通过url连接
            Jedis jedis2 = new Jedis("redis://"+host+":6379");
            System.out.println( jedis2.get("bar"));
            jedis2.close();
    
            //对list的简单操作
            jedis.lpush("list","value1","value2","value3");
            List<String> list = jedis.lrange("list",0,-1);
            System.out.println(list);
    
    
            //对map的简单操作
            Map<String,String> map  = new HashMap();
            map.put("key1","value1");
            map.put("key2","value2");
            jedis.hmset("map",map);
            Map getMap = jedis.hgetAll("map");
            System.out.println(getMap);
    
            //对set的结合的简单操作
            jedis.sadd("sets","set1","set2","set3");
             Set<String> sets= jedis.smembers("sets");
            System.out.println(sets);
    
            //对有序集合的检查操作
            jedis.zadd("zsets",1,"number1");
            jedis.zadd("zsets",2,"number2");
            Set<Tuple> zsets =  jedis.zrangeWithScores("zsets",0,-1);
            for(Tuple tuple : zsets){
                System.out.println(" scope: "+tuple.getScore()+ ",element:"+tuple.getElement());
            }
            jedis.close();
        }
    }
    
    • JedisPool的连接池api简单使用
    /**
     * @Project: redis
     * @description: JedisPool的连接池api简单使用
     * @author: sunkang
     * @create: 2019-01-12 16:20
     * @ModificationHistory who      when       What
     **/
    public class JedisPoolUtils {
       private static String host = "192.168.44.129";
       private static   JedisPool jedisPool = null;
        public static Jedis getRedis(){
            JedisPoolConfig poolConfig = new JedisPoolConfig();
            //设置jedis连接池中最大的连接个数
            poolConfig.setMaxTotal(60);
            //设置jedis连接池中最大的空闲连接个数
            poolConfig.setMaxIdle(30);
            //设置jedis连接池中最小的空闲连接个数
            poolConfig.setMinIdle(5);
            //jedis连接池最大的等待连接时间 ms值
            poolConfig.setMaxWaitMillis(30000);
             jedisPool = new JedisPool(poolConfig,host,6379,2000);
            Jedis jedis = jedisPool.getResource();
            return jedis;
        }
        public void closePool(){
            if(jedisPool !=null){
                jedisPool.close();
            }
        }
    }
    
    • Pipeline的api简单使用
    /**
     * @Project: redis
     * @description:  Pipeline的api简单使用
     * @author: sunkang
     * @create: 2019-01-12 18:28
     * @ModificationHistory who      when       What
     **/
    public class PipelineDemo {
        public static void main(String[] args) {
            Jedis   jedis  = JedisPoolUtils.getRedis();
             Pipeline pipeline =  jedis.pipelined();
             //1.没有事务的同步
             pipeline.set("aa","1");
             pipeline.set("bb","2");
             pipeline.set("cc","3");
             pipeline.set("dd","4");
             pipeline.sync();
    
             //2.开启事务的pipeline
            try{
                pipeline.multi();
                pipeline.set("ee","ee");
                pipeline.set("ff","ff");
                //提交
                pipeline.exec();
            }catch (Exception e){
                //回滚
                pipeline.discard();
            }
            jedis.close();
        }
    }
    
    • JedisSentinelPool 哨兵模式下的api使用
    /**
     * @Project: redis
     * @description:JedisSentinelPool 哨兵模式下的api使用
     * 配置的是哨兵的地址集群地址
     * 需要开启哨兵
     * @author: sunkang
     * @create: 2019-01-12 14:43
     * @ModificationHistory who      when       What
     **/
    public class JedisSentinePoolDemo {
    
        public static void main(String[] args) {
            //配置的是哨兵的ip地址
            String host = "192.168.44.129:26379";
            String sentinelMasterName = "mymaster";
            Set<String> hostSet= new HashSet<String>();
            hostSet.add(host);
            //哨兵集群下的连接 ,通过连接哨兵集群从而获取得到jedisd 连接
            GenericObjectPoolConfig config = new GenericObjectPoolConfig();
            JedisSentinelPool sentinelPool  = new JedisSentinelPool(sentinelMasterName,hostSet,config,20000);
            Jedis jedis  = sentinelPool.getResource();
            jedis.set("sentinel","sentinel");
            String value = jedis.get("sentinel");
            System.out.println(value);
        }
    }
    
    • redis集群模式下JedisCluster的api使用
    /**
    * @Project: redis
    * @description: redis集群模式下JedisCluster的api使用
    * 需要配置好redis的集群
    *连接的地址redis集群的地址
    * @author: sunkang
    * @create: 2019-01-12 14:52
    * @ModificationHistory who      when       What
    **/
    public class JedisClusterDemo {
       public static void main(String[] args) {
           String clusterhos ="192.168.44.129";
           Set<HostAndPort> hostAndPorts = new HashSet<HostAndPort>();
           hostAndPorts.add(new HostAndPort(clusterhos,30001));
           hostAndPorts.add(new HostAndPort(clusterhos,30002));
           hostAndPorts.add(new HostAndPort(clusterhos,30003));
           hostAndPorts.add(new HostAndPort(clusterhos,30004));
           hostAndPorts.add(new HostAndPort(clusterhos,30005));
           hostAndPorts.add(new HostAndPort(clusterhos,30006));
    
           //在构建JedisCluster实例,其实会发送cluster slots指令来获取slot与节点的映射关系
           JedisCluster cluster = new JedisCluster(hostAndPorts);
           //设置一个值会利用crc16算法计算出slot的值,然后根据slot的值获取到与哪台节点的连接
           cluster.set("cluster","cluster");
           String value = cluster.get("cluster");
           System.out.println(value);
           cluster.close();
       }
    }
    

    相关文章

      网友评论

          本文标题:(8)redis的Jedis客户端Api使用

          本文链接:https://www.haomeiwen.com/subject/jaqfdqtx.html