Java代码操作Redis

在真正的项目中,我们不可能手动的去完成对Redis数据库数据的存取,而是使用代码来完成对数据的存储,如果真的是手动存储的话,就会失去了意义。
如果你现在会没有安装Redis或者安装了不会相关的命令可以去我的另外两个文章去查看
https://blog.youkuaiyun.com/weixin_44007447/article/details/104506806
https://blog.youkuaiyun.com/weixin_44007447/article/details/104522958
好了,接下来我们进入正题,使用Java代码来完成对Redis数据库的操作。

Java连接Redis

1、导入jar包
java程序如果想要完成对Redis数据库的操作必须需要依赖两个jar包,如果没有相应jar包的同学,可以给我评论或者私信我。
java连接redis数据库的相关jar包
2、单实例连接
导入相关jar包以后,我们就可以进行开发了。首先我们完成单例开发
使用Jedis对象,该对象可以获取和数据的连接

Jedis jedis = new Jedis(host, port);

参数 host : 是你服务器的ip地址;
port : 是Redis数据库的端口号,默认使用 6379;

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

对象创建完成以后,我们就可以使用该对象的set(String key,String values)、get(String key) 方法来完成对Redis数据库的存储了,如果想要存储其他形式的数据可以转成JSON字符串。

jedis.set("addr","中国北京");
System.out.println(jedis.get("addr"));
String username = jedis.get("username");
System.out.println(username);
//通过java程序访问redis	
	@Test
	//获取单一的jedis对象操作
	public void test1(){	
		//1、获取连接对象
		Jedis jedis = new Jedis("192.168.91.128",6379);
		//获取数据
		String username = jedis.get("username");
		System.out.println(username);
		//3、存储
		jedis.set("addr","中国北京");
		System.out.println(jedis.get("addr"));
	}

查询结果
3、连接超时

  • 如果运行上面的代码时,抛出如下异常
redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out
	at redis.clients.jedis.Connection.connect(Connection.java:154)
	at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:83)
	at redis.clients.jedis.Connection.sendCommand(Connection.java:93)
	at redis.clients.jedis.Connection.sendCommand(Connection.java:88)
	at redis.clients.jedis.Jedis.get(Jedis.java:97)
	at com.haiyang.redis.JedisTest.test1(JedisTest.java:18)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.net.SocketTimeoutException: connect timed out
	at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:589)
	at redis.clients.jedis.Connection.connect(Connection.java:148)
	... 28 more


  • 必须设置linux防火墙
 /sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT

4、连接池连接
现在我们讲一下使用连接池进行对Redis数据库进行连接
首先我们需要一个连接池 他就是我们的 JedisPool对象

JedisPool pool = new JedisPool(poolConfig, host, port);

参数 poolConfig : 是一个连接池配置对象,等下详细解释
host : 字符串类型,服务器连接ip
port : Redis数据库端口号 ,默认 6379。

在讲解连接池之前我们先讲解下连接池需要的连接池配置对象 JedisPoolConfig

//创建池子的配置对象
JedisPoolConfig jpc = new JedisPoolConfig();
//连接池最大闲置时间
jpc.setMaxIdle(30);
//连接池最小闲置时间
jpc.setMinIdle(10);
//连接池最大连接数
jpc.setMaxTotal(50);
//创建一个redis连接池
JedisPool pool = new JedisPool(jpc,"192.168.91.128",6379);

//从池子中获取资源
Jedis jedis = pool.getResource();

//操作数据库
jedis.set("xxx","yyyy");
System.out.println(jedis.get("xxx"));

//关闭资源
jedis.close();
pool.close();

在这里插入图片描述
5、封装成工具类
这里我就不仔细给大家讲解步骤了,只是将该类封装成一个工具类,使用时直接调用方法就可以了
1、首先创建一个文件 如 redis.proterties 用于存储连接池配置数据及服务器ip地址和端口

redis.maxIdle=30
redis.minIdle=10
redis.maxTotal=50
redis.url=192.168.91.128
redis.port=6379

在这里插入图片描述
接下来直接上代码

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisPoolUtils {
	
	//创建一个池子
	private static JedisPool pool = null;

	static{
		//加载配置资源
		InputStream in = JedisPoolUtils.class.getClassLoader().getResourceAsStream("redis.properties");
		
		Properties pro = new Properties();
		try {
			pro.load(in);
		} catch (IOException e) {
			e.printStackTrace();
		}
		//创建池子的配置对象
		JedisPoolConfig jPoolConfig =  new JedisPoolConfig();
		jPoolConfig.setMaxIdle(Integer.parseInt(pro.get("redis.maxIdle").toString()));//最大闲置数
		jPoolConfig.setMinIdle(Integer.parseInt(pro.get("redis.minIdle").toString()));  //最小闲置数
		jPoolConfig.setMaxTotal(Integer.parseInt(pro.get("redis.maxTotal").toString()));  //最大连接数
		//创建池子
		pool = new JedisPool(jPoolConfig,pro.get("redis.url").toString(),Integer.parseInt(pro.get("redis.port").toString()));
	}
	//返回操作数据库的对象
	public static Jedis getJedis(){
		return pool.getResource();
	}
	public static void closeResource(){
		getJedis().close();
		pool.close();
	}
}

以上就是我的学习心得,希望对大家有用,谢谢大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值