【Redis从入门到放弃系列 七】Jedis的使用

在了解了Redis的基础数据结构以及一些特性和操作指令之后呢,和kafka及ES系列一样,我们不可能用指令去编程和完成业务逻辑,还是需要代码去操作指令的,java也封装了相关的代码,统一叫做Jedis,接下来本篇blog就来了解下Jedis的使用:

  • Jedis简介:简单介绍下Jedis是什么,能干什么
  • Jedis环境搭建:创建相关Java项目,完成第一个Jedis代码编写
  • Jedis操作Redis:Jedis对Redis的一些操作指令
  • Jedis综合案例实现:Jedis实现我们之前提到的综合案例
  • Jedis简易工具类使用:方便后期Jedis和Redis的连接
  • 可视化客户端:可以可视化查看的Redis客户端

接下来就来学习下Jedis的使用,为之后的接口调用打好基础。

Jedis简介

Jedis实际上就是Java语言操作Redis数据的工具,其实我们之前在用JDBC操作Mysql的时候也是一样的,实际上Redis不也是一个非关系型的数据库嘛!
在这里插入图片描述
Jedis有如下的一些优点:轻量,简洁,便于集成和改造;支持连接池;支持pipelining、事务、LUA Scripting、Redis Sentinel、Redis Cluster,但是需要注意,它不支持读写分离,需要自己实现

Jedis环境搭建

首先还是用idea来创建一个Jedis的maven项目,初始化一个Jedis:
在这里插入图片描述
需要maven加载的配置为:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>Jedis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

</project>

Jedis操作Redis

使用如下代码操作Redis,指令与Redis原生指令类似:

String类型

import org.junit.Test;
import redis.clients.jedis.Jedis;

public class JedisTest {
    @Test
    public void testJedis(){
        //连接Redis
        Jedis jedis=new Jedis("127.0.0.1",6379);
        //操作Redis
        jedis.set("name","tml");
        System.out.println(jedis.get("name"));
        //关闭Redis
        jedis.close();
    }
}

可以看到值被打印出来了
在这里插入图片描述

List类型

list操作也很类似,和指令一般无二:

 @Test
    public void testList(){
        //连接Redis
        Jedis jedis=new Jedis("127.0.0.1",6379);
        //操作Redis
        jedis.lpush("faith","tml");
        jedis.lpush("faith","gcy");
        jedis.lpush("faith","love");
        List<String> list = jedis.lrange("faith", 0, -1);
        for (String item:list) {
            System.out.println(item);
        }
        //关闭Redis
        jedis.close();
    }

在这里插入图片描述

Hash类型

 @Test
    public void testHash(){
        //连接Redis
        Jedis jedis=new Jedis("127.0.0.1",6379);
        //操作Redis
        jedis.hset("Hash","tml","1");
        jedis.hset("Hash","gcy","2");
        jedis.hset("Hash","love","3");

        Map<String,String> map = jedis.hgetAll("Hash");

        System.out.println(map);

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

在这里插入图片描述

Set类型

 @Test
    public void testSet(){
        //连接Redis
        Jedis jedis=new Jedis("127.0.0.1",6379);
        //操作Redis
        jedis.sadd("set","tml");
        jedis.sadd("set","gcy");
        jedis.sadd("set","tml");

        Set<String> set = jedis.smembers("set");

        System.out.println(set);

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

在这里插入图片描述

SortedSet类型

 @Test
    public void testSortedSet(){
        //连接Redis
        Jedis jedis=new Jedis("127.0.0.1",6379);
        //操作Redis
        jedis.zadd("sortedSet",100,"china");
        jedis.zadd("sortedSet",99,"aa");
        jedis.zadd("sortedSet",89,"cc");

        Set<Tuple> tset= jedis.zrangeWithScores("sortedSet",0,-1);

            System.out.println(tset);


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

在这里插入图片描述

Jedis综合案例实现

还是我们之前看的按次计时服务案例:
在这里插入图片描述
综合分析如下实现步骤:
在这里插入图片描述
实现代码如下:

import redis.clients.jedis.Jedis;

import redis.clients.jedis.exceptions.JedisException;

//业务服务和管理
public class JedisService {
    private String id;
    private int num;
    public JedisService(String id,int num){
        this.id=id;
        this.num=num;
    }
    public void servie(){
        //连接Redis
        Jedis jedis=new Jedis("127.0.0.1",6379);
       String value= jedis.get("compid"+id);
        try {
        if(value==null){
            jedis.setex("compid"+id,5,Long.MAX_VALUE-num +"");
        }else {

                Long val=jedis.incr("compid"+id);
                business(id,num-(Long.MAX_VALUE-val));
            }

        }
        catch (JedisException e){
            System.out.println("使用已达上限");
            return ;
        }finally {
            //关闭Redis
            jedis.close();
        }


    }
    public void  business(String id,Long val){

        System.out.println("用户"+id+"执行业务操作第"+val+"次");
    }
}
//线程管理服务
class MyThread  extends Thread{
    JedisService jedisService;
    MyThread(String id,int num){
        jedisService =new JedisService(id,num);
    }
    public void run(){
        while (true){
            jedisService.servie();
            try {
                Thread.sleep(300L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

 }
 class main{
     public static void main(String[] args) {
         MyThread myThread=new MyThread("初级用户",10);
         MyThread myThread1=new MyThread("高级用户",30);
         myThread.start();
         myThread1.start();
     }
 }

在这里插入图片描述

Jedis简易工具类使用【Jedis连接池】

手动管理连接比较麻烦,使用类似JDBC的连接池方法:
在这里插入图片描述
代码实现如下:

import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisPools {

    @Test
    public static Jedis testJedisPool(){
        //获得连接池配置对象,设置配置项
        JedisPoolConfig config = new JedisPoolConfig();
        // 最大连接数
        config.setMaxTotal(30);	
        //最大空闲连接数
        config.setMaxIdle(10);
        //获得连接池
        JedisPool jedisPool = new JedisPool(config,"localhost",6379);
        return jedisPool.getResource();

    }
}

更高级的使用方式是配置项放到配置文件,并且把连接池设置为静态资源:
在这里插入图片描述
然后读取连接池

import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;


import java.util.ResourceBundle;

class JedisPools {
    private static JedisPool jedisPool=null;

    static {
        ResourceBundle resourceBundle= ResourceBundle.getBundle("redis");
        JedisPoolConfig config = new JedisPoolConfig();
        String host=resourceBundle.getString("redis.host");
        String port=resourceBundle.getString("redis.port");
        String maxTotal=resourceBundle.getString("redis.maxTotal");
        String maxIdle=resourceBundle.getString("redis.maxIdle");

        config.setMaxTotal(Integer.parseInt(maxTotal));
        config.setMaxIdle(Integer.parseInt(maxIdle));

        jedisPool = new JedisPool(config,host, Integer.parseInt(port));
    }
    @Test
    public static Jedis testJedisPool(){

        return jedisPool.getResource();

    }
}

可视化客户端

使用redis Desktop Manager去查看redis的内容:选择官网下载https://redisdesktop.com/pricing,下载完成后可以看到界面如下所示:

在这里插入图片描述
在这里插入图片描述

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值