时间:2021-05-20
在Spring Boot 1.x中默认是Jedis作为客户端,但是在Spring Boot2.x后,默认就是Lettuce
Redis的远程连接,默认是不支持的,需要手动开启
修改config文件:
注释掉bind:127.0.0.1
开启密码校验,去掉requireprass的注释
使用jedis客户端:
jedis的GitHub地址:https://github.com/xetorthio/jedis
如何远程连接:
//构造一个jedis对象Jedis jedis=new Jedis("127.0.0.1");//有密码的话要认证jedis.auth("root");//测试是否连接成功String ping =jedis.ping();//返回pong表示成功System.out.println(ping);jedis中的方法API和redis中的操作数据的命令一致,所以使用起来很方便。
在实际应用中,Jedis实例一般用连接池获取,因为java本来就是多线程的,而jedis对象不是线程安全的,所以要使用连接池,从连接池中获取Jedis,用完之后再还给连接池。保证他的线程是安全的。
如何创建Jedis连接池
//1.构造一个jedis连接池JedisPool pool=new JedisPool("127.0.0.1",6379);//2.从连接池中获取一个jedis连接Jedis jedis=pool.getResource();//3.测试是否连接成功String ping =jedis.ping();//返回pong表示成功System.out.println(ping);//4.归还连接jedis.close();如果第三步,也就是我们的业务代码出问题的话,是无法进行到第四步的,我们可以做一个优化,在业务代码块中try catch给close加一个finally,并在finally中判断jedis不为空的情况下给他归还。这样的话,就可以保证每次都归还jedis对象了。
但是这种的明显感觉很臃肿,而且约束性不强,因此可以再优化,就是以接口和接口实现的形式去处理,需要调用的时候再去实现这个接口:
创建接口:
public interface CallJedis { void call(Jedis jedis);}创建接口的实现
public class Redis { private JedisPool pool; public Redis() { GenericObjectPoolConfig config = new GenericObjectPoolConfig(); //连接池最大空闲数 config.setMaxIdle(300); //最大连接数 config.setMaxTotal(1000); //连接最大等待时间,如果是 -1 表示没有限制 config.setMaxWaitMillis(30000); //在空闲时检查有效性 config.setTestOnBorrow(true); /** * 1. Redis 地址 * 2. Redis 端口 * 3. 连接超时时间 * 4. 密码 */ pool = new JedisPool(config, "192.168.91.128", 6379, 30000, "root"); } public void execute(CallJedis callJedis) { try (Jedis jedis = pool.getResource()) { callJedis.call(jedis); } }}调用接口:
Redis redis = new Redis();redis.execute(jedis -> { System.out.println(jedis.ping());});使用Lettuce客户端:
GitHub地址:https://github.com/lettuce-io/lettuce-core
Lettuce和Jedis比较
Jedis在实现过程中是直接连接redis的,在多个线程之间共享一个jedis实例,是线程不安全的,如果想在多线程场景下使用jedis,就得使用连接池,这样,每个线程都有自己的jedis实例,但是有一个弊端,就是会消耗过多的物理资源。
Lettuce是线程安全的,因为使用了Netty NIO框架构建。支持同步,异步,以及响应调用,多个线程可以共享一个Lettuce实例,不用担心多线程的并发问题。
在java中如何使用:
1.添加依赖。
2.测试
//创建连接root是密码,127.0.0.1是服务端地址 RedisClient redisClient =RedisClient.create("redis://root@127.0.0.1"); //创建连接通道 StatefulRedisConnection<String, String> connect = redisClient.connect(); //获取同步调用对象 RedisCommands<String, String> sync = connect.sync(); //赋值 sync.set("name", "zl"); //取值 String name = sync.get("name"); //测试 System.out.println(name); }以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Redis命令的详解及简单实例Redis命令用于在redis服务上执行操作。要在redis服务上执行命令需要一个redis客户端。Redis客户端在我们之前下载
Redis命令用于在redis服务器上执行某些操作。要在Redis服务器上运行的命令,需要一个Redis客户端。Redis客户端在Redis的包,这已经我们前面
1、redis的几种常见客户端:Jedis:是Redis的Java实现客户端,提供了比较全面的Redis命令的支持;Redisson:实现了分布式和可扩展的Ja
今天使用jedis客户端api连接远程连接redis的时候,一直报错,如下:redis.clients.jedis.exceptions.JedisConnec
最近项目要用到redis,很多东西忘得差不多了,稍微回顾了利用Java客户端连接redis的过程,这里jedis是连接redis的Java客户端,如果没有Mav