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();
}
}