Redis基础-4.Jedis
4.Jedis
4.1 Jedis简介
Java语言连接redis服务
Jedis
编程语言与redis Java语言连接redis服务 Jedis SpringData Redis Lettuce C 、C++ 、C# 、Erlang、Lua 、Objective-C 、Perl 、PHP 、Python 、Ruby 、Scala 可视化连接redis客户端 Redis Desktop Manager Redis Client Redis Studio
4.2 Hello world(Jedis版)
准备工作
基于maven <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
客户端连接redis
// 连接redis Jedis jedis = new Jedis("127.0.0.1", 6379); // 操作redis (方法名与命令相同) jedis.set("name", "itheima"); jedis.get("name"); // 关闭redis连接 jedis.close();
API文档 :http://xetorthio.github.io/jedis/
4.3 Jedis读写redis数据
案例:服务调用次数控制
人工智能领域的语义识别与自动对话将是未来服务业机器人应答呼叫体系中的重要技术,百度自研用户评 价语义识别服务,免费开放给企业试用,同时训练百度自己的模型。现对试用用户的使用行为进行限速, 限制每个用户每分钟最多发起10次调用 案例要求 ①设定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+"使用次数已达到上限,请稍后再试,或升级VIP会员"); return; }finally{ jedis.close(); } } }
- 设计启动主程序
public static void main(String[] args) { MyThread t1 = new MyThread("初级用户"); t1.start(); }
后续1:对业务控制方案进行改造,设定不同用户等级的判定 后续2:将不同用户等级对应的信息、限制次数等设定到redis中,使用hash保存
4.4 Jedis简易工具类开发
基于连接池获取连接
JedisPool:Jedis提供的连接池技术
poolConfig:连接池配置对象
host:redis服务地址
port:redis服务端口号
public JedisPool(GenericObjectPoolConfig poolConfig, String host, int port) { this(poolConfig, host, port, 2000, (String)null, 0, (String)null); }
封装连接参数
jedis.properties
jedis.host=localhost jedis.port=6379 jedis.maxTotal=30 jedis.maxIdle=10
加载配置信息
静态代码块初始化资源
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); jedisPool = new JedisPool(poolConfig,host,port); }
获取连接
对外访问接口,提供jedis连接对象,连接从连接池获取
public static Jedis getJedis(){ Jedis jedis = jedisPool.getResource(); return jedis; }
4.5 可视化客户端
Redis Desktop Manager
本文来自博客园,作者:Lz_蚂蚱,转载请注明原文链接:https://www.cnblogs.com/leizia/p/15312662.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步