jedis

jedis

jedis用于java语言连接redis服务,并提供对应的操作API。就像我们使用JDBC连接数据库一样,但是这个更加简单。

首先下载jar包,在(https://mvnrepository.com/)下载。包名:jedis,然后将jar包添加到项目中(新建一个(如果没有)lib目录,将jar包粘贴到lib目录下,然后右键=》add as lib)。就可以使用了。

//构造方法,指定IP和端口,IP自然是redis所在机器的IP
Jedis jedis = new Jedis("192.168.183.137", 6379);
//通过对象进行操作,操作的方法和redis中一样
String name = jedis.get("name");
System.out.println(name);
//使用完毕后记得关闭连接释放资源哦
jedis.close();

我在第一次运行的时候报错:

java.lang.NoClassDefFoundError:com/google/gson/Gson也就是说找不到这个包,看来这个jar包里面还是用了其他jar包,所以我们也得把Gson包导入.但是当我导入Hson包的时候又报错,要导入另外的包,可我看教学视频上没有导入其他包也没有报错啊,于是我就去论坛求助。

后来发现是jar包版本的问题,我下载的是最新版本的jar包,可能后面的jar包确实用到了其他的,不过为了方便我还是重新下载了3.1.0版本的包。

Jedis jedis = new Jedis("192.168.183.137", 6380);
String name = jedis.get("name");
System.out.println(name);
jedis.close();

代码就在上面,很简单,其他操作和前面讲的一样,例如jedis.dbSize()就和redis中的dbsize一样,一定不要忘了最后close哦。

对于一个简单的数据库应用,由于对于数据库的访问不是很频繁。这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销。但是对于一个复杂的数据库应用,情况就完全不同了。频繁的建立、关闭连接,会极大的减低系统的性能,因为对于连接的使用成了系统性能的瓶颈。

前面讲JDBC的时候就讲过数据库连接池,同样的,为了提高性能,我们在使用redis的手也会用到数据库连接池。

Jedis的数据库连接池对象为JedisPool。

通过构造方法创建对象,我们可以查看一下构造方法,发现无参数的构造方法默认IP为127.0.0.1,port为6379。这不是我们想要的,我们再查看一下其他构造方法,发现public JedisPool(String host, int port)这个方法不错,可以指定IP与端口,符合我们的需求。于是我们用这个方法创建对象。

然后将原来的测试代码修改成从连接池获取对象,然后运行,发现 :欸,报错了。找不到类文件,这是什么情况呢?我们看那个构造方法的代码,发现这个函数其实是调用了另一个构造方法,也就是public JedisPool(GenericObjectPoolConfig poolConfig, String host, int port)这个方法。而GenericObjectPoolConfig这个类不是Jedis这个包中的,报错已经提示我们了这个类所在的包:org.apache.commons.pool2.impl.GenericObjectPoolConfig所以我们必须先导入这个包。我导入的是commons-pool2-2.11.1.jar这个版本的。运行 = 》报错,发现这个包用到了其他包,继续导入org/slf4j,我导入的是slf4j-api-1.7.36.jar然后运行,可以看到结果了,但是前面有一些红色的输出。

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

我们可以不管了,也可以按照他的提示进入网站寻找解决方法。我觉定进入网站查看解决办法。进入网站后 Ctrl + F 进行关键字匹配。第一个错误的解决方法如下:

Failed to load class org.slf4j.impl.StaticLoggerBinder

This warning message is reported when the org.slf4j.impl.StaticLoggerBinder class could not be loaded into memory. This happens when no appropriate SLF4J binding could be found on the class path. Placing one (and only one) of slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar on the class path should solve the problem.

Note that slf4j-api versions 2.0.x and later use the ServiceLoader mechanism. Backends such as logback 1.3 and later which target slf4j-api 2.x, do not ship with org.slf4j.impl.StaticLoggerBinder. If you place a logging backend which targets slf4j-api 2.0.x, you need slf4j-api-2.x.jar on the classpath. See also relevant faq entry.

since 1.6.0 As of SLF4J version 1.6, in the absence of a binding, SLF4J will default to a no-operation (NOP) logger implementation.

If you are responsible for packaging an application and do not care about logging, then placing slf4j-nop.jar on the class path of your application will get rid of this warning message. Note that embedded components such as libraries or frameworks should not declare a dependency on any SLF4J binding but only depend on slf4j-api. When a library declares a compile-time dependency on a SLF4J binding, it imposes that binding on the end-user, thus negating SLF4J's purpose. 

Placing one (and only one) of *slf4j-nop.jar* *slf4j-simple.jar*, *slf4j-log4j12.jar*, *slf4j-jdk14.jar* or *logback-classic.jar* on the class path should solve the problem.

我们放一个*slf4j-log4j12.jar*又报错没有log4j,继续添加log4j的jar包,再运行,谢天谢地,无错误成功运行。

继续,我们知道刚刚我的使用的两个参数的方法最终是调用三个参数的方法,而我们只传入了两个参数,那那个多出来的参数是什么呢?查看这个构造方法,发现里面什么也没有,Config是配置的意思。我们不妨new一个GenericObjectPoolConfig 对象,然后查看它的属性和方法。我们发现里面的方法都是获取或者是设置一些参数的,所以我们知道了这是设置连接池的属性的,例如最大连接数啊,等等。

通过数据库连接池能提升性能,但他仍然有不足的地方:不够灵活。因为我们连接的数据库的信息在程序中写死了(紧耦合),如果我们要改变数据库呢?那就得改写代码,然后把整个项目重新编译,发布。是不是很麻烦,这时候我们可以用前面用到过的技术-----通过配置文件的方式连接数据库,我们在代码中只指明从某个地方获取配置文件,然后根据配置文件连接数据库,如果要修改数据库连接,则只需要修改配置文件就行了。

具体操作如下:

在src(如果是web项目则在resource)目录下创建redis.properties文件。编辑内容如下:

redis.host=192.168.183.137
redis.port=6380

注意,虽然host是string类型,但是我们不需要打引号,因为配置文件中所有value都是string类型的,如果打了引号反而会出错。

然后就是调用java中的资源获取器读取配置文件了,

public class JedisUtils {

    static ResourceBundle bundle ;
    static String host ;
    static int port ;
    static JedisPool jedisPool;
    static {
        bundle = ResourceBundle.getBundle("redis");
        host = bundle.getString("redis.host");
        port = Integer.parseInt(bundle.getString("redis.port"));
        jedisPool = new JedisPool(host, port);
    }
    public static Jedis getJedis() {
        return jedisPool.getResource();
    }
}

资源获取器的使用一定要牢记,并且注意,getBundle里面的参数是参数文件名,但是不要加properties后缀。

这下就能通过配置文件连接数据库了。

可视化客户端工具:redis-desktop-manager
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Little BigUs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值