java redis语法_redis入门到精通系列(四):Jedis--使用java操作redis详解

(一)前言

如果不把数据库和后端语言联系起来,就起不到数据库应该要起到的作用。Java语言通过JDBC操作mysql,用Jedis操作redis。当然了,java操作redis的方式不止jedis一种,现在我们主要使用Jedis来操作redis。

(二)第一个jedis项目

2.1 搭建项目

首先搭建一个空的maven项目,在pom.xml中导入redis的依赖,我同时还导入了junit的依赖用于测试,完整代码文末自取。

redis.clients

jedis

2.9.0

junit

junit

4.12

2.2 创建测试类

在test包下创建测试类JedisTest,操作redis比操作mysql更简单,只需要以下三步:

1.连接jedis

2.操作jedis

3.关闭连接

public class JedisTest {

@Test

public void testJedis(){

//1.连接jedis

Jedis jedis = new Jedis("127.0.0.1", 6379);

//2.操作jedis

jedis.set("name","sdxb");

String name = jedis.get("name");

System.out.println(name);

//3.关闭连接

jedis.close();

}

}

其中第二步操作jedis中的操作和redis语法一致。查看结果:

ddcdad06e62294b89520ade826f16d06.png

(三)请求调用次数的限制案例代码模拟

在之前的一篇博客中我用redis模拟了请求调用次数限制案例,这一次就用java真实模拟后端逻辑,代码逻辑和之前所讲的redis操作逻辑一致。详情请看:redis入门到精通系列(二):redis操作的两个实践案例

public class Service {

//请求模拟

public void call(){

System.out.println("调用服务");

}

//用户限制模拟,传入用户id

public void limitcall(String id){

Jedis jedis = new Jedis("127.0.0.1", 6379);

String value = jedis.get("user" + id);

//第一步,查看该值是否存在

try {

if (value==null){

//如果不存在,创建值,设置生命周期为20s

jedis.setex("user"+id,20,Long.MAX_VALUE-10+"");

}else{

//如果存在,则加1,直到超过最大值抛出异常

jedis.incr("user"+id);

call();

}

}catch (JedisDataException e){

//超过最大值(即每20s访问超过10次),执行异常

System.out.println("达到请求上限,稍后再试");

return;

}finally {

jedis.close();

}

}

}

//多线程一直调用服务

class MyThread extends Thread{

Service service=new Service();

@Override

public void run() {

while (true){

service.limitcall("用户A");

try {

Thread.sleep(1000L);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

public static void main(String[] args){

MyThread myThread=new MyThread();

myThread.run();

}

}

查看结果,当20秒内调用服务达到10次时,再调用就会执行异常

36a49518b112a0026be9abbdd264919f.png

(四)搭建一个Jedis工具类

如果每一次要使用Jedis都生成连接一次Jedis对象,就显得很麻烦,因此有必要写一个工具类方便重复调用。工具类的编写不难,通过Jedis自带的线程池调用线程就行。

public class JedisUtil{

private static JedisPool jedisPool=null;

static {

//配置线程池

JedisPoolConfig config=new JedisPoolConfig();

//设置最大空闲等待数

config.setMaxIdle(10);

//设置最大连接数

config.setMaxTotal(30);

jedisPool=new JedisPool(config,"127.0.0.1",6379);

}

//通过该方法获取jedis对象

public static Jedis getJedis(){

return jedisPool.getResource();

}

}

在使用时将我们之前通过Jedis对象调用的方式换成工具类调用即可,修改上面案例的第八行:

// Jedis jedis = new Jedis("127.0.0.1", 6379);

Jedis jedis=JedisUtil.getJedis();

还有一个小问题,如果把配置的具体信息都写在程序内部,如果要修改就需要重新启动整个项目,所以可以将配置信息写到配置文件中。在resource文件下新建jedis.properties

redis.host = 127.0.0.1

redis.port = 6379

redis.maxidle = 10

redis.maxtotal = 30

修改工具类:

public class JedisUtil{

private static JedisPool jedisPool=null;

static {

//通过配置文件修改参数

ResourceBundle rb=ResourceBundle.getBundle("jedis");

String host = rb.getString("redis.host");

int port = Integer.parseInt(rb.getString("redis.port"));

int maxidle = Integer.parseInt(rb.getString("redis.maxidle"));

int maxtotal= Integer.parseInt(rb.getString("redis.maxtotal"));

//配置线程池

JedisPoolConfig config=new JedisPoolConfig();

//设置最大空闲等待数

config.setMaxIdle(maxidle);

//设置最大连接数

config.setMaxTotal(maxtotal);

jedisPool=new JedisPool(config,host,port);

}

//通过该方法获取jedis对象

public static Jedis getJedis(){

return jedisPool.getResource();

}

}

最后还是把这个项目的代码放在github下: github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值