使用java与Redis进行连接的Jedis学习
需要创建一个maven项目
java中操作redis于在命令行上操作的几乎一样
1、导入jedis依赖坐标
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.2.3</version>
</dependency>
连接方式依赖不是唯一的,有多个依赖可以选择
2、创建一个测试类创建添加和获取方法
- 创建连接
- 操作数据库
- 关闭连接
public class JedisTest {
@Test
public void testJedis(){
// 1、连接redis
Jedis jedis = new Jedis("127.0.0.1", 6379);
// 2、操作redis
// jedis.set("name","zhangsan");
System.out.println(jedis.get("name"));
// 3、关闭redis
jedis.close();
}
}
先执行set方法在执行get方法
3、多种数据类型添加数测试
在java中redis的数据类型都会转换成java的格式展示
/**
* 测试hash
*/
@Test
public void testHash(){
// 连接数据
Jedis jedis = new Jedis("127.0.0.1", 6379);
// 操作数据
jedis.hset("hsets","h1","a1");
jedis.hset("hsets","h2","a6");
jedis.hset("hsets","h3","a8");
jedis.hset("hsets","h4","a9");
// 获取数据
Map<String, String> hsets = jedis.hgetAll("hsets");
System.out.println(hsets);
System.out.println("获取hash的个数:"+jedis.hlen("hsets"));
// 关闭连接
jedis.close();
}
/**
* 添加list集合
*/
@Test
public void testlist(){
// 连接数据
Jedis jedis = new Jedis("127.0.0.1", 6379);
// 操作数据
jedis.lpush("list1","1","2","3","4");
jedis.rpush("list1","a","b","c","d");
// 获取数据
List<String> list1 = jedis.lrange("list1", 0, -1);
for (String list : list1) {
System.out.print("集合中的数据:"+list+" ");
}
// 获取集合的长度
System.out.println("获取到的集合长度:"+jedis.llen("list1"));
// 关闭连接
jedis.close();
}
4、服务调用次数控制案例
人工智能领域的语义识别与自动对话将是未来服务业机器人应答呼叫体系中的重要技术,百度自研用户评价语义识别服务,免费开放给企业试用,同时训练百度自己的模型。现对试用用户的使用行为进行限速,限制每个用户每分钟最多发起10次调用
案例要求:
- 设定A、B、C三个用户
- A用户限制10次/分调用,B用户限制30次/分调用,C用户不限制
需求分析:
- 设定一个服务方法,用于模拟实际业务调用的服务,内部采用打印模拟调用
- 在业务调用前服务调用控制单元,内部使用redis进行控制,参照之前的方案
- 对调用超限使用异常进行控制,异常处理设定为打印提示信息
- 主程序启动3个线程,分别表示3种不同用户的调用
代码实
package com.service;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.exceptions.JedisDataException;
/**
* 项目名称:Project
* 描述:测试业务层
*
* @author zhong
* @date 2022-06-10 13:20
*/
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);
// 2、操作
// 2.1、获取数据
String value = jedis.get("compid:" + id);
// 判断数据是否存在
try {
if(value == null){
// 创建值
String setex = jedis.setex("compid:" + id, 5, Long.MAX_VALUE - num + "");
}else{
// 设置值的自增
long incr = jedis.incr("compid:" + id);
business(id,num-(Long.MAX_VALUE-incr));
}
} catch (JedisDataException e) {
System.out.println("您的访问次数已耗尽,请升级超级会员");
return;
}finally {
// 关闭连接
jedis.close();
}
}
public void business(String id,Long incr){
System.out.println("用户:"+id+" 测试业务被执行第"+incr+"次");
}
}
/**
* 创建多线程
*/
class MyThread extends Thread {
Service s;
public MyThread(String id,int num) {
this.s = new Service(id,num);
}
@Override
public void run() {
while (true) {
s.service();
try {
Thread.sleep(300L);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
/**
* 创建启动方式
*/
class Main{
public static void main(String[] args) {
MyThread thread1 = new MyThread("超级用户",10);
MyThread thread2 = new MyThread("普通用户",10);
MyThread thread3 = new MyThread("钻石用户",20);
thread1.start();
thread2.start();
thread3.start();
}
}
5、Jedis简易工具类开发(基于连接池获取连接)
JedisPool:Jedis提供的连接池技术
- poolConfig:连接池配置对象
- host:redis服务地址
- port:redis服务端口号
1、封装连Redis的参数,便于修改配置,定义jedis.properties
配置文件
redis.host = 127.0.0.1
redis.port = 6379
redis.maxTotal = 30
redis.maxIdle = 10
2、实现工具类的封装
package com.UTILS;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.util.ResourceBundle;
/**
* 项目名称:Project
* 描述:Jedis连接池工具类
*
* @author zhong
* @date 2022-06-10 14:56
*/
public class JedisUtils {
private static JedisPool jp = null;
// 添加类型属性
private static String host;
private static int port;
private static int maxTotal;
private static int maxIdle;
static {
// 加载外部配置文件
ResourceBundle redis = ResourceBundle.getBundle("redis");
// 获取配置文件学习
host = redis.getString("redis.host");
port = Integer.parseInt(redis.getString("redis.port"));
maxTotal = Integer.parseInt(redis.getString("redis.maxTotal"));
maxIdle = Integer.parseInt(redis.getString("redis.maxIdle"));
// 设置连接池的配置文件
JedisPoolConfig jedisPool = new JedisPoolConfig();
// 最大连接数
jedisPool.setMaxTotal(maxTotal);
// 最大活动数
jedisPool.setMaxIdle(maxIdle);
jp = new JedisPool(jedisPool, host, port);
}
public static Jedis getJedis() {
return jp.getResource();
}
}
工具类封装号之后就不需要在使用的类上创建redis的连接参数了,直接使用创建的工具类来进行数据连接即可,因为返回的也是一个
Jedis
// 创建连接 Jedis jedis = JedisUtils.getJedis();
6、Redis可视化工具推荐【Another Redis Desktop Manager】
软件的下载的地址可以在网上进行搜索
连接界面
操作界面
key操作界面