Redis入门到精通4---(Jedis连接池)

Jedis简介

Jedis是Redis连接java的一个桥梁。
Redis入门到精通4---(Jedis连接池)_第1张图片

Jedis读写Redis数据

helloword(Jedis版)

首先创建一个maven项目,将Jedisjar包引入其中。

 <dependency>
     <groupId>redis.clientsgroupId>
     <artifactId>jedisartifactId>
     <version>2.9.0version>
 dependency>

编写Jedis类:

    public void testJedis() {
        //1.连接Redis
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        //2.操作Redis
        jedis.set("name", "lisi");
        //3,关闭连接
        jedis.close();
    }

运行后查询Redis:
存储成功
在这里插入图片描述

Jedis常规操作演示

Jedis的操作和Redis控制台的命令操作是完全对应的,而在java中操作Redis,数据都会转成java中的数据类型展示。

public class JedisTest {
    @Test
    /**
     * 操作List集合
     */
    public void testList() {
        //1.连接Redis
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        //2.操作Redis
        //添加数据
        jedis.lpush("list1", "a", "b", "c");//添加到表头
        jedis.rpush("list1", "x");//添加到表尾
        //获取数据
        List<String> list1 = jedis.lrange("list1", 0, -1);//从表头取出
        for (String s : list1) {
            System.out.println(s);
        }
        System.out.println("-------------");
        //获取列表长度
        System.out.println(jedis.llen("list1"));
        //3,关闭连接
        jedis.close();
    }

    @Test
    /**
     * 操作Hash集合
     */
    public void testHash() {
        //1.连接Redis
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        //2.操作Redis
        //添加数据
        jedis.hset("hash", "a1", "b1");
        jedis.hset("hash", "a2", "b2");
        jedis.hset("hash", "a3", "b3");
        //获取全部数据
        Map<String, String> hash = jedis.hgetAll("hash");
        System.out.println(hash);
        System.out.println("---------------");
        //获取哈希表中字段的数量
        System.out.println(jedis.hlen("hash"));
        //3,关闭连接
        jedis.close();
    }
}

案例:服务调用次数控制

在这里插入图片描述

案例要求

Redis入门到精通4---(Jedis连接池)_第2张图片

需求分析

在这里插入图片描述

代码实现

import redis.clients.jedis.Jedis;
import redis.clients.jedis.exceptions.JedisDataException;

public class Service {
    private String id;
    private int num;

    public Service(String id, int num) {
        this.id = id;
        this.num = num;
    }

    //控制单元
    public void service() {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        //获取值
        String value = jedis.get("compid:" + id);
        //判断值是否存在
        try {
            if (value == null) {
                //不存在,创建该值
                jedis.setex("compid:" + id, 10, Long.MAX_VALUE - num + "");
            } else {
                //存在,自增,调用业务
                Long val = jedis.incr("compid:" + id);
                business(id, num - (Long.MAX_VALUE - val));
            }
        } catch (JedisDataException e) {
            System.out.println("您的体验次数已经用完,请充值会员!");
            return;
        } finally {
            jedis.close();
        }
    }

    //业务操作
    public void business(String id, Long val) {
        System.out.println(id + "操作次数第" + val + "次");
    }
}

class MyThread extends Thread {
    Service sc;

    public MyThread(String id, int num) {
        sc = new Service(id, num);
    }

    @Override
    public void run() {
        while (true) {
            sc.service();
            try {
                Thread.sleep(300l);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

class main {
    public static void main(String[] args) {
        MyThread mt1 = new MyThread("普通用户", 10);
        MyThread mt2 = new MyThread("高级用户", 30);

        mt1.start();
        mt2.start();
    }
}

Jedis简易工具类开发

创建好工具类在使用中就可以不用每次都创建Jedis了,使用是直接调用工具类即可。

基于连接池获取连接:
Redis入门到精通4---(Jedis连接池)_第3张图片
创建工具类:

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

import java.util.ResourceBundle;

public class RedisUtils {
    //创建Redis连接池
    private static JedisPool jp = null;
    //创建Redis连接池配置
    private static JedisPoolConfig jpc = null;
    private static String host = null;
    private static int port;
    private static int maxTotal;
    private static int maxIdle;

    /**
     * 静态代码块初始化资源
     */
    static {
        //读取配置文件参数值
        ResourceBundle rb = ResourceBundle.getBundle("redis");
        host = rb.getString("redis.host");
        port = Integer.parseInt(rb.getString("redis.port"));
        maxTotal = Integer.parseInt(rb.getString("redis.maxTotal"));
        maxIdle = Integer.parseInt(rb.getString("redis.maxIdle"));
        jpc = new JedisPoolConfig();
        jpc.setMaxTotal(maxTotal);
        jpc.setMaxIdle(maxIdle);
        jp = new JedisPool(jpc, host, port);
    }

    /**
     * 对外访问接口,提供Jedis连接对象,连接从连接池获取
     *
     * @return
     */
    public static Jedis getJedis() {
        return jp.getResource();
    }
}

创建配置文件:

#Redis连接地址
redis.host=127.0.0.1
#Redis连接ID
redis.port=6379
#最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制。
redis.maxTotal=30
#最大等待连接中的数量,设 0 为没有限制
redis.maxIdle=10

可视化客户端

Redis Desktop Manager

你可能感兴趣的:(Redis)