使用Jedis连接redis数据库

19 篇文章 2 订阅

一、测试联通

Linux中启动redis服务器
在这里插入图片描述
注意要将redis.conf配置文件中的protected-mode设置为no,同时将bind 127.0.0.1 -::1给注释掉,这样使用使用Jedis才可以从Windows访问Linux启动的redis服务器。

java代码

import redis.clients.jedis.Jedis;

public class RedisTest {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.144.138", 6379);
        System.out.println(jedis.ping("连接redis成功!"));
    }

}

输出结果:
在这里插入图片描述

二、常用API

setgetkeys

    @Test
    public void test1(){
        //set设置key-value
        jedis.set("k1","v1");
        jedis.set("k2","v2");
        jedis.set("k3","v3");

        //get获取key-value
        String k4 = jedis.get("k4");
        System.out.println(k4);

        //keys
        Set<String> keys = jedis.keys("*");
        Iterator<String> iterator = keys.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

输出结果:
在这里插入图片描述

exists:判断是否存在key
ttl:获取key的过期时间

    @Test
    public void test2(){
        //exist判断是否存在key
        System.out.println(jedis.exists("k2"));

        //ttl获取key的过期时间
        System.out.println(jedis.ttl("k2"));
    }

输出结果:
在这里插入图片描述

String数据类型常用API

    @Test
    public void test3(){

        //append:拼接字符串
        jedis.append("k1","redis-append");
        System.out.println(jedis.get("k1"));
        System.out.println("-----------------------------------------");
        
        //mset:一次性设置多对key-value
        jedis.mset("str1","v1","str2","v2","str3","v3");

        //mget:一次性获取多对key-value
        List<String> mget = jedis.mget("str1", "str2", "str3");
        for (String str : mget){
            System.out.println(str);
        }

    }

输出结果:
在这里插入图片描述

List数据类型常用API

    @Test
    public void test4(){

        jedis.lpush("mylist","v1","v2","v3","v4","v5");
        jedis.rpush("mylist1","v1","v2","v3","v4","v5");

        List<String> mylist = jedis.lrange("mylist", 0, -1);
        List<String> mylist1 = jedis.lrange("mylist1", 0, -1);


        for (String str : mylist){
            System.out.println(str);
        }
        System.out.println("-------------------------------");
        for (String str : mylist1){
            System.out.println(str);
        }
    }

输出结果:
在这里插入图片描述

Set数据类型常用API

    @Test
    public void test5(){
        jedis.sadd("set1","v1");
        jedis.sadd("set1","v2");
        jedis.sadd("set1","v3");

        Set<String> set1 = jedis.smembers("set1");
        Iterator<String> iterator = set1.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

        //移除某个集合中的元素
        jedis.srem("set1","v2");

        //获取集合大小
        int size = jedis.smembers("set1").size();
        System.out.println(size);

    }

输出结果:
在这里插入图片描述

Hash数据类型常用API

    @Test
    public void test6(){
        jedis.hset("User","username","张三");
        String hget = jedis.hget("User", "username");
        System.out.println(hget);

        Map<String,String> map = new HashMap<String, String>();
        map.put("name","lisi");
        map.put("email","lisi@qq.com");
        map.put("phone","111222");
        map.put("address","上海");
        jedis.hmset("map",map);
        List<String> hmget = jedis.hmget("map", "address", "phone");
        for (String str : hmget){
            System.out.println(str);
        }
    }

输出结果:
在这里插入图片描述

Zset数据类型常用API

    @Test
    public void test7(){
        jedis.zadd("zset",60,"v1");
        jedis.zadd("zset",40,"v3");
        jedis.zadd("zset",70,"v2");
        jedis.zadd("zset",90,"v4");

        Set<Tuple> zset = jedis.zrangeWithScores("zset", 0, -1);
        Iterator<Tuple> iterator = zset.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

    }

输出结果:
在这里插入图片描述

所有的API操作与redis操作相类似,详细可参考Redis常用操作命令

三、使用Jedis操作事务

提交事务

public class TestTx {

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

        //开启事务
        Transaction transaction = jedis.multi();

        //命令入队
        transaction.set("tx1","111");
        transaction.set("tx2","222");
        transaction.set("tx3","333");

        //提交事务
        transaction.exec();

        List<String> mget = jedis.mget("tx1", "tx2", "tx3");
        for (String s : mget){
            System.out.println(s);
        }

    }
}

事务加锁

public class TestTx {
    public boolean transMethod(){
        Jedis jedis = new Jedis("192.168.144.138", 6379);

        //可用余额
        int balance;

        //欠额
        int debt;

        //实刷额度
        int amtToSubtract = 10;

        //watch监控balance
        jedis.watch("balance");
        balance = Integer.parseInt(jedis.get("balance"));
        debt = Integer.parseInt(jedis.get("debt"));
        if (balance < amtToSubtract){
            jedis.unwatch();    //放弃监控
            System.out.println("数据被修改,本次事务失败");
            return false;
        }else {
            System.out.println("开始执行事务操作");
            Transaction transaction = jedis.multi();
            transaction.decrBy("balance",amtToSubtract);
            transaction.incrBy("debt",amtToSubtract);
            transaction.exec();

            System.out.println("事务执行完成:" + "balance = " + balance + " debt = " + debt);
            return true;
        }
    }

    public static void main(String[] args) {
        TestTx testTx = new TestTx();
        //模拟11次操作
        for (int i = 0; i <= 10; i++){
            boolean transMethod = testTx.transMethod();
            System.out.println(transMethod);
        }
    }
}

输出结果:
在这里插入图片描述

四、Jedis主从复制操作

首先Linux中启动两台redis服务器
在这里插入图片描述

public class MasterSlave {


    public static void main(String[] args) {
        //主机
        Jedis master = new Jedis("192.168.144.138", 6379);

        //从机
        Jedis slave = new Jedis("192.168.144.138", 6380);

        //从机挂载在主机下
        slave.slaveof("192.168.144.138",6379);

        //主机写
        master.set("master","jedis-master");

        //从机读
        System.out.println(slave.get("master"));

    }


}

输出结果:
在这里插入图片描述

五、JedisPool连接池

单例模式获取JedisPool连接池

public class JedisPoolUtil {

    private static volatile JedisPool jedisPool = null;

    //单例模式,私有化构造方法,使得不能new新的对象
    private JedisPoolUtil(){}

    public static JedisPool getJedisPool(){
        if (null == jedisPool){
            synchronized (JedisPoolUtil.class){
                JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
                //控制一个pool可分配多少个Jedis实例
                jedisPoolConfig.setMaxTotal(1000);
                //控制一个pool最多有多少个状态idle空间的Jedis实例
                jedisPoolConfig.setMaxIdle(32);
                //表示当borrow一个Jedis实例时,最大的等待时间,如果超时则报异常
                jedisPoolConfig.setMaxWaitMillis(100*1000);
                //获得一个Jedis实例的时候是否检查连接的可用性(ping())
                jedisPoolConfig.setTestOnBorrow(true);

                jedisPool = new JedisPool(jedisPoolConfig,"192.168.144.138",6379);

            }
        }
        return jedisPool;
    }

    public static void release(Jedis jedis){
        if (null != jedis){
            jedis.close();
        }
    }

}

测试连接池

public class TestJedisPool {

    public static void main(String[] args) {
        JedisPool jedisPool = JedisPoolUtil.getJedisPool();

        Jedis jedis = null;
        try {

            jedis = jedisPool.getResource();
            jedis.set("pool_test","pool");

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JedisPoolUtil.release(jedis);
        }
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值