Redis(二)Jedis 简单使用

Jedis 就是 Java 同 Redis 建立连接的工具。

import org.junit.Test;
import redis.clients.jedis.Jedis;
import java.lang.annotation.Target;

public class jedisTest1 {
    @Test
    public void test1() {
        //连接redis
        Jedis jedis = new Jedis("127.0.0.1", 6379);

        //操作 Jedis
        jedis.set("name", "jia");

        String name=jedis.get("name");
        System.out.println(name);
        //关闭连接
        jedis.close();
    }
}

Jedis读写redis数据

  • 案例:服务调用次数控制
    人工智能领域的语义识别与自动对话将是未来服务业机器人应答呼叫体系中的重要技术,百度自研用户评 价语义识别服务,免费开放给企业试用,同时训练百度自己的模型。现对试用用户的使用行为进行限速, 限制每个用户每分钟最多发起 10 次调用

案例要求
① 设定A、B、C三个用户
② A用户限制10次/分调用,B用户限制30次/分调用,C用户不限制

需求分析
① 设定一个服务方法,用于模拟实际业务调用的服务,内部采用打印模拟调用
② 在业务调用前服务调用控制单元,内部使用 redis 进行控制,参照之前的方案
③ 对调用超限使用异常进行控制,异常处理设定为打印提示信息
④ 主程序启动 3 个线程,分别表示 3 种不同用户的调用

Jedis简易工具类开发
版本一:获取连接,每次连接都创建连接池

package com.jia;

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() {
        //连接redis
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        String value = jedis.get("compid:" + id);

        try {
            //判断该值是否存在
            if (value == null) {
                //时效功能
                jedis.setex("compid:" + id, 20, Long.MAX_VALUE - num + "");
            } else {

                //存在,就自增 1
                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 uid,Long val) {
        System.out.println("用户"+uid+"业务操作执行"+val+"次");
    }
}
    class MyThread extends Thread
    {
        Service sc;
        public MyThread(String id,int num)
        {
sc=new Service(id,num);
        }

        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();
    }
}
package com.jia;

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

public class JedisUtils {
    public static Jedis getJedis()
    {

        JedisPoolConfig jpc=new JedisPoolConfig();
        jpc.setMaxTotal(30);
        jpc.setMaxIdle(10);
        String host="127.0.0.1";
        int port=6379;
        JedisPool jp=new JedisPool(jpc,host,port);
        return jp.getResource();
    }

    public static void main(String[] args) {
        getJedis();
    }
    //
}

创建 redis.properties:

jedis.host=localhost 
jedis.port=6379 
jedis.maxTotal=30 
jedis.maxIdle=10

使用静态代码块加载配置:

package com.jia;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.util.ResourceBundle;

public class JedisUtils {
private static String host;
private static int port;
private static int maxTotal;
private static int maxIdle;
private static JedisPoolConfig poolConfig;
private static JedisPool jedisPool;
    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"));
        poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(maxTotal);
        poolConfig.setMaxIdle(maxIdle);
        jedisPool = new JedisPool(poolConfig,host,port);
    }

    public static Jedis getJedis()
    {
        JedisPoolConfig jpc=new JedisPoolConfig();
        jpc.setMaxTotal(30);
        jpc.setMaxIdle(10);
        String host="127.0.0.1";
        int port=6379;
        JedisPool jp=new JedisPool(jpc,host,port);
        return jp.getResource();
    }

    public static void main(String[] args) {
        getJedis();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值