7.Jedis

1、什么是Jedis ?

​ 它是 Redis 官方推荐的 java连接开发工具, 使用Java 操作Redis 中间件。如果你要使用Java操作Redis,那么一定要对Jedis 十分的熟悉。

2、使用Jedis

2.1 、Maven导入对应的依赖

<dependencies>
  	<!-- 导入jedis的包 -->
    <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>3.3.0</version>
    </dependency>
		
    
    <!-- json选择1:导入fastjson的包 -->
    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.62</version>
    </dependency>

    
  	<!-- json选择2:导入jackson的包 -->
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.11.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.11.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.11.0</version>
    </dependency>
    
    <!-- json选择3:导入gson包 -->
    <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.5</version>
    </dependency>
</dependencies>

2.2 、编码测试

连接数据库

操作命令

断开连接

import redis.clients.jedis.Jedis;

public class testPing {
  	//开启本地redis服务器,测试是否ping通
    public static void main(String[] args) {
        // 1、new Jedis 对象
        Jedis jedis = new Jedis("127.0.0.1", 6379);
      	// 2、测试ping方法,若输出pong,代表成功
        System.out.println(jedis.ping());  
    }
}

/*
 *	此处若不是连接本地redis,而是连接服务器则可直接输入服务器IP(公有)地址。 
 *  Jedis jedis = new Jedis("服务器IP(公有)", 6379);
 *  
 *  若阿里云连接不上,则需要:
 *  第一步:先去阿里云服务器添加安全组规则放行Jedis对应的端口
    firewall-cmd --permanent --zone=public --add-port=6379/tcp
    firewall-cmd --reload
	firewall-cmd --zone=public --query-port=6379/tcp

 *  第二步:通过vim redis.conf命令进入,将# bind 127.0.0.1注释掉,protected-mode no关闭保护模式
 *  第三步:redis重启
 */

2.3、常用的API

import redis.clients.jedis.Jedis;

import java.util.Set;

public class TestKey {

    public static void main(String[] args) {

        Jedis jedis = new Jedis("127.0.0.1", 6379);

        System.out.println("清空数据:"+jedis.flushDB());
        System.out.println("判断某个键是否存在:"+jedis.exists("username"));

        System.out.println("新增键值对:"+jedis.set("username", "zhangsan"));
        System.out.println("新增键值对:"+jedis.set("password", "123"));

        System.out.println("系统中所有键如下:");
        Set<String> keys = jedis.keys("*");
        System.out.println(keys);

        System.out.println("删除键password:"+jedis.del("password"));
        System.out.println("判断password键是否存在:"+jedis.exists("password"));
        System.out.println("查看键username所存储的值的类型:"+jedis.type("username"));

        System.out.println("随机返回键空间的一个:"+jedis.randomKey());
        System.out.println("重命名key:"+jedis.rename("username", "name"));
        System.out.println("取出改名后的name键的值:"+jedis.get("name"));

        // 切换数据库
        System.out.println("按索引切换数据库:"+jedis.select(0));
        System.out.println("删除当前选择数据库中的所有key:"+jedis.flushDB());

        System.out.println("返回当前数据库中的key的数目:"+jedis.dbSize());
        System.out.println("删除所有数据库中的所有key:"+jedis.flushAll());

    }

}
// 输出结果
清空数据:OK
判断某个键是否存在:false
新增键值对:OK
新增键值对:OK
系统中所有键如下:
[password, username]
删除键password:1
判断password键是否存在:false
查看键username所存储的值的类型:string
随机返回键空间的一个:username
重命名key:OK
取出改名后的name键的值:zhangsan
按索引切换数据库:OK
删除当前选择数据库中的所有key:OK
返回当前数据库中的key的数目:0
删除所有数据库中的所有key:OK
String
import redis.clients.jedis.Jedis;

/**
 * 测试字符串命令操作
 */
public class TestString {

    public static void main(String[] args) {

        Jedis jedis = new Jedis("127.0.0.1", 6379);

        jedis.flushDB();
        System.out.println("========增加数据=========");
        System.out.println(jedis.set("k1", "v1"));
        System.out.println(jedis.set("k2", "v2"));
        System.out.println(jedis.set("k3", "v3"));

        System.out.println("删除键k2:"+jedis.del("k2"));
        System.out.println("获取键k2:"+jedis.get("k2"));

        System.out.println("修改k1:"+jedis.set("k1", "v111"));
        System.out.println("获取k1的值:"+jedis.get("k1"));

        System.out.println("在k3的value值后追加:"+jedis.append("k3", "end"));
        System.out.println("获取k3的值:"+jedis.get("k3"));

        System.out.println("========增加多个键值对========");
        System.out.println(jedis.mset("key1", "aaa", "key2", "bbb", "key3", "ccc"));
        System.out.println(jedis.mget("key1", "key2", "key3"));
        System.out.println(jedis.mget("key1", "key2", "key3", "key4"));
        System.out.println(jedis.del("key1", "key2"));
        System.out.println(jedis.mget("key1", "key2", "key3"));

        jedis.flushDB();
        System.out.println("========新增键值对,不存在再插入,存在则插入不成功=========");
        System.out.println(jedis.setnx("k1", "v1"));
        System.out.println(jedis.setnx("k2", "v2"));
        System.out.println(jedis.setnx("k2", "v2-new"));
        System.out.println(jedis.get("k1"));
        System.out.println(jedis.get("k2"));

        System.out.println("=========新增键值对并设置有效时间==========");
        System.out.println(jedis.setex("k3", 2, "v3"));
        System.out.println(jedis.get("k3"));
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(jedis.get("k3"));

        System.out.println("==========获取原值,并更新为新值==========");
        System.out.println(jedis.getSet("k2", "v2getSet"));
        System.out.println(jedis.get("k2"));

        System.out.println("获得k2的值的字符串:"+jedis.getrange("k2", 2, 4));
    }

}
// 输出结果
========增加数据=========
OK
OK
OK
删除键k2:1
获取键k2:null
修改k1:OK
获取k1的值:v111
在k3后面加入值:5
获取k3的值:v3end
========增加多个键值对========
OK
[aaa, bbb, ccc]
[aaa, bbb, ccc, null]
2
[null, null, ccc]
========新增键值对,防止覆盖原先值==========
1
1
0
v1
v2
=========新增键值对并设置有效时间==========
OK
v3
null
==========获取原值,更新为新值==========
v2
v2getSet
获得k2的值的字符串:get
List
/**
 * 测试List命令操作
 */
public class TestList {

    public static void main(String[] args) {

        Jedis jedis = new Jedis("127.0.0.1", 6379);

        jedis.flushDB();
        System.out.println("=========增加一个list=========");
        jedis.lpush("collections", "ArrayList","LinkedList","Vector","HashMap","HashSet");
        jedis.lpush("collections", "TreeSet");
        jedis.lpush("collections", "TreeMap");
        jedis.lpush("collections", "HashMap");

        //第一个参数:集合名  第二个参数:起始位置下标  第二个参数:终止位置下标,-1代表截取到最后
        System.out.println("collections的所有元素:"+jedis.lrange("collections", 0, -1));
        System.out.println("collections的0-3区间的元素:"+jedis.lrange("collections", 0, 3));

        System.out.println("=========lrem 删除指定元素并指定个数==========");
        //第一个参数:删除指定列表 第二个参数:删除的个数(有重复时),后添加进去的值先被删,类似于出栈
        System.out.println("删除指定元素个数:"+jedis.lrem("collections", 2, "HashMap"));
        System.out.println("collections的所有元素:"+jedis.lrange("collections", 0, -1));

        System.out.println("=========ltrim 截取指定区间的元素==========");
        System.out.println("截取下标0-3区间之间的元素:"+jedis.ltrim("collections", 0, 3));
        System.out.println("collections的所有元素:"+jedis.lrange("collections", 0, -1));

        System.out.println("=========lpop 出栈(左端)==========");
        System.out.println("collections列表出栈(左端):"+jedis.lpop("collections"));
        System.out.println("collections的所有元素:"+jedis.lrange("collections", 0, -1));

        System.out.println("=========rpush 添加(右端)==========");
        System.out.println("collections列表添加元素(右端):"+jedis.rpush("collections","xxx"));
        System.out.println("collections的所有元素:"+jedis.lrange("collections", 0, -1));

        System.out.println("=========rpop 出栈(右端)==========");
        System.out.println("collections列表出栈(右端):"+jedis.rpop("collections"));
        System.out.println("collections的所有元素:"+jedis.lrange("collections", 0, -1));

        System.out.println("=========lpush 添加(左端)==========");
        System.out.println("collections列表添加元素(左端):"+jedis.lpush("collections","xxx"));
        System.out.println("collections的所有元素:"+jedis.lrange("collections", 0, -1));

        System.out.println("=========lset 修改指定下标的元素=========");
        System.out.println("collections修改指定下标的元素:"+jedis.lset("collections", 1, "AAA"));
        System.out.println("collections的所有元素:"+jedis.lrange("collections", 0, -1));

        System.out.println("========================");
        System.out.println("collections的长度:"+jedis.llen("collections"));
        System.out.println("collections获取指定下标的元素:"+jedis.lindex("collections", 2));

        System.out.println("========================");
        jedis.flushDB();

        jedis.rpush("sortList","3","6","4","8","7");
        System.out.println("sortList排序前:"+jedis.lrange("sortList", 0, -1));
        System.out.println(jedis.sort("sortList"));
        System.out.println("sortList排序后:"+jedis.lrange("sortList", 0, -1));
    }

}

// 输出结果
=========增加一个list=========
collections的所有元素:[HashMap, TreeMap, TreeSet, HashSet, HashMap, Vector, LinkedList, ArrayList]
collections的0-3区间的元素:[HashMap, TreeMap, TreeSet, HashSet]
=========lrem 删除指定元素并指定个数==========
删除指定元素个数:2
collections的所有元素:[TreeMap, TreeSet, HashSet, Vector, LinkedList, ArrayList]
=========ltrim 截取指定区间的元素==========
截取下标0-3区间之间的元素:OK
collections的所有元素:[TreeMap, TreeSet, HashSet, Vector]
=========lpop 出栈(左端)==========
collections列表出栈(左端):TreeMap
collections的所有元素:[TreeSet, HashSet, Vector]
=========rpush 添加(右端)==========
collections列表添加元素(右端):4
collections的所有元素:[TreeSet, HashSet, Vector, xxx]
=========rpop 出栈(右端)==========
collections列表出栈(右端):xxx
collections的所有元素:[TreeSet, HashSet, Vector]
=========lpush 添加(左端)==========
collections列表添加元素(左端):4
collections的所有元素:[xxx, TreeSet, HashSet, Vector]
=========lset 修改指定下标的元素=========
collections修改指定下标的元素:OK
collections的所有元素:[xxx, AAA, HashSet, Vector]
========================
collections的长度:4
collections获取指定下标的元素:HashSet
========================
sortList排序前:[3, 6, 4, 8, 7]
[3, 4, 6, 7, 8]
sortList排序后:[3, 6, 4, 8, 7]
Set
import redis.clients.jedis.Jedis;

/**
 * 测试Set命令操作
 */
public class TestSet {

    public static void main(String[] args) {

        Jedis jedis = new Jedis("127.0.0.1", 6379);
        jedis.flushDB();

        System.out.println("=========向集合中添加元素(不重复)=========");
        System.out.println(jedis.sadd("myset", "s1","s2","s5","s0","s8","s3","s4"));
        System.out.println(jedis.sadd("myset", "s6"));
        System.out.println(jedis.sadd("myset", "s6"));
        System.out.println("查看set集合中所有元素:"+jedis.smembers("myset"));

        System.out.println("===========删除元素============");
        System.out.println("删除一个元素:"+jedis.srem("myset", "s0"));
        System.out.println("查看set集合中所有元素:"+jedis.smembers("myset"));

        System.out.println("删除两个元素:"+jedis.srem("myset", "s3","s5"));
        System.out.println("查看set集合中所有元素:"+jedis.smembers("myset"));

        System.out.println("随机移除元素:"+jedis.spop("myset"));
        System.out.println("查看set集合中所有元素:"+jedis.smembers("myset"));

        System.out.println("=====================");
        System.out.println("集合set中元素的个数:"+jedis.scard("myset"));
        System.out.println("查看指定元素是否在myset中:"+jedis.sismember("myset", "s8"));
        System.out.println("查看指定元素是否在myset中:"+jedis.sismember("myset", "s5"));

        System.out.println("=====================");
        System.out.println(jedis.sadd("myset1", "a","b","d","e","c","f"));
        System.out.println(jedis.sadd("myset2", "c","f","h","d","k"));
        System.out.println("将myset1集合中指定元素移入myset3:"+jedis.smove("myset1", "myset3", "a"));
        System.out.println("将myset2集合中指定元素移入myset3:"+jedis.smove("myset2", "myset3", "f"));

        System.out.println("查看myset1集合中所有元素:"+jedis.smembers("myset1"));
        System.out.println("查看myset2集合中所有元素:"+jedis.smembers("myset2"));
        System.out.println("查看myset3集合中所有元素:"+jedis.smembers("myset3"));

        System.out.println("==========集合运算===========");
        System.out.println("myset1和myset2的交集:"+jedis.sinter("myset1","myset2"));
        System.out.println("myset1和myset2的并集:"+jedis.sunion("myset1","myset2"));
        System.out.println("myset1和myset2的差集:"+jedis.sdiff("myset1","myset2"));

        System.out.println("===========将并集保存到新集合中============");
        jedis.sinterstore("newSet", "myset1","myset2");
        System.out.println("查看newSet集合中所有元素:"+jedis.smembers("newSet"));
    }

}
// 输出结果
=========向集合中添加元素(不重复)=========
7
1
0
查看set集合中所有元素:[s5, s3, s4, s8, s2, s6, s1, s0]
===========删除元素============
删除一个元素:1
查看set集合中所有元素:[s4, s8, s2, s6, s1, s5, s3]
删除两个元素:2
查看set集合中所有元素:[s6, s1, s2, s8, s4]
随机移除元素:s2
查看set集合中所有元素:[s1, s6, s8, s4]
=====================
集合set中元素的个数:4
查看指定元素是否在myset中:true
查看指定元素是否在myset中:false
=====================
6
5
将myset1集合中指定元素移入myset3:1
将myset2集合中指定元素移入myset3:1
查看myset1集合中所有元素:[b, c, e, f, d]
查看myset2集合中所有元素:[d, h, c, k]
查看myset3集合中所有元素:[f, a]
==========集合运算===========
myset1和myset2的交集:[d, c]
myset1和myset2的并集:[c, e, b, h, f, d, k]
myset1和myset2的差集:[e, f, b]
===========将并集保存到新集合中============
查看newSet集合中所有元素:[c, d]
Hash
import redis.clients.jedis.Jedis;
import java.util.HashMap;
import java.util.Map;

/**
 * 测试Hash命令操作
 */
public class TestHash {

    public static void main(String[] args) {

        Jedis jedis = new Jedis("127.0.0.1",6379);
        jedis.flushDB();

        Map<String,String> map = new HashMap<String,String>();
        map.put("k1", "v1");
        map.put("k2", "v2");
        map.put("k3", "v3");
        map.put("k4", "v4");

        //添加名称为hash的键,将map集合作为值添加
        jedis.hmset("hash", map);
        //添加元素
        jedis.hset("hash", "k5","v5");

        System.out.println("散列hash的所有键值对为:"+jedis.hgetAll("hash"));
        System.out.println("散列hash的所有键为:"+jedis.hkeys("hash"));
        System.out.println("散列hash的所有值为:"+jedis.hvals("hash"));

        System.out.println("将k6保存的值加上一个整数,如果k6不存在则添加k6:"
                +jedis.hincrBy("hash", "k6", 100));
        System.out.println("散列hash的所有键值对为:"+jedis.hgetAll("hash"));
        System.out.println("将k6保存的值加上一个整数,如果k6不存在则添加k6:"
                +jedis.hincrBy("hash", "k6", 300));
        System.out.println("散列hash的所有键值对为:"+jedis.hgetAll("hash"));

        System.out.println("删除一个或多个键值对:"+jedis.hdel("hash", "k2"));
        System.out.println("散列hash的所有键值对为:"+jedis.hgetAll("hash"));

        System.out.println("散列hash中键值对的个数:"+jedis.hlen("hash"));

        System.out.println("判断是否存在指定的键:"+jedis.hexists("hash", "k2"));
        System.out.println("判断是否存在指定的键:"+jedis.hexists("hash", "k3"));

        System.out.println("获取hash中的值:"+jedis.hmget("hash", "k3"));
        System.out.println("获取hash中的值:"+jedis.hmget("hash", "k3","k4"));
    }

}
// 输出结果
散列hash的所有键值对为:{k3=v3, k4=v4, k5=v5, k1=v1, k2=v2}
散列hash的所有键为:[k3, k4, k5, k1, k2]
散列hash的所有值为:[v1, v3, v2, v4, v5]
将k6保存的值加上一个整数,如果k6不存在则添加k6:100
散列hash的所有键值对为:{k3=v3, k4=v4, k5=v5, k6=100, k1=v1, k2=v2}
将k6保存的值加上一个整数,如果k6不存在则添加k6:400
散列hash的所有键值对为:{k3=v3, k4=v4, k5=v5, k6=400, k1=v1, k2=v2}
删除一个或多个键值对:1
散列hash的所有键值对为:{k3=v3, k4=v4, k5=v5, k6=400, k1=v1}
散列hash中键值对的个数:5
判断是否存在指定的键:false
判断是否存在指定的键:true
获取hash中的值:[v3]
获取hash中的值:[v3, v4]
Zset
import redis.clients.jedis.Jedis;

/**
 * 测试Zset命令操作
 */
public class TestZset {

    public static void main(String[] args) {

        Jedis jedis = new Jedis("127.0.0.1", 6379);

        jedis.flushDB();
        jedis.zadd("myzset", 1, "one");
        jedis.zadd("myzset", 2, "two");
        jedis.zadd("myzset", 3, "three");
        System.out.println(jedis.zrange("myzset", 0, -1));
        System.out.println(jedis.zrangeWithScores("myzset", 0, -1));


        jedis.flushDB();
        jedis.zadd("salary", 2000, "lisi");
        jedis.zadd("salary", 3000, "zs");
        jedis.zadd("salary", 1500, "wanger");
        System.out.println("按照score字段值排序:"+jedis.zrangeByScore("salary", 1000, 3500));
        System.out.println("按照score字段值逆序:"+jedis.zrevrangeByScore("salary", 3500, 1000));

        System.out.println("有序集合中元素的个数:"+jedis.zcard("salary"));
        System.out.println("移除:"+jedis.zrem("salary", "lisi"));
        System.out.println("有序集合中元素的个数:"+jedis.zcard("salary"));
        System.out.println("集合中的所有元素:"+jedis.zrange("salary", 0, -1));
        System.out.println("获取集合中指定区间的元素个数:"+jedis.zcount("salary", 1500, 2500));

    }

}
// 输出结果
[one, two, three]
[[one,1.0], [two,2.0], [three,3.0]]
按照score字段值排序:[wanger, lisi, zs]
按照score字段值逆序:[zs, lisi, wanger]
有序集合中元素的个数:3
移除:1
有序集合中元素的个数:2
集合中的所有元素:[wanger, zs]
获取集合中指定区间的元素个数:1

2.4、事务

正常执行
import com.alibaba.fastjson.JSONObject;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;

/**
 * 测试Jedis进行事务管理
 */
public class TestTrans {

    public static void main(String[] args) {

        //创建Jedis对象
        Jedis jedis = new Jedis("106.14.159.179", 6379);
        //测试连接
        System.out.println(jedis.ping());

        //创建json对象
        JSONObject obj = new JSONObject();
        //给json对象存储值
        obj.put("hello", "world");
        obj.put("name", "zhangsan");
        obj.put("age", "10");
        String str = obj.toJSONString();

        //开启事务
        Transaction multi = jedis.multi();
        try {
            //命令入队
            multi.set("user1", str);
            multi.set("user2", str);

            //执行事务
            multi.exec();
        } catch (Exception e) {
            //放弃事务
            multi.discard();
            e.printStackTrace();
        } finally {
            //输出信息
            System.out.println(jedis.get("user1"));
            System.out.println(jedis.get("user2"));
            //关闭连接
            jedis.close();
        }
    }

}
// 运行结果
PONG
{"name":"zhangsan","hello":"world","age":"10"}
{"name":"zhangsan","hello":"world","age":"10"}
出现异常
import com.alibaba.fastjson.JSONObject;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;

/**
 * 测试Jedis进行事务管理
 */
public class TestTrans {

    public static void main(String[] args) {

        //创建Jedis对象
        Jedis jedis = new Jedis("106.14.159.179", 6379);
        //测试连接
        System.out.println(jedis.ping());

        jedis.flushDB();

        //创建json对象
        JSONObject obj = new JSONObject();
        //给json对象存储值
        obj.put("hello", "world");
        obj.put("name", "zhangsan");
        obj.put("age", "10");
        String str = obj.toJSONString();

        //开启事务
        Transaction multi = jedis.multi();
        try {
            //命令入队
            multi.set("user1", str);
            multi.set("user2", str);

            //异常代码块,抛出异常,事务执行失败
            int i = 10/0;

            //执行事务
            multi.exec();
        } catch (Exception e) {
            //放弃事务
            multi.discard();
            e.printStackTrace();
        } finally {
            //输出信息
            System.out.println(jedis.get("user1"));
            System.out.println(jedis.get("user2"));
            //关闭连接
            jedis.close();
        }
    }

}
// 运行结果
PONG
java.lang.ArithmeticException: / by zero
	at com.igeek.test.TestTrans.main(TestTrans.java:37)
null
null
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

what's your name.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值