Redis的各种语言客户端列表,请参见https:/ / redis.io/clients。其中Java客户端在github上start最高的是 Jedis和Redisson。Jedis提供了完整Redis命令,而Redisson有更多分布式的容器实现。

image.png虚拟机
image.png
image.png

Jedis

引入依赖

  1. <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
  2. <dependency>
  3. <groupId>redis.clients</groupId>
  4. <artifactId>jedis</artifactId>
  5. <version>3.3.0</version>
  6. </dependency>

image.png

  1. public static void main(String[] args) {
  2. //参数host地址,端口号
  3. Jedis jedis=new Jedis("192.168.43.251",6379);
  4. jedis.auth("123456");
  5. jedis.set("jedis","hello jedis");
  6. System.out.println(jedis.get("jedis"));
  7. //关闭
  8. jedis.close();
  9. }

运行成功后
image.png

常用命令测试

import redis.clients.jedis.Jedis;

public class JedisTest {
    public static void main(String[] args) throws InterruptedException {
        //参数host地址,端口号
        Jedis jedis=new Jedis("192.168.43.251",6379);
        jedis.auth("123456");
        jedis.set("jedis","hello jedis");
        System.out.println(jedis.get("jedis"));

        //常用命令
        System.out.println(jedis.exists("jedis"));
        //设置存活时间100s
        jedis.expire("jedis",100);
        //睡眠1s
        Thread.sleep(1000);
        System.out.println(jedis.ttl("jedis"));
        //setnx重要命令
        jedis.setnx("jedis","hello111");
        System.out.println(jedis.get("jedis"));
        //关闭
        jedis.close();
    }
}

image.png

import redis.clients.jedis.Jedis;

import java.util.List;
import java.util.Set;

public class JedisTest {
    public static void main(String[] args) throws InterruptedException {
        //参数host地址,端口号
        Jedis jedis=new Jedis("192.168.43.251",6379);
        jedis.auth("123456");

        //键值命令
        Set set=jedis.keys("*");
        System.out.println(set);

        //非字符串结构的命令
        jedis.lpush("list1","cy","klxh","ggp");
        List list=jedis.lrange("list1",0,-1);
        System.out.println(list);
        //关闭
        jedis.close();
    }
}

image.png
image.png

import redis.clients.jedis.Jedis;
import redis.clients.jedis.SortingParams;

import java.util.List;
import java.util.Set;

public class JedisTest {
    public static void main(String[] args) throws InterruptedException {
        //参数host地址,端口号
        Jedis jedis=new Jedis("192.168.43.251",6379);
        jedis.auth("123456");

        List list=jedis.lrange("list1",0,-1);
        System.out.println(list);
        //排序,sort+key 默认从小到大排序,可以设置排序方式(alpha,按照字母排序)
        SortingParams params=new SortingParams();
        System.out.println(jedis.sort("list1",params.alpha()));

        //关闭
        jedis.close();
    }
}

image.png

管道测试

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Pipeline;

/**
 * 管道测试类
 */
public class JedisPipeTest {
    public static void main(String[] args) {
        Jedis jedis=new Jedis("192.168.43.251",6379);
        jedis.auth("123456");

        //初始化为数值时,仍传输字符串类型
        jedis.setnx("pipe","10");
        //使用管道
        Pipeline pipeline= jedis.pipelined();
        for (int i=0;i<10;i++){
            pipeline.incr("pipe");
        }
        //统一提交的命令
        pipeline.sync();

        System.out.println(jedis.get("pipe"));
        jedis.close();
    }
}

image.png
image.png

事务测试

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;

import java.util.List;

/**
 * 事务测试类
 */
public class JedisTransTest {
    public static void main(String[] args) {
        Jedis jedis=new Jedis("192.168.43.251",6379);
        jedis.auth("123456");

        List list1=jedis.mget("cy","klxh");
        System.out.println(list1);
        //jedis.watch("cy");jedis.watch("klxh");事务监控

        //希望cy转5元给klxh
        //开启事务
        Transaction transaction= jedis.multi();
        transaction.decrBy("cy",5);
        transaction.incrBy("klxh",5);
        //取消执行 transaction.discard();
        transaction.exec();

        list1=jedis.mget("cy","klxh");
        System.out.println(list1);

        jedis.close();
    }
}

image.png
image.png

JedisPool

Jedis对象并不是线程安全的。为了避免每次使用Jedis对象时都需要重新构建,Jedis提供了JedisPool。JedisPool是基于Commons Pool 2实现的一个线程安全的连接池。

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * 连接池测试类
 */
public class JedisPoolTest {
    public static void main(String[] args) {
        //连接池的配置
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(10);//最大连接数
        //连接池的创建
        JedisPool pool = new JedisPool(config, "192.168.43.251", 6379);
        Jedis jedis = null;

        try {
            //在连接池中拿到一个连接
            jedis = pool.getResource();
            jedis.auth("123456");
            jedis.set("cy","100");
            System.out.println(jedis.get("cy"));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //还回连接池
            if (jedis != null) {
                jedis.close();
            }
        }
        pool.close();

    }
}

image.png