博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis 的 Java 客户端
阅读量:3948 次
发布时间:2019-05-24

本文共 4009 字,大约阅读时间需要 13 分钟。

Redis 的 Java 客户端

1. 开启远程连接

因为 Redis 默认的是不支持远程连接,需要我们手动配置一下 redis.conf 这个配置文件:

  1. 注释掉 bing:127.0.0.1
  2. 开启密码校验,去掉 requirepass 的注释

改过之后,保存退出,启动 Redis 。

2. Jedis

2.1 基本使用

Jedis 的 GitHub 的地址:

首先创建一个普通的 Maven 项目,添加 Jedis 的依赖,代码如下:

redis.clients
jedis
3.2.0
jar
compile

然后创建一个测试方法。

public class JedisPing {
public static void main(String[] args) {
// 1.构建和 Redis 的连接 Jedis jedis = new Jedis("192.168.253.130", 6379); // 2.密码认证 jedis.auth("javaboy"); // 3.调用 ping() 方法进行测试 String ping = jedis.ping(); // 4.输出 pong 代表 Redis 连接成功了 System.out.println(ping); }}

对于 Jedis 而言,一单连接上 Redis 服务端,剩下的操作就很容易了。

在 Jedis 中,由于方法的 API 和 Redis 的命令高度一致,所以 Jedis 的方法见名知意,直接使用即可。

2.2 连接池

在实际应用中,Jedis 实例我们一般都是通过连接池来获取,由于 Jedis 对象不是线程安全的,所以,当我们在使用 Jedis 对象时,从连接池获取 Jedis,使用完成之后,再还给连接池。

public class JedisPoolTest {
public static void main(String[] args) {
// 1.构建一个 Jedis 连接池 JedisPool jedisPool = new JedisPool("192.168.253.130",6379); // 2.从连接池中获取一个 Jedis 连接 Jedis jedis = jedisPool.getResource(); // 3.密码认证 jedis.auth("javaboy"); // 4.Jedis 操作 System.out.println(jedis.ping()); // 5归还连接 jedis.close(); }}

假如现在第4步操作抛出异常,会导致第5步无法正常执行,所以我们要对代码进行改进,第一时间想到的就是添加 finally 块。

public class JedisPoolTest {
public static void main(String[] args) {
// 1.构建一个 Jedis 连接池 JedisPool jedisPool = new JedisPool("192.168.253.130",6379); // 2.从连接池中获取一个 Jedis 连接 Jedis jedis = jedisPool.getResource(); // 3.密码认证 jedis.auth("javaboy"); // 4.Jedis 操作 try {
System.out.println(jedis.ping()); } catch (Exception e) {
e.printStackTrace(); } finally {
// 5.归还连接 jedis.close(); } }}

但是这段代码无法实现强约束,我们可以做进一步的改进:

public interface CallWithJedis {
void call(Jedis jedis);}public class Redis {
private JedisPool jedisPool; public Redis() {
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig(); // 连接池最大空闲数 poolConfig.setMaxIdle(30); // 连接池最大连接数 poolConfig.setMaxTotal(1000); // 连接池最大等待时间,如果是 -1 表示没有限制 poolConfig.setMaxWaitMillis(30000); // 在空闲时检查有效性 poolConfig.setTestOnBorrow(true); /** * 1. 连接池 * 2. Redis 地址 * 3. Redis 端口号 * 4. 连接超时时长 * 5. Redis 连接密码 */ jedisPool = new JedisPool(poolConfig, "192.168.253.130", 6379, 30000, "javaboy"); } public void execute(CallWithJedis callWithJedis) {
Jedis jedis = null; try {
jedis = jedisPool.getResource(); callWithJedis.call(jedis); } catch (Exception e) {
e.printStackTrace(); } finally {
if (null != jedis) {
jedis.close(); } } }}Redis redis = new Redis();redis.execute(new CallWithJedis() {
public void call(Jedis jedis) {
System.out.println(jedis.ping()); }});

3. Lettuce

GitHub:

Lettuce 和 Jedis 的比较:

  1. Jedis 在实现的过程中是直接连接 Redis 的,在多个线程之间共享一个 Jedis 实例,这是线程不安全的,如果想要在多线程场景下使用 Jedis,就得使用连接池,这样每个线程都有自己的 Jedis 实例。
  2. Lettuce 基于目前很火的 Netty NIO 框架来创建,所以克服了 Jedis 中线程不安全的问题,Lettuce 支持同步、异步以及响应式调用,多个线程可以共享一个连接实例。

使用 Lettuce ,首先创建一个普通的 Maven 项目,添加 Lettuce 依赖:

io.lettuce
lettuce-core
5.2.2.RELEASE

简单测试案例:

public class JedisPing {
public static void main(String[] args) {
RedisClient redisClient = RedisClient.create("redis://javaboy@192.168.253.130"); StatefulRedisConnection
connect = redisClient.connect(); RedisCommands
sync = connect.sync(); sync.set("name","zs"); System.out.println(sync.get("name")); }}

注意这里的密码传递方式,密码直接写在连接地址中。

转载地址:http://xpqwi.baihongyu.com/

你可能感兴趣的文章
android 在新建短信时,加入名称为","(英文逗号)的联系人时,应用崩溃的修改
查看>>
android 关于LCD背光调节渐变过程引起背光闪烁问题
查看>>
android 保存具有不同前缀的同一号码分别为A和B,用其中一个呼叫,通话记录一直显示另一个联系人名字的问题
查看>>
android 在手机中预置联系人/Service Number
查看>>
android 系统语言为英语时,Contacts联系人名字含有特殊前缀后缀(Dr. Mr. Lt等)时的相关问题处理
查看>>
android 短信下,添加联系人,进入联系人多选界面出现联系人电话号码晃动的问题
查看>>
android 对一个合并后的联系人选择编辑,手机屏幕会缓慢变暗后再进入编辑界面的问题
查看>>
正确学习javascript。困惑的指南
查看>>
SERO幻影社区的背景怎么样?几大主流隐私币种技术分析!
查看>>
SERO目前具备的十大技术特点
查看>>
Neo4j CQL语句学习Day3
查看>>
Neo4j CQL学习Day4
查看>>
Mysql 数据库
查看>>
MySQL数据库练习
查看>>
Neo4j学习Day5
查看>>
Tomcat的基本配置
查看>>
Neo4j学习Day6~7
查看>>
Servlet学习笔记
查看>>
JSP相关介绍
查看>>
Session和Cookie
查看>>