一. Jedis基本操作
导入mawen配置
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
建立一个测试类,开启Redis服务器端
public class JedisTest {
@Test
public void testJedis(){
//1.连接Redis
Jedis jedis = new Jedis("127.0.0.1",6379); //IP,端口号
//2.操作Redis
jedis.set("name","jess");
String name = jedis.get("name");
System.out.println(name);
//3.关闭Redis
jedis.close();
}
}
jedis常规操作:
@Test
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);
System.out.println(list1);
//3.关闭Redis
jedis.close();
}
public void testHash(){
//1.连接Redis
Jedis jedis = new Jedis("127.0.0.1",6379); //IP,端口号
//2.操作Redis
jedis.hset("hash1","a","1");//key,field,value
jedis.hset("hash1","b","2");
jedis.hset("hash1","c","3");
Map<String, String> hash1 = jedis.hgetAll("hash1");
System.out.println(hash1);
//3.关闭Redis
jedis.close();
二. 读写Redis数据
案例:
① 设定A、B、C三个用户
② A用户限制10次/分调用,B用户限制30次/分调用,C用户不限制
需求分析:
① 设定一个方法,用于模拟实际业务调用的服务,采用打印模拟调用
② 在业务调用前服务调用控制单元,内部使用redis进行控制
③ 对调用超限使用异常进行控制,异常处理设定为打印提示信息
④ 主程序启动3个线程,分别表示3种不同用户的调用
实现步骤:
- 设定业务方法
void business(String id,long num){
System.out.println("用户"+id+"发起业务调用,当前第"+num+"次");
}
- 设定多线类,模拟用户调用
public void run(){
while(true){
jd.service(id);
//模拟调用间隔,设定为 1.x 秒
try{
Random r = new Random();
Thread.sleep(1000+ r.nextInt(200));
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
- 设计redis控制方案
void service(String id){
Jedis jedis = new Jedis("localhost", 6379);
String value = jedis.get("compid:" + id);
//判定是否具有调用计数控制,利用异常进行控制处理
if(value == null) {
//没有控制,创建控制计数器
jedis.setex("compid:" + id, 20, ""+(Long.MAX_VALUE-10));
}else{
//有控制,自增,并调用业务
try{
Long val = jedis.incr("compid:"+id);
business(id,10+val-Long.MAX_VALUE);
}catch (JedisDataException e){
//调用次数溢出,弹出提示
System.out.println(" 用户:"+id+" 使用次数已达到上限");
return;
}finally{
jedis.close();
}
}
}
- 设计启动主程序
public static void main(String[] args) {
MyThread t1 = new MyThread(" 初级用户");
t1.start();
}
三. jedis连接池
jedis.properties
jedis.host=localhost
jedis.port=6379
jedis.maxTotal=30
jedis.maxIdle=10
静态代码块初始化资源
class JedisUtil() {
private static JedisPool JP = null;
private static String host,port,maxTotal,maxIdle,poolConfig;
JedisPoolConfig poolConfig;
static {
//读取配置文件 获得参数值
ResourceBundle rb = ResourceBundle.getBundle("jedis");
host = rb.getString("jedis.host");
port = Integer.parseInt(rb.getString("jedis.port"));
maxTotal = Integer.parseInt(rb.getString("jedis.maxTotal"));
maxIdle = Integer.parseInt(rb.getString("jedis.maxIdle"));
poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(maxTotal);
poolConfig.setMaxIdle(maxIdle);
JP = new JedisPool(poolConfig, host, port);
}
}
获取连接
public static Jedis getJedis(){
Jedis jedis = jedisPool.getResource();
return jedis;
}