jedis
jedis简介
编程语言想要操作redis,要做到可以往里面放数据,并且可以取数据。简单来讲,jedis就是java语言用来连接redis的工具,但是java操作redis不仅仅可以使用jedis,还可以有别的操作。
java搭建一个操作redis的demo
下载jar包或者maven工程引入相关依赖。
<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>
引入jedis依赖和junit依赖。
import org.junit.Test;
import redis.clients.jedis.Jedis;
import java.util.Arrays;
import java.util.List;
public class JedisDemo {
@Test
public void testJedis() {
//1、连接redis
Jedis jedis = new Jedis("127.0.0.1", 6379);
//2、操作redis数据库
jedis.set("name", "biao");
String name = jedis.get("name");
System.out.println(name);
//3、关闭连接
jedis.close();
}
@Test
public void testList() {
//1、连接redis
Jedis jedis = new Jedis("127.0.0.1", 6379);
//2、操作redis数据库
jedis.lpush("list1", "q", "w", "e", "r");
jedis.rpush("list2", "a", "b", "c");
List<String> list1 = jedis.lrange("list1", 0, -1);
for (String s : list1) {
System.out.println(s);
}
//3、关闭连接
jedis.close();
}
}
redis怎样操作,指令在jedis中是一模一样的。数据类型也跟java中一样。
jedis入门案例
案例
百度的某项服务,对体验用户每分钟只提供10次服务,或者限定调用次数。
要求:
现有A/B/C三个用户,A每分钟限定调用10次,B每分钟限定调用30次,C每分钟调用不限制。
实现方法:
package com.biao;
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("使用次数已经达到最大次数,请升级会员");
} 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();
//休眠1秒
try {
Thread.sleep(300L);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//创建启动类
class Main {
public static void main(String[] args) {
MyThread mt1 = new MyThread("初级用户",10);
mt1.start();
MyThread mt2 = new MyThread("高级用户",30);
mt2.start();
}
}
这里可以自行设定睡眠时间和key存储时间,可以用随机数来设定睡眠时间来模拟用户调用。
这个demo里面就设计了2个用户,并且又可以完善的位置。比如业务方案可以模拟真实业务,可以将用户信息或者限制次数放在配置文件中,或者redis中。