写点什么

Jedis 入门教程,java 入门课程百度网盘

用户头像
极客good
关注
发布于: 刚刚
  • 关闭连接,或者直接就使用 jedis 连接池:jedis.close();


直接连接与连接池方式的比较:


| | 优点 | 缺点 |


| --- | --- | --- |


| 直连 | 简单方便,适用与少量长期连接的场景 | 存在每次新建/关闭 TCP 连接的开销,资源无法控制,可能出现连接泄露。并且 Jedis 对象处于线程不安全的状态 |


| 连接池 | 无需每次都生成 Jdeis 对象,降低开销,并且连接池的形式可以有效的保护和控制系统资源 | 相对于直连,使用相对麻烦,在资源管理上需要很多参数来保证,一旦规划不合理会出现问题 |


搭建工程:



引入依赖:


<dependency>


<groupId>redis.clients</groupId>


<artifactId>jedis</artifactId>


<version>3.3.0</version>


</dependency>


<dependency>


<groupId>com.alibaba</groupId>


<artifactId>fastjson</artifactId>


<version>1.2.58</version>


</dependency>


测试连接:


public class Ping {


public static void main(String[] args) {


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


System.out.println("连接成功");


//查看服务是否运行


System.out.println("服务正在运行: "+jedis.ping());


}


}


运行结果:连接成功



Jedis 中的 API 接口名和操作名一样,根据 API 文档使用就行:


基本测试:


public class TestJedis {


public static void main(String[] args) {


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


System.out.println("清空数据:"+jedis.flushDB());


System.out.println("判断某个键是否存在:"+jedis.exists("username"));


System.out.println("新增<'username','ly'>的键值对:"+jedis.set("username", "ly"));


System.out.println("新增<'password','123456'>的键值对:"+jedis.set("password", "123456"));


System.out.print("系统中所有的键如下:");


Set<String> keys = jedis.keys("*");


System.out.println(keys);


System.out.println("删除键 password:"+jedis.del("password"));


System.out.println("判断键 password 是否存在:"+jedis.exists("password"));


System.out.println("查看键 username 所存储的值的类型:"+jedis.type("username"));


System.out.println("随机返回 key 空间的一个:"+jedis.randomKey());


System.out.println("重命名 key:"+jedis.rename("username","name"));


System.out.println("取出改后的 name:"+jedis.get("name"));


System.out.println("按索引查询:"+jedis.select(0));


System.out.println("删除当前选择数据库中的所有 key:"+jedis.flushDB());


System.out.println("返回当前数据库中 key 的数目:"+jedis.dbSize());


System.out.println("删除所有数据库中的所有 key:"+jedis.flushAll());


}


}


运行结果:



Jedis 实现事务控制:


import com.alibaba.fastjson.JSONObject;


import redis.clients.jedis.Jedis;


import redis.clients.jedis.Transaction;


public class TestMulti {


public static void main(String[] args) {


//创建客户端连接服务端,redis 服务端需要被开启


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


jedis.flushDB();


JSONObject jsonObject = new JSONObject();


jsonObject.put("user1", "xiaoming");


jsonObject.put("user2", "xiaohong");


//开启事务


Transaction multi = jedis.multi();


String result = jsonObject.toJSONString();


try{


//向 redis 存入一条数据


multi.set("json", result);


//再存入一条数据


multi.set("json2", result);


//这里引发了异常,用 0 作为被除数


//int i = 10/0;


//如果没有引发异常,执行进入队列的命令


multi.exec();


}catch(Exception e){


e.printStackTrace();


//如果出现异常,回滚


multi.discard();


}finally{


System.out.println(jedis.get("json"));


System.out.println(jedis.get("json2"));


//最终关闭客户端


jedis.close();


}


}


}


运行结果:



在开启事务期间添加异常,用 0 作为被除数int i = 10/0;,再次测试结果:



Jedis 连接池: JedisPool




之前通过直连的方式使用 Jedis,由于 Redis 客户端使用的是 TCP 协议,所有每次都需要我们新建 TCP 连接,使用后在断开连接,对于频繁访问 Redis 的场景显然并不高效,在实际生产环境中一般使用连接池的方式对 Jedis 连接进行管理。


使用步骤:


Jedis 提供了 JedisPool 这个类作为对 Jedis 的连接池,使用时首先需要我们**创建一个 JedisPool 连接池对象,之后通


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


过调用方法 getResource()获取 Jedis 连接。**


1.Jedis 连接池,通常 JedisPool 是单例的。


//0.创建一个配置对象


JedisPoolConfig config = new JedisPoolConfig();


config.setMaxTotal(50);


config.setMaxIdle(10);

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
Jedis入门教程,java入门课程百度网盘