Redis-Jedis 通过Java程序来操纵Redis数据库(五大数据类型方法的测试!事务的测试)

文章目录

  • 通过Java程序来操纵Redis数据库
    • 什么是Jedis?
    • Jedis的使用
      • 1、首先我们要创建一个普通的maven项目
      • 2、导入Jedis的包
      • 3、测试连接
      • 4、关于Redis-key基本方法的使用
    • 测试五大数据类型的使用
      • 1.String
      • 2.List
      • 3.Set
      • 4.Hash
      • 5.Zset
    • 事务

通过Java程序来操纵Redis数据库

终于到了用我们的Java程序来操纵Redis数据库的环节啦~还是程序写着舒坦

什么是Jedis?

它是官方推荐的Java连接开发工具!使用Java操纵Redis的中间件!说白了就是一个包,我们导入程序就可以使用了~

Jedis的使用

那么到底怎样去使用它呢?别急慢慢来~

1、首先我们要创建一个普通的maven项目

Redis-Jedis 通过Java程序来操纵Redis数据库(五大数据类型方法的测试!事务的测试)_第1张图片

2、导入Jedis的包

另外,json的包我们也可能会用得到,也一起导进来!

<dependencies>
    
    <dependency>
        <groupId>redis.clientsgroupId>
        <artifactId>jedisartifactId>
        <version>3.2.0version>
    dependency>
    
    
    <dependency>
        <groupId>com.alibabagroupId>
        <artifactId>fastjsonartifactId>
        <version>1.2.62version>
    dependency>
dependencies>

3、测试连接

注意:我这里用的是windows系统连接本地的服务,就得在windows中也装上redis,并启动服务,才可连接成功!

package com.gang;

/*
Description:测试连接
Author:32259
Time:2020四月2020/4/316:15
*/

import redis.clients.jedis.Jedis;

public class TestPing {

    public static void main(String[] args) {
    	//new Jedis对象即可
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        //jedis所有的方法都是我之前博客里写的那些命令!只不过在这里成为了方法
        System.out.println(jedis.ping());
    }
}

查看测试结果:连接成功!
Redis-Jedis 通过Java程序来操纵Redis数据库(五大数据类型方法的测试!事务的测试)_第2张图片

下面是一些基本方法的使用测试!对应我以前博客中redis的命令,这里只不过变成了方法而已!

4、关于Redis-key基本方法的使用

package com.gang;

/*
Description:测试普通键key
Author:32259
Time:2020四月2020/4/316:40
*/

import redis.clients.jedis.Jedis;

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("新增<'username','fanmenggang'>的键值对:"+jedis.set("username","fanmenggang"));
        System.out.println("新增<'password','123456'>的键值对:"+jedis.set("password","123456"));
        System.out.println("查看系统中所有的键:"+jedis.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("随机返回key中的一个:"+jedis.randomKey());
        System.out.println("重命名key:"+jedis.rename("username","root"));
        System.out.println("取出改名后root键的值:"+jedis.get("root"));
        System.out.println("切换到2号数据库:"+jedis.select(2));
        System.out.println("查看2号数据库中的所有键(当然里面没存东西):"+jedis.keys("*"));
        System.out.println("新增<'username','gangzi'>的键值对:"+jedis.set("username","gangzi"));
        System.out.println("切换回0号数据库:"+jedis.select(0));
        System.out.println("查看0号数据库中的所有键:"+jedis.keys("*"));
        System.out.println("删除当前数据库中的所有key:"+jedis.flushDB());
        System.out.println("返回当前数据库的大小(key的数目):"+jedis.dbSize());
        System.out.println("清空所有的数据库:"+jedis.flushAll());
        System.out.println("查看2号数据库中还有没有username这个键:"+jedis.keys("*"));
    }
}

结果:
Redis-Jedis 通过Java程序来操纵Redis数据库(五大数据类型方法的测试!事务的测试)_第3张图片

测试五大数据类型的使用

1.String

package com.gang;

/*
Description:测试String类型
Author:32259
Time:2020四月2020/4/317:22
*/

import redis.clients.jedis.Jedis;

import java.util.concurrent.TimeUnit;

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","v1changed"));
        System.out.println("获取k1的值:"+jedis.get("k1"));
        System.out.println("在k3后面拼接值:"+jedis.append("k3","End"));
        System.out.println("获取k3的值:"+jedis.get("k3"));
        System.out.println("增加多个键值对:"+jedis.mset("key1","value1","key2","value2"));
        System.out.println("获取多个键的值:"+jedis.mget("k1","k2","key1","key2"));
        System.out.println("删除多个键:"+jedis.del("k1","key1"));

        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","v8"));
        System.out.println(jedis.get("k1"));
        System.out.println(jedis.get("k2"));

        System.out.println("==========新增键值对并设置有效时间=========");
        System.out.println(jedis.setex("k3",5,"v3"));
        System.out.println(jedis.get("k3"));
        try {
            //休眠6秒
            TimeUnit.SECONDS.sleep(6);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(jedis.get("k3"));

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

        System.out.println("截取指定下标的字符串:"+jedis.getrange("k2",3,6));
    }
}

结果:
Redis-Jedis 通过Java程序来操纵Redis数据库(五大数据类型方法的测试!事务的测试)_第4张图片

2.List

package com.gang;

/*
Description:测试List
Author:32259
Time:2020四月2020/4/319:43
*/

import redis.clients.jedis.Jedis;

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","Vector","Stack","HashMap");
        jedis.lpush("collections","HashSet");
        jedis.lpush("collections","TreeSet");//从左边往进加
        jedis.rpush("collections","HashMap");//从右边往进加
        jedis.lpush("collections","TreeMap");
        System.out.println("collections中的内容:"+jedis.lrange("collections",0,-1));//-1代表倒数第一个
        System.out.println("collections中0到3区间的内容:"+jedis.lrange("collections",0,3));
        System.out.println("============================");
        //删除列表指定的值,第二个参数为删除的个数(有重复时)!后add进去的值先被删掉,类似于出栈!
        System.out.println("删除指定个数的元素:"+jedis.lrem("collections",2,"HashMap"));
        System.out.println("collections中的内容:"+jedis.lrange("collections",0,-1));
        System.out.println("删除下标0-3区间之外的元素:"+jedis.ltrim("collections",0,3));
        System.out.println("collections中的内容:"+jedis.lrange("collections",0,-1));
        System.out.println("collections列表出栈(左):"+jedis.lpop("collections"));
        System.out.println("collections中的内容:"+jedis.lrange("collections",0,-1));
        System.out.println("collections列表出栈(右):"+jedis.rpop("collections"));
        System.out.println("collections中的内容:"+jedis.lrange("collections",0,-1));
        System.out.println("修改指定下标1的内容:"+jedis.lset("collections",1,"hahaaha"));
        System.out.println("collections中的内容:"+jedis.lrange("collections",0,-1));
        System.out.println("============================");
        System.out.println("collections的长度:"+jedis.llen("collections"));
        System.out.println("获取指定下标1的元素:"+jedis.lindex("collections",1));
        System.out.println("==============排序==============");
        jedis.lpush("sortedList","5","6","4","3","9","1");
        System.out.println("排序前:"+jedis.lrange("sortedList",0,-1));
        System.out.println("排序后:"+jedis.sort("sortedList"));


    }
}

结果:
Redis-Jedis 通过Java程序来操纵Redis数据库(五大数据类型方法的测试!事务的测试)_第5张图片

3.Set

package com.gang;

/*
Description:测试Set
Author:32259
Time:2020四月2020/4/320:13
*/

import redis.clients.jedis.Jedis;

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("set","e1","e3","e2","e5","e7","e4","e0","e8"));
        System.out.println(jedis.sadd("set","e6"));
        System.out.println(jedis.sadd("set","e6"));
        System.out.println("set集合中所有的元素为:"+jedis.smembers("set"));
        System.out.println("删除一个指定元素e0:"+jedis.srem("set","e0"));
        System.out.println("set集合中所有的元素为:"+jedis.smembers("set"));
        System.out.println("删除多个指定元素e7,e5:"+jedis.srem("set","e7","e5"));
        System.out.println("set集合中所有的元素为:"+jedis.smembers("set"));
        System.out.println("随机的移除集合中的一个元素:"+jedis.spop("set"));
        System.out.println("随机的移除集合中的一个元素:"+jedis.spop("set"));
        System.out.println("set集合中所有的元素为:"+jedis.smembers("set"));
        System.out.println("set集合中的元素个数:"+jedis.scard("set"));
        System.out.println("e1是否在set集合中:"+jedis.sismember("set","e1"));
        System.out.println("========================================================");
        System.out.println(jedis.sadd("set1","e1","e3","e2","e5","e7","e4","e6"));
        System.out.println(jedis.sadd("set2","e1","e3","e0","e5","e8","e4","e6"));
        System.out.println("将set1中的元素删掉e1并将e1存入set3中:"+jedis.smove("set1","set3","e1"));
        System.out.println("将set1中的元素删掉e5并将e5存入set3中:"+jedis.smove("set1","set3","e5"));
        System.out.println("set1集合中所有的元素为:"+jedis.smembers("set1"));
        System.out.println("set3集合中所有的元素为:"+jedis.smembers("set3"));
        System.out.println("=====================集合运算=======================");
        System.out.println("set1集合中所有的元素为:"+jedis.smembers("set1"));
        System.out.println("set2集合中所有的元素为:"+jedis.smembers("set2"));
        System.out.println("set1与set2集合的并集:"+jedis.sunion("set1","set2"));
        System.out.println("set1与set2集合的交集:"+jedis.sinter("set1","set2"));
        System.out.println("set1与set2集合的差集:"+jedis.sdiff("set1","set2"));//set1与set2中去掉交集后剩余的元素
        jedis.sinterstore("set4","set1","set2");//求交集并将交集保存在dstkey中
        System.out.println("set4集合中所有的元素为:"+jedis.smembers("set4"));
    }
}

结果:
Redis-Jedis 通过Java程序来操纵Redis数据库(五大数据类型方法的测试!事务的测试)_第6张图片

4.Hash

package com.gang;

/*
Description:测试Hash
Author:32259
Time:2020四月2020/4/321:31
*/

import redis.clients.jedis.Jedis;

import java.util.HashMap;

public class TestHash {

    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        jedis.flushDB();
        HashMap<String, String> map = new HashMap<>();
        map.put("k1","v1");
        map.put("k2","v2");
        map.put("k3","v3");
        map.put("k4","v4");


        //添加元素
        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",5));
        System.out.println("散列hash的所有键值对:"+jedis.hgetAll("hash"));
        System.out.println("将k6的保存的值加上一个整数,如果k6不存在则添加k6:"+jedis.hincrBy("hash","k6",5));
        System.out.println("散列hash的所有键值对:"+jedis.hgetAll("hash"));
        System.out.println("删除一个或者多个键值对:"+jedis.hdel("hash","k1","k3"));
        System.out.println("散列hash的所有键值对:"+jedis.hgetAll("hash"));
        System.out.println("散列hash的所有键值对个数:"+jedis.hlen("hash"));
        System.out.println("判断k2是否在hash中:"+jedis.hexists("hash","k2"));
        System.out.println("判断k1是否在hash中:"+jedis.hexists("hash","k1"));
        System.out.println("获取hash中的一个值:"+jedis.hmget("hash","k4"));
        System.out.println("获取hash中的多个值:"+jedis.hmget("hash","k4","k6"));



    }
}

结果:
Redis-Jedis 通过Java程序来操纵Redis数据库(五大数据类型方法的测试!事务的测试)_第7张图片

5.Zset

package com.gang;

/*
Description:测试Zset
Author:32259
Time:2020四月2020/4/321:48
*/

import redis.clients.jedis.Jedis;

public class TestZset {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);

        jedis.flushDB();
        jedis.zadd("myset",1,"one");
        jedis.zadd("myset",2,"two");
        jedis.zadd("myset",3,"three");
        System.out.println("查看全部的值:"+jedis.zrange("myset",0,-1));


        jedis.flushDB();
        jedis.zadd("salsry",2500,"zhangsan");
        jedis.zadd("salsry",500,"lisi");
        jedis.zadd("salsry",5000,"wangwu");
        System.out.println("由高到低排序:"+jedis.zrangeByScore("salsry","-inf","+inf"));
        System.out.println("由高到低排序:"+jedis.zrevrangeByScore("salsry","+inf","-inf"));
        System.out.println("查看全部的值:"+jedis.zrange("salsry",0,-1));
        jedis.zrem("salsry","lisi");
        System.out.println("查看全部的值:"+jedis.zrange("salsry",0,-1));
        System.out.println("查看所有元素的个数:"+jedis.zcard("salsry"));


        jedis.flushDB();
        jedis.zadd("myset",1,"one");
        jedis.zadd("myset",2,"two");
        jedis.zadd("myset",3,"three");
        jedis.zadd("myset",4,"four");

        System.out.println("获取指定区间元素的个数:"+jedis.zcount("myset", 0, 3));


    }
}

结果:
Redis-Jedis 通过Java程序来操纵Redis数据库(五大数据类型方法的测试!事务的测试)_第8张图片

事务

  • 正常运行
package com.gang;

/*
Description:测试事务
Author:32259
Time:2020四月2020/4/322:15
*/

import com.alibaba.fastjson.JSONObject;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;

public class TestTX {

    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name","fanmenggang");
        jsonObject.put("sex","nan");

        //开启事务
        Transaction multi = jedis.multi();
        String s = jsonObject.toJSONString();

        try {
            multi.set("user1",s);
            multi.set("user2","haha");

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

        }


    }
}

结果:
Redis-Jedis 通过Java程序来操纵Redis数据库(五大数据类型方法的测试!事务的测试)_第9张图片

  • 测试原子性,模拟运行时异常,语法错误
package com.gang;

/*
Description:测试事务
Author:32259
Time:2020四月2020/4/322:15
*/

import com.alibaba.fastjson.JSONObject;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;

public class TestTX {

    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name","fanmenggang");
        jsonObject.put("sex","nan");

        //开启事务
        Transaction multi = jedis.multi();
        String s = jsonObject.toJSONString();

        try {
            multi.set("user1",s);
            multi.set("user2","haha");
            multi.incrBy("user2",5);//模拟运行时异常,语法错误,字符串不能进行自增,证明事务不保证原子性
            multi.exec();//执行事务
        }catch (Exception e){
            multi.discard();//放弃事务
            e.printStackTrace();
        }finally {
            System.out.println(jedis.get("user1"));
            System.out.println(jedis.get("user2"));
            jedis.close();//关闭连接

        }


    }
}

结果:
Redis-Jedis 通过Java程序来操纵Redis数据库(五大数据类型方法的测试!事务的测试)_第10张图片

你可能感兴趣的:(Linux)