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

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依赖:

      
          redis.clients
          jedis
          3.0.0
      
  • 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 list = jedis.lrange("list",0,-1);
        System.out.println(list);


        //对map的简单操作
        Map 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 sets= jedis.smembers("sets");
        System.out.println(sets);

        //对有序集合的检查操作
        jedis.zadd("zsets",1,"number1");
        jedis.zadd("zsets",2,"number2");
        Set 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 hostSet= new HashSet();
        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 hostAndPorts = new HashSet();
       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使用)