Redis Java客户端Jredis

article/2025/10/13 10:51:04
JRedis 是一个高性能的 Java 客户端,用来连接到Redis分布式哈希键-值数据库。提供同步和异步的连接。

项目地址:https://github.com/alphazero/jredis


由于jreds的jar包不在公网的maven仓库中,所以需要下载源码使用如下命令,将jar添加到本地maven仓库中。

cd jredis-master\core

mvn -Dmaven.test.skip=true install

在工程pom.xml中添加依赖:

<dependency><groupId>org.jredis</groupId><artifactId>jredis-core-all</artifactId><version>a.0-SNAPSHOT</version></dependency>
1.简单实例

package cn.slimsmart.redis.demo.jredis;import java.util.Date;import org.jredis.JRedis;
import org.jredis.RedisException;
import org.jredis.ri.alphazero.JRedisClient;
import org.jredis.ri.alphazero.support.DefaultCodec;public class JredisTest {public static void main(String[] args) throws Exception {JRedis jredis = new JRedisClient("192.168.36.189", 6379);//jredis.auth(password);try {jredis.ping();//是否通//清空数据库jredis.flushdb();} catch (RedisException e) {e.printStackTrace();}jredis.set("key", "abc");if(jredis.exists("key")){  System.out.println(new String(jredis.get("key")));}  //保存单个对象User user = new User();user.setBirthDate(new Date());user.setName("jack");jredis.set("user", user);System.out.println(DefaultCodec.decode(jredis.get("user")));//集合jredis.sadd("userList", user);user = new User();user.setBirthDate(new Date());user.setName("lucy");jredis.sadd("userList", user);System.out.println(DefaultCodec.decode(jredis.smembers("userList")));//关闭jredis.quit();}}
除此之外,jredis连接redis服务器端还可以使用如下方式:

ConnectionSpec connectionSpec = DefaultConnectionSpec.newSpec("192.168.36.189", 6379, 0,null);connectionSpec.setReconnectCnt(100);  //connectionSpec.setConnectionFlag(Connection.Flag.RELIABLE, Boolean.TRUE);//connectionSpec.setHeartbeat(2);  connectionSpec.setMaxConnectWait(3000);//JRedis jredis = new JRedisClient(connectionSpec);JRedis jredis = new JRedisPipelineService(connectionSpec); jredis.ping();jredis.set("key", "abc");System.out.println(new String(jredis.get("key")));jredis.quit();

2.连接池

package cn.slimsmart.redis.demo.jredis;import java.util.Date;import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.jredis.JRedis;
import org.jredis.connector.ConnectionSpec;
import org.jredis.ri.alphazero.connection.DefaultConnectionSpec;
import org.jredis.ri.alphazero.support.DefaultCodec;
import org.springframework.data.redis.connection.jredis.JredisPool;public class JredisPoolTest {public static void main(String[] args) throws Exception {//链接配置ConnectionSpec connectionSpec = DefaultConnectionSpec.newSpec("192.168.36.189", 6379, 0,null);connectionSpec.setReconnectCnt(100);  //connectionSpec.setConnectionFlag(Connection.Flag.RELIABLE, Boolean.TRUE);//connectionSpec.setHeartbeat(5);  connectionSpec.setMaxConnectWait(3000);//连接池配置GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();poolConfig.setMaxTotal(10);poolConfig.setMinIdle(2);poolConfig.setMaxIdle(10);poolConfig.setMaxWaitMillis(3000);poolConfig.setTestOnBorrow(true);poolConfig.setTestOnReturn(true);poolConfig.setTestWhileIdle(true);poolConfig.setTimeBetweenEvictionRunsMillis(3000);JredisPool jredisPool = new JredisPool(connectionSpec,poolConfig);//获取链接JRedis jredis = jredisPool.getResource();jredis.set("key", "abc");if(jredis.exists("key")){  System.out.println(new String(jredis.get("key")));}  //保存单个对象User user = new User();user.setBirthDate(new Date());user.setName("jack");jredis.set("user", user);System.out.println(DefaultCodec.decode(jredis.get("user")));//回收jredisPool.returnResource(jredis);}
}

3.Fail tolerance

要保证一个client连接到slave服务上读取数据,如果slave down 了之后,可以在不影响应用的情况下,自动切换到另外一个可用的slave。因为jredis不支持设置多个slave服务器,所以写了一个小工具类,目的是为了探测如果的当前正在使用的slave没有heartbeat之后,立马可以切换到一个可用的slave;这样可以保证one of slave down掉之后,不用missing-load也可及时切换到另外一个slave上读数据。

package cn.slimsmart.redis.demo.jredis;import java.util.HashMap;import org.jredis.JRedis;
import org.jredis.connector.ConnectionSpec;
import org.jredis.ri.alphazero.JRedisClient;
import org.jredis.ri.alphazero.connection.DefaultConnectionSpec;
import org.jredis.ri.alphazero.support.DefaultCodec;public class RedisFailTolerance {private static JRedis jredis = null;private static ConnectionSpec defaultConnectionSpec = null;private static int current = 1;private static HashMap<String, ConnectionSpec> serverPools = new HashMap<String, ConnectionSpec>();static {ConnectionSpec connectionSpec1 = DefaultConnectionSpec.newSpec("192.168.36.189", 6379, 0, null);ConnectionSpec connectionSpec2 = DefaultConnectionSpec.newSpec("192.168.36.54", 6379, 0, null);serverPools.put("1", connectionSpec1);serverPools.put("2", connectionSpec2);}private String next() {if (current > serverPools.size()) {current = 1;}int nextIndex = current;current++;return nextIndex + "";}private ConnectionSpec getConnectionSpec() {if (defaultConnectionSpec != null) {return defaultConnectionSpec;}jredis = null;/*** we are working multiple servers try different servers,util we fetch* the first available server pool*/HashMap<String, ConnectionSpec> tryServers = new HashMap<String, ConnectionSpec>(serverPools);if (serverPools.size() == 1) {return (ConnectionSpec) serverPools.get("1");}while (!tryServers.isEmpty()) {ConnectionSpec connectionSpec = tryServers.get(this.next());if (isConnect(connectionSpec)) {return connectionSpec;}tryServers.remove(connectionSpec);if (tryServers.isEmpty()) {break;}}return null;}/*** try whether the server is available* * @param connectionSpec* @return true or false*/private boolean isConnect(ConnectionSpec connectionSpec) {if (connectionSpec == null) {return false;}JRedis jredis = new JRedisClient(connectionSpec.getAddress().getHostAddress(), connectionSpec.getPort());try {jredis.ping();jredis.quit();} catch (Exception e) {return false;}return true;}public void initialize() {defaultConnectionSpec = this.getConnectionSpec();if (jredis == null) {synchronized (this) {jredis = new JRedisClient(defaultConnectionSpec);}}}public String getS(String key) {this.initialize();String value = null;try {value = DefaultCodec.toStr(jredis.get(key));} catch (Exception e) {e.printStackTrace();defaultConnectionSpec = null;this.initialize();}return value;}public static void main(String args[]) {RedisFailTolerance redis = new RedisFailTolerance();System.out.println(redis.getS("key"));try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(redis.getS("key"));try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(redis.getS("key"));}
}
参考: http://dmouse.iteye.com/blog/813026

4.与spring集成,参考:http://blog.csdn.net/zhu_tianwei/article/details/44900219


http://chatgpt.dhexx.cn/article/ANOjOID3.shtml

相关文章

4.jedis

1.pom依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version> </dependency>2.客户端连接redis

JDK: JRE

序言 这个跟类加载有关. 其它的没啥好说的,直接说重点吧 重点 我们安装JDK后会有两个目录一个是JDK,一个是JRE.如下图所示: JDK: 这个是我们开发时需要往Eclipse或者Idear中引入的,里面主要包含了编译器,即把Java文件编译成Class文件的相关Jar.以及开发的过程所需要的一些工…

Jedis详解

因为工作的需要&#xff0c;底层同事对Redis进行了部分改造&#xff0c;增加了几个命令&#xff0c;对应着也就需要对Jedis进行部分修改&#xff0c;于是就把Jedis相关的代码读了一遍&#xff0c;发现其设计还是非常简单但又巧妙使用。 通常而言&#xff0c;我们对于Redis集群…

Jedis简介

Jedis用于java语言连接redis服务&#xff0c;并提供对应的操作API 一、准备工作 (1)jar包导入 下载地址&#xff1a;https://mvnrepository.com/artifact/redis.clients/jedis 基于maven <dependency> <groupId>redis.clients</groupId> <artifactId&…

jedis介绍

jedis是redis的java版本的客户端实现。下面演示jedis的相关操作&#xff1a;      首先在eclipse新建动态web工程&#xff1a;            将jedis所需的jar包导入到工程中&#xff1a;            编写Java代码测试连通性&#xff1a; import …

jedis相关详解

一、jedis是什么&#xff1f; Jedis是redis的java版本的客户端实现&#xff0c;使用Jedis提供的Java API对Redis进行操作&#xff0c;是Redis官方推崇的方式&#xff1b;并且&#xff0c;使用Jedis提供的对Redis的支持也最为灵活、全面&#xff1b;不足之处&#xff0c;就是编…

Redis 客户端:Jredis 和 spring-data-redis 整合

因为我使用的是 java &#xff0c;所以我学习的是java 的客户端 &#xff1a;Jredis 。整合结合自己的项目&#xff0c;把 Jredis 的客户端整合一下。 我们整合需要的工具&#xff1a; Redis Serviceredis.clients.jedis 2.9.0 &#xff08;java 客户端链接redis&#xff09;…

Redis使用教程(一)

Redis:单线程、高读写 redis数据库初识 Redis 简介 Redis 的安装配置 Redis 的常见操作 Redis 的数据类型 Redis 的事务控制 Java 操作 Redis 数据库 Redis简介 redis的作用 Redis:REmote DIctionary Server( 远程字典服务器 ) 是完全开源免费的&#xff0c;用 C 语言编写的…

html如何隐藏input,html如何让input隐藏

隐藏方法&#xff1a;1、设置input标签 type属性的值为“hidden”&#xff1b;2、利用input标签的style属性&#xff0c;添加“display:none”样式&#xff1b;3、利用input标签的style属性&#xff0c;添加“visibility:hidden”样式。 本教程操作环境&#xff1a;windows7系统…

使用java实现杨辉三角的输出

案例&#xff1a;杨辉三角 实现代码 结果输出

【Java】 杨辉三角 二维数组打印杨辉三角

Tips 打印三角的操作 : 每行打印前预留空格打印指定数量的星号后换行重复循环打印直至完成所有打印结果 杨辉三角: 三角规律空格最大对称值为 5 大于 5 则会变形三角规律为当前值为上一个值加上前一个值 首尾的数字值相等参考二维数组的规律生成数值 import java.util.Sca…

java输出杨辉三角(等腰三角形版)

网上转了一圈&#xff0c;各种形式都有&#xff0c;给出一种不用那些啥制表符的等腰三角形版本 杨辉三角 杨辉三角形各行的系数满足以下的规律&#xff1a; ①各行第一个数都是1&#xff1b; ②各行最后一个数都是1&#xff1b; ③从第3行起&#xff0c;除上面指出的第一个数…

用Java编写杨辉三角的几种实现方式

一、前言 最近在学习java&#xff0c;遇到了杨辉三角的编程代码题&#xff0c;这是一道经典的面试题&#xff0c;在经过网上搜索和老师的讲解之后&#xff0c;于是想把代码贴出来&#xff0c;分析一下思路。 二、杨辉三角 1.直角杨辉三角 2.等腰杨辉三角 这就是两种杨辉三角…

JAVA杨辉三角的详细解释

近期java面试题中总会出现算法题&#xff0c;最近我看到了很多杨辉三角的面试题&#xff0c;自己当时手写也没分析好思路&#xff0c;在网上听老师一讲于是就写出来了&#xff0c;今天把代码贴出来看下&#xff0c;思路分析下; 首先看下排列的结果&#xff1a; 可以很清楚的看…

Java实现杨辉三角形

一&#xff1a;前言 实现杨辉三角&#xff0c;需要知道什么是杨辉三角。如下图&#xff0c;就是两种杨辉三角。这两种杨辉三角形是目前最常见的&#xff1a; &#xff08;1&#xff09;等边形状的杨辉三角 &#xff08;2&#xff09;直角形状的杨辉三角 二、杨辉三角形的规…

Java代码实现杨辉三角

一、杨辉三角的概念 杨辉三角是二项式系数在三角形中的一种几何排列&#xff0c;南宋数学家杨辉在《详解九章算法》中有记载&#xff0c;欧洲的帕斯卡也发现这一规律&#xff0c;故又称帕斯卡三角形&#xff0c;比杨辉晚几百年发现该规律 二、杨辉三角的特性 他的两条斜边都是…

杨辉三角形Java实现

一、杨辉三角形的特点 &#xff08;1&#xff09;每个数等于它上方两数之和。 &#xff08;2&#xff09;每行数字左右对称&#xff0c;由1开始逐渐变大。 &#xff08;3&#xff09;第n行的数字有n项。 &#xff08;4&#xff09;前六行的杨辉三角形如图&#xff1a; 二、J…

Java解决杨辉三角问题(这里提供了两种方法)

杨辉三角作为一个数学问题&#xff0c;所以我们在做这道题的时候可以用数学思维将其解决。 下面我将我的实现代码和测试结果附上&#xff1a; package practice;/*** 杨辉三角问题*/ public class Yanghuisanjiao {public static void main(String[] args) {print1(25);print2(…

基于Java的杨辉三角

直角杨辉三角 杨辉三角的规律是每行数字的第一列和最后一列的数字都是1&#xff0c;从第三行开始&#xff0c;除去第一列和最后一列都为数字1以外&#xff0c;其余每列的数字都等于它上方两个数字之和。例如下面图片中7字形圈起来的&#xff1a;4 3 1、35 15 20。 代码实…

杨辉三角形(Java版)

不为失败找理由&#xff0c;只为成功找方法。所有的不甘&#xff0c;因为还心存梦想&#xff0c;所以在你放弃之前&#xff0c;好好拼一把&#xff0c;只怕心老&#xff0c;不怕路长。 文章目录 1. 什么是杨辉三角形2. 实现思路&#xff08;方式&#xff09;2.1 递归方式2.2 递…