文档章节

Jedis中常见的api

a_xianyu
 a_xianyu
发布于 2017/06/02 20:02
字数 1331
阅读 45
收藏 0
点赞 0
评论 0

刚学完Redis,用Jedis再熟悉一下api,发现还是有些不同的 。使用的是jedis-2.1.0.jar

import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.BinaryClient;
import redis.clients.jedis.Jedis;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TestAPI {
    private Jedis jedis = null;

    @Before
    public void before() {
        jedis = new Jedis("192.168.163.128", 6379);
        jedis.set("k1", "v1");
        jedis.set("k2", "v2");
        jedis.set("k3", "v3");
        jedis.set("k4", "v4");
        jedis.set("num", "23");
    }

    @Test
    public void testKey() {
        System.out.println(jedis.keys("*"));
        System.out.println(jedis.exists("k1"));
        jedis.expire("k1", 8); //设置过期时间为8秒
        try {
            for (int i = 1; i < 10; i++) {
                Thread.sleep(1000);
                System.out.println(jedis.ttl("k1") + ":" + jedis.exists("k1")); //ttl的单位为秒
            }
        } catch (Exception e) {
        }
        System.out.println(jedis.type("k2"));
    }

    @Test
    public void testString() {
        //set, get, del, append, strlen
        jedis.set("name", "yitiaoxianyu");
        System.out.println(jedis.get("name")); //yitiaoxianyu
        jedis.del("name");
        System.out.println(jedis.exists("name")); //false
        jedis.append("name","so powerful one"); //append可以创建元素
        System.out.println(jedis.get("name"));  //如何在get时取到它的中文呢?只需要在redis-cli 后面加上 --raw
        System.out.println(jedis.strlen("name")); //长度为16, 可以使用ssh连接逐个查看

        //incr, incyby, decr, decyby
        System.out.println(jedis.incr("num")); //相当于++i
        System.out.println(jedis.decr("num")); //相当于--i
        System.out.println(jedis.incrBy("num", 20));
        System.out.println(jedis.decrBy("num", 13));

        //getrange, setrange
        System.out.println(jedis.getrange("name", 0, -1)); //起始字符位置为0, 末尾字符位置为-1
        System.out.println(jedis.getrange("name", 1, 6));  //s'o powe'rful one
        System.out.println(jedis.getrange("name", 2, -1)); //so' powerful one'
        System.out.println(jedis.setrange("name", 4, "xyz")); //字符替换
        System.out.println(jedis.getrange("name", 0, -1));

        //setex, setnx
        jedis.setex("email", 7, "123@abc.com"); //setex: 重新创建一个元素email, 过期时间为7秒,值为“123@abc.com"
        jedis.setnx("gender", "male"); //setnx: 如果不存在就创建
        System.out.println(jedis.exists("gender"));
        jedis.setnx("email", "234@bcd.com");
        System.out.println(jedis.getrange("email", 0, -1));

        //mset, mget, msetnx
        jedis.mset("name1", "zhangsan", "name2", "lisi", "name3", "wangwu"); //参数为key,value对的可变数组。一一对应
        List<String> list = jedis.mget("name1", "name2","name3");//参数为可变数组
        list.forEach(System.out::println); //jdk8中的lambda表达式
        jedis.msetnx("name1", "zhaoliu", "height", "173"); //msetnx: 不存在就创建
        jedis.mget("name1", "height").forEach(System.out::println);

        //getset: 返回原来的值,然后设置新值
        System.out.println(jedis.getSet("email", "345@cde.com"));
        System.out.println(jedis.get("email"));
    }

    @Test
    public void testList() {
        //lpush, rpush, lrange
        jedis.del("fruit", "animal", "number");//del的参数为可变数组
        jedis.lpush("fruit", "apple", "banana", "orange", "grape", "pear"); //第一个参数为键值,后面为一个可变数组
        jedis.rpush("animal", "panda", "dog", "cat", "elephant"); //第一个参数为键值,后面为一个可变数组
        List<String> fruit0 = jedis.lrange("fruit", 0, 2);
        fruit0.forEach(System.out::println); //结果为 pear grape orange, 简单理解,lpush为逆序
        List<String> animal0 = jedis.lrange("animal", 0, 2);
        animal0.forEach(System.out::println); //结果为 panda dog cat

        //lpop, rpop, rpoplpush
        System.out.println(jedis.lpop("fruit")); //结果为pear
        System.out.println(jedis.rpop("animal")); //结果为elephant
        jedis.rpoplpush("fruit", "animal"); //将fruit中的尾部元素apple移入animal的头部panda前

        //lindex, llen
        System.out.println(jedis.lindex("animal", 1));//结果为panda
        System.out.println(jedis.llen("animal"));

        //lrem
        jedis.lpush("number", "1", "7", "2", "3", "5", "3", "3", "1");
        jedis.lrem("number", 2, "3"); //删除2个3
        System.out.println(jedis.lrange("number", 0, -1)); //[1, 5, 3, 2, 7, 1]

        //ltrim
        jedis.ltrim("number", 1, 3); //截取
        System.out.println(jedis.lrange("number", 0, -1));//[5, 3, 2]

        //lset
        jedis.lset("number", 1, "10");
        System.out.println(jedis.lrange("number", 0, -1));//[5, 10, 2]

        //linsert
        jedis.linsert("number", BinaryClient.LIST_POSITION.AFTER, "5", "6"); //在"5"后面插入"6"
        System.out.println(jedis.lrange("number", 0, -1)); //[5, 6, 10, 2]
        jedis.linsert("number", BinaryClient.LIST_POSITION.BEFORE, "5", "0"); //在"5"前面插入"0"
        System.out.println(jedis.lrange("number", 0, -1)); //[0, 5, 6, 10, 2]
    }

    @Test
    public void testSet() {
        jedis.del("name", "num1", "num2");

        //sadd, smembers, sismember, scard
        jedis.sadd("name", "zhangsan", "lisi", "wangwu", "zhangsan", "zhaoliu");
        System.out.println(jedis.smembers("name"));//[lisi, zhaoliu, zhangsan, wangwu]
        System.out.println(jedis.sismember("name", "wangwu"));//是否包含
        System.out.println(jedis.scard("name"));//获取元素个数

        //srem, srandmember, spop
        jedis.srem("name", "wangwu");//第二个参数为可变数组
        System.out.println(jedis.smembers("name"));//[lisi, zhaoliu, zhangsan]
        System.out.println(jedis.srandmember("name"));//随机值
        System.out.println(jedis.spop("name")); //随机弹出,因为set是无序的

        //sdiff, sinter, sunion
        jedis.sadd("num1", "1", "2", "3", "5", "8");
        jedis.sadd("num2", "3", "4", "8", "9");
        jedis.sdiff("num1", "num2").forEach(System.out::println);//差集 1 2 5
        jedis.sinter("num1", "num2").forEach(System.out::println);//交集 3 8
        jedis.sunion("num1", "num2").forEach(System.out::println);//并集 1 2 3 4 5 8 9
    }

    @Test
    public void testHash() {
        //hset, hget, hmset, hmget, hgetAll, hdel
        jedis.del("hs1", "user");
        jedis.hset("hs1", "id", "12"); //创建一个hs1对象,其id属性值为12
        System.out.println(jedis.hget("hs1", "id"));
        Map<String, String> map = new HashMap<>();
        map.put("name", "zhangsan");
        map.put("age", "21");
        map.put("gender", "male");
        jedis.hmset("user", map);
        System.out.println(jedis.hmget("user", "name", "age")); //[zhangsan, 21]
        System.out.println(jedis.hgetAll("user"));//{gender=male, name=zhangsan, age=21}
        jedis.hdel("user", "age"); //第一个参数为键值,第二个参数为可变数组
        System.out.println(jedis.hgetAll("user"));//{gender=male, name=zhangsan}

        //hlen, hexists
        System.out.println(jedis.hlen("user")); //获取字段的个数
        System.out.println(jedis.hexists("user", "name")); //判断hash对象中是否存在某个属性
        System.out.println(jedis.hexists("user", "age")); //false

        //hkeys, hvals
        System.out.println(jedis.hkeys("user")); //获取所有的属性名
        System.out.println(jedis.hvals("user")); //获取所有的属性值

        //hincrby, hsetnx
        jedis.hincrBy("user","age",1);
        jedis.hsetnx("user", "email", "123@abc.com"); //对象中不存在某个属性就添加
    }

    @Test
    public void testZset() {
        jedis.del("z1");

        //zadd, zrange, zcard, zcount
        jedis.zadd("z1", 90, "优秀");
        jedis.zadd("z1", 80, "良好");
        jedis.zadd("z1", 70, "中等");
        jedis.zadd("z1", 60, "及格");
        System.out.println(jedis.zrange("z1", 0, -1));//[及格, 中等, 良好, 优秀]
        System.out.println(jedis.zrangeWithScores("z1", 0, -1));//得到如下奇怪的结果,求指教-……-
        //[[[-27, -113, -118, -26, -96, -68],60.0], [[-28, -72, -83, -25, -83, -119],70.0], [[-24, -119, -81, -27, -91, -67],80.0], [[-28, -68, -104, -25, -89, -128],90.0]]
        jedis.zrem("z1","中等");
        System.out.println(jedis.zrange("z1", 0, -1)); //[及格, 良好, 优秀]
        System.out.println(jedis.zcard("z1")); //key的基数
        System.out.println(jedis.zcount("z1", 72, 91)); //score 值在 min 和 max 之间的成员的数量。

        //zrank, zscore
        System.out.println(jedis.zrank("z1", "良好")); //获得下标值
        System.out.println(jedis.zscore("z1", "良好")); //获得分数

        //zrevranke, zrevrange
        System.out.println(jedis.zrevrank("z1", "良好"));//1, 逆序获得下标值
        System.out.println(jedis.zrevrange("z1", 0, -1));//[优秀, 良好, 及格], 逆序截取

        //zrevrangebyscore
        System.out.println(jedis.zrevrangeByScore("z1", 81, 74)); //[良好]
    }
}

发现了一些问题:

  • jedis中的hash数据类型好像没有hincrbyfloat这个方法,目前还没找到
  • jedis中的move方法应该是出问题了,测试时得到的结果类似于复制,而不是拷贝
  • 如果直接使用ssh连接,在redis中使用连接时加上--raw可正常显示中文,类似 redis-cli -p 6379 --raw, 在jedis中普通的字符串可以采用改变编码的方法解决,但zrangeWithScores()得到的返回类型为Set<Tuple>, 还不知道如果解决。欢迎告知o( ̄▽ ̄)d

© 著作权归作者所有

共有 人打赏支持
a_xianyu
粉丝 0
博文 36
码字总数 18533
作品 0
哈尔滨
程序员
通过 Jedis API 使用 Sorted Set 排序集合

Jedis 是 Redis 官方首选的 Java 客户端开发包。这篇文章我们将介绍如何使用 Sorted Set 排序集合(zsets)。 Sorted Set 跟一个集合一样,它是不会存在重复的数值,最大的不同是 Sorted Set 中...

红薯 ⋅ 2012/07/12 ⋅ 8

Redis的windows版使用配置

Redis的windows版使用配置: 下载: windows版https://github.com/MSOpenTech/redis/releases(微软开源) 或 https://github.com/dmajkic/redis/downloads 安装: 1、下载压缩包解压到文件夹...

李温凉 ⋅ 2016/12/08 ⋅ 0

Redis快速了解及入门

Redis是什么? 是一个高性能的key-value数据库; Redis快速入门: Redis是绿色版的,直接解压出来就可以用。 下载地址:https://github.com/dmajkic/redis/downloads。 比如,我放在D:devel...

swayer ⋅ 2016/05/10 ⋅ 0

Jedis的类型转换异常深究

1 类型转换异常场景 我们在使用Jedis的时候,经常会出现类型转换异常,有如下情况: - 多线程环境 Jedis是线程不安全的,如果存在多线程使用同一个Jedis,就会出现类型转换异常网上也流传着很...

乒乓狂魔 ⋅ 2016/08/24 ⋅ 16

Jedis2.4以上数据连接池如何回收jedis实例

我刚学习redis的使用。安装的是redis3.0版本。使用java客户端jedis去操作redis.jedis的版本是2.4以上的。当我使用网上找的代码 jedisPool.returnResource(jedis); 进行jedis实例回收时,源码...

图腾Dark ⋅ 2015/09/30 ⋅ 2

Spring集成redis(Spring Data Redis)

转载地址:http://blog.csdn.net/zhu_tianwei/article/details/44923001 Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(...

Mr_zebra ⋅ 06/06 ⋅ 0

jedis Unexpected end of stream. 错误

super超记 ⋅ 2016/09/28 ⋅ 2

Redis实现分布式锁相关注意事项

Redis实现分布式锁相关注意事项 查看了不少关于redis实现分布式锁的文章,无疑要设计一个靠谱的分布式并不太容易,总会出现各种鬼畜的问题;现在就来小述一下,在设计一个分布式锁的过程中,...

小灰灰Blog ⋅ 01/14 ⋅ 0

经典:Redis分布式锁的正确实现方式

分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布...

架构之家 ⋅ 01/14 ⋅ 0

Redis 的 Java 客户端 - Jedis

Jedis 是 Redis 官方首选的 Java 客户端开发包。 实例方法: import redis.clients.jedis.* Jedis jedis = new Jedis("localhost");jedis.set("foo", "bar");String value = jedis.get("foo"......

匿名 ⋅ 2011/04/01 ⋅ 3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

骰子游戏代码开源地址

因为阿里云现在服务器已经停用了,所以上面的配置已经失效。 服务端开源地址:https://gitee.com/goalya/chat4.git 客户端开源地址:https://gitee.com/goalya/client4.git 具体运行界面请参考...

算法之名 ⋅ 38分钟前 ⋅ 0

设计模式--装饰者模式

装饰者模式 定义 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 通用类图 意图 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比...

gaob2001 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部