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

      <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();
   }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 227,367评论 6 532
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 98,001评论 3 413
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 175,213评论 0 373
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,535评论 1 308
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,317评论 6 405
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,868评论 1 321
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,963评论 3 440
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,090评论 0 285
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,599评论 1 331
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,549评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,712评论 1 367
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,233评论 5 356
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,961评论 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,353评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,607评论 1 281
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,321评论 3 389
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,686评论 2 370