rodert单排学习redis进阶【白银一】
redis之白银一
说些题外话,最近帝都疫情又严重,大家都身处时代洪流中,这不是个别人能左右的,希望你能保护好自己,天天开心。
前言
声明:参考来源互联网,有任何争议可以留言。站在前人的肩上,我们才能看的更远。
前文推荐阅读:
1.Redis 客户端
1.1.Redis Desktop Manager
使用称手的工具,做起事来 事半功倍
,用 redis-cli
自然不错。我推荐一款我经常用的 Redis
可视化工具,Redis Desktop Manager
。
启动界面如下:
至于安装方式是 一键安装
。
学生和学习者可以公众号后台回复:【666】,免费获取。
2.Redis 连接池
2.2.0.连接池
池技术被广泛使用在系统开发中,像
JDBC
连接池、线程池等。连连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。
在处理一个任务时,我们大多情况要在数毫秒级别就完成,如果重复创建、关闭资源,会占用较长时间和大量系统资源。
- 使用连接池优势
- 减少连接创建时间
连接在系统初始化时就创建完成,需要时直接从池中取用,减少了时间开销。
- 简化的编程模式
当使用连接池时,每一个单独的线程能够像创建了一个自己的 JDBC 连接一样操作。
- 受控的资源使用
连接池能够控制一个模块的资源占用率,不会让一个模块资源占用过高,导致整个系统崩溃。
2.1.Redis 连接池
2.1.1.前言引入
Redis
修炼之连接池篇,前面讲了Redis入门篇:rodert单排学习redis入门【黑铁】、rodert 单排学习 redis 进阶【青铜】,对Redis
基本数据类型的操作做了讲解。
在以前没有开源连接池时,很多人自写连接池工具,简单来说就是创建一个集合,存放一批连接,动态维护着。保证每个连接都是有效的。
2.1.2.Redis 连接池
本教程涉及到的一些代码都是 Java 语言编写。
maven
依赖,引入 pom.xml
文件
pom.xml
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>
RedisUtil.java
public final class RedisUtil {
//IP 地址
private static String ADDR = "127.0.0.1";
//端口号
private static int PORT = 6379;
//redis 服务端密码
private static String PWD = "123456";
//可用连接实例最大数目,默认为 8,若赋值 -1,表示不被限制
private static Integer MAX_TOTAL = 1024;
//控制一个连接池最多有多少个状态为空闲的 jedis 实例,默认值为 8
private static Integer MAX_IDLE = 200;
//等待可用连接最大的等待时间,单位 ms,默认值 -1,表示永不超时,若等待超时抛出 JedisConnectionException
private static Integer MAX_WAIT_MILLIS = 10000;
//超时
private static Integer TIMEOUT = 10000;
//在用一个 jedis 实例时,是否提前进行 validate 操作,若结果为 true 则 jedis 实例可用
private static Boolean TEST_ON_BORROW = true;
//jedis 连接池
private static JedisPool jedisPool = null;
/**
* 初始化 jedis 连接池的静态块,RedisPool 第一次类加载时执行,以后便不再执行
*/
static {
try {
JedisPoolConfig conf = new JedisPoolConfig();
/*
* 高版本 jedis jar 中 JedisPoolConfig 没有 setMaxActive 和 setMaxWait 属性,因为官方在高版本 * 中启用了此方法,用以下两个属性替换
* maxActive ==> maxTotal
* maxWait ==> maxWaitMillis
*/
//设置连接实例最大数目
conf.setMaxTotal(MAX_TOTAL);
//设置最多多少空闲的 jedis 实例
conf.setMaxIdle(MAX_IDLE);
//设置等待可用连接的最大时间
conf.setMaxWaitMillis(MAX_WAIT_MILLIS);
//设置是否提前进行测试借用
conf.setTestOnBorrow(TEST_ON_BORROW);
//新建 jedis 连接池
jedisPool = new JedisPool(conf, ADDR, PORT, TIMEOUT, PWD);
}
catch (Exception e) {
e.printStackTrace();
}
}
/*
* 获取 jedis 实例来操作数据,每次使用完要将连接返回给连接池 jedis.close()
* @return
*/
public synchronized static Jedis getRedis() {
try {
if(jedisPool != null) {
//获取 jedis 实例
Jedis jedis = jedisPool.getResource();
return jedis;
}
else{
System.out.println("没有找到 Jedis 连接池!");
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/*
* 用来回收 Jedis 对象资源,用户需要用到此方法释放资源,否则一直占用资源,在新版本中,`returnResource(jedis) 将被废弃不推荐使用,`直接调用 `jedis.close();` 归还连接到连接池。
* @param Jedis jedis
*/
public synchronized static void returnJedis(Jedis jedis) {
try {
if(jedis != null) {
//回收 jedis 对象资源
jedisPool.returnResource(jedis);
System.out.println("Jedis 被成功回收!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
本教程纯手打,致力于最实用教程,不需要什么奖励,只希望多多转发支持。 欢迎来我公众号,希望可以结识你,也可以催更,微信搜索:JavaPub
有任何问题都可以来谈谈 !
rodert单排学习redis进阶【白银一】的更多相关文章
- 从零单排学Redis【白银】
前言 只有光头才能变强 今天继续来学习Redis,上一篇从零单排学Redis[青铜]已经将Redis常用的数据结构过了一遍了.如果还没看的同学可以先去看一遍再回来~ 这篇主要讲的内容有: Redis服 ...
- 从零单排学Redis【铂金二】
前言 只有光头才能变强 好的,今天我们要上[铂金二]了,如果还没有上铂金的,赶紧先去蹭蹭经验再回来(不然不带你上分了): 从零单排学Redis[青铜] 从零单排学Redis[白银] 从零单排学Redi ...
- 从零单排学Redis【黄金】
前言 只有光头才能变强 好的,今天我们要上黄金段位了,如果还没经历过青铜和白银阶段的,可以先去蹭蹭经验再回来: 从零单排学Redis[青铜] 从零单排学Redis[白银] 看过相关Redis基础的同学 ...
- 从零单排学Redis【铂金一】
前言 只有光头才能变强 好的,今天我们要上铂金段位了,如果还没经历过青铜和白银和黄金阶段的,可以先去蹭蹭经验再回来: 从零单排学Redis[青铜] 从零单排学Redis[白银] 从零单排学Redis[ ...
- Redis进阶实践之十三 Redis的Redis-trib.rb文件详解
一.简介 事先说明一下,本篇文章不涉及对redis-trib.rb源代码的分析,只是从使用的角度来阐述一下,对第一次使用的人来说很重要.redis-trib.rb是redis官方推出的管理re ...
- Redis进阶实践之十八 使用管道模式加速Redis查询
一.引言 学习redis 也有一段时间了,该接触的也差不多了.后来有一天,以为同事问我,如何向redis中批量的增加数据,肯定是大批量的,为了这主题,我从新找起了解决方案.目前 ...
- Redis进阶实践之十三 Redis的Redis-trib.rb脚本文件使用详解
转载来源:http://www.cnblogs.com/PatrickLiu/p/8484784.html 一.简介 事先说明一下,本篇文章不涉及对redis-trib.rb源代码的分析,只是从使用的 ...
- Redis进阶实践之九 独立封装的RedisClient客户端工具类(转载9)
Redis进阶实践之九 独立封装的RedisClient客户端工具类 一.引言 今天开始有关Redis学习的第九篇文章了,以后肯定会大量系统使用Redis作为缓存介质,为了更好的更好的Redis,自己 ...
- Redis进阶实践之七Redis和Lua初步整合使用(转载 7)
Redis进阶实践之七Redis和Lua初步整合使用 一.引言 Redis学了一段时间了,基本的东西都没问题了.从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运 ...
随机推荐
- Vuex原理实现
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 思考问题 Vuex 只在更实例引入了,那么 ...
- Java实现 LeetCode 692 前K个高频单词(map的应用)
692. 前K个高频单词 给一非空的单词列表,返回前 k 个出现次数最多的单词. 返回的答案应该按单词出现频率由高到低排序.如果不同的单词有相同出现频率,按字母顺序排序. 示例 1: 输入: [&qu ...
- Java实现 LeetCode 477 汉明距离总和
477. 汉明距离总和 两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量. 计算一个数组中,任意两个数之间汉明距离的总和. 示例: 输入: 4, 14, 2 输出: 6 解释: 在二进 ...
- Java实现 LeetCode 297 二叉树的序列化与反序列化
297. 二叉树的序列化与反序列化 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得 ...
- Java实现 LeetCode 233 数字 1 的个数
233. 数字 1 的个数 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数. 示例: 输入: 13 输出: 6 解释: 数字 1 出现在以下数字中: 1, 10, 11, 1 ...
- Java实现中值问题
中值问题是求一个n个数列表中某一数组下标k,它要求该下标元素比列表中的一半元素大,又比另一半元素小,这个中间的值被称为中值. 使用Lomuto划分算法思想,此处引用<算法设计与分析基础>第 ...
- 关于C#委托三种调用的分享
一.同步调用 1.同步调用会按照代码顺序来执行2.同步调用会阻塞线程,如果是要调用一项繁重的工作(如大量IO操作),可能会让程序停顿很长时间,造成糟糕的用户体验,这时候异步调用就很有必要了. 举个栗子 ...
- java创建透明背景的PNG图片加自定义文字水印
人在码上走,需求天天有.这不,今天前端让我返回一个带自定义水印的背景图片.一通google,有现成的代码,但是基本是直接在源图上添加水印,生成出来的文字样式也没有控制好,看来又只有自己造轮子了. 过程 ...
- Python—变量,条件语句,while循环,运算符,字符串等
Python初识以及变量: 变量名:——字母 ——数字 ——下划线[见名识意] (PS:数字不能开头:不能是关键字:最好不能和python内置的东西重复) ##################### ...
- java关键字tranisent用法详解
作为java中的一个关键字,tranisent用的并不是很多,但是在某些关键场合,却又起着极为重要的作用,因此有必要对它进行一些必要的了解. 一.定义:声明不用序列化的成员域.(源自百度百科) 二.作 ...