文档章节

Jedis中常见的api

a_xianyu
 a_xianyu
发布于 2017/06/02 20:02
字数 1331
阅读 58
收藏 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
20K
8
Redis快速了解及入门

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

swayer
2016/05/10
97
0
Redis的windows版使用配置

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

李温凉
2016/12/08
4
0
Jedis2.4以上数据连接池如何回收jedis实例

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

图腾Dark
2015/09/30
3.1K
2
Jedis的类型转换异常深究

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

乒乓狂魔
2016/08/24
2.5K
16

没有更多内容

加载失败,请刷新页面

加载更多

如何在Java中生成比特币钱包地址

让我们通过学习比特币(Bitcoin)如何实施该技术的各个方面来工作,好吗?该技术包括以下几个方面: 比特币地址bitcoin address是用来发送和接收比特币的。 交易transaction是比特币从一个地...

geek12345
12分钟前
0
0
面试必备Linux基础知识

学习Linux之前,我们先来简单的认识一下操作系统。 一 从认识操作系统开始 1.1 操作系统简介 我通过以下四点介绍什么操作系统: 操作系统(Operation System,简称OS)是管理计算机硬件与软件...

小小明童鞋
13分钟前
2
0
SpringBoot基础教程3-1-3 Quartz定时任务单点持久化

1 概述 实际项目中,复杂的定时任务都会结合持久化,动态改变定时任务状态,本文将介绍基于Quartz的定时任务单点持久化方式,通过RESTful风格,演示定时任务的CRUD,最后使用Swagger测试。 ...

Mkeeper
29分钟前
3
0
Android入门—文件目录解析

AndroidManifest.xml 是每个android程序中必须的文件,它位于整个项目的根目录。我们每天都在使用这个文件,往里面配置程序运行所必要的组件,权限,以及一些相关信息。但是对于这个文件,我...

haoyuehong
32分钟前
5
0
IDEA中Maven打包时如何跳过测试

方法1:直接使用IDEA提供的方式 Maven命令栏的工具栏有下图中的图标,上面就写着 Skip Tests 按下图标后,如下图,test就不可用了 直接使用package命令即可。 方法2:自己编辑maven命令 进入...

karma123
46分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部