Spring Boot Redis客户端远程操作实现过程解析

在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);
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • SpringBoot使用Redisson实现分布式锁(秒杀系统)

    前面讲完了Redis的分布式锁的实现,接下来讲Redisson的分布式锁的实现,一般提及到Redis的分布式锁我们更多的使用的是Redisson的分布式锁,Redis的官方也是建议我们这样去做的.Redisson点我可以直接跳转到Redisson的官方文档. 1.1.引入Maven依赖 <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter&l

  • SpringBoot2整合Redis缓存三步骤代码详解

    遵循SpringBoot三板斧 第一步加依赖 <!-- Redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- redis依赖commons-pool 这个依赖一定要添加 --> <

  • Springboot使用redis进行api防刷限流过程详解

    这篇文章主要介绍了Springboot使用redis进行api防刷限流过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 api限流的场景 限流的需求出现在许多常见的场景中 秒杀活动,有人使用软件恶意刷单抢货,需要限流防止机器参与活动 某api被各式各样系统广泛调用,严重消耗网络.内存等资源,需要合理限流 淘宝获取ip所在城市接口.微信公众号识别微信用户等开发接口,免费提供给用户时需要限流,更具有实时性和准确性的接口需要付费. api限流实

  • SpringBoot+Vue+Redis实现单点登录(一处登录另一处退出登录)

    一.需求 实现用户在浏览器登录后,跳转到其他页面,当用户在其它地方又登录时,前面用户登录的页面退出登录(列如qq挤号那种方式) 二.实现思路 用户在前端填写用户信息登录后,后台接收数据先去数据库进行判断,如果登录成功,创建map集合,以用户id为键,token为值,先通过当前登录用户的id去获取token,如果token存在说明该用户已经登录过,调用redis以token为键删除上个用户的信息,调用方法生成新token,并将token存入map集合,将用户信息存入redis,并将token存入c

  • springboot集成redis实现简单秒杀系统

    本文实例为大家分享了springboot集成redis实现简单秒杀系统的具体代码,供大家参考,具体内容如下 项目是有地址的,我会放到文章的最后面 1. 直接service,我们会介绍两种秒杀模式 public interface GoodsService { /** * 通过lua脚本实现的秒杀 * @param skuCode 商品编码 * @param buyNum 购买数量 * @return 购买数量 */ Long flashSellByLuaScript(String skuCode

  • SpringBoot通过RedisTemplate执行Lua脚本的方法步骤

    lua 脚本 Redis 中使用 lua 脚本,我们需要注意的是,从 Redis 2.6.0后才支持 lua 脚本的执行. 使用 lua 脚本的好处: 原子操作:lua脚本是作为一个整体执行的,所以中间不会被其他命令插入. 减少网络开销:可以将多个请求通过脚本的形式一次发送,减少网络时延. 复用性:lua脚本可以常驻在redis内存中,所以在使用的时候,可以直接拿来复用,也减少了代码量. 1.RedisScript 首先你得引入spring-boot-starter-data-redis依赖,其

  • SpringBoot+Redis执行lua脚本的方法步骤

    1.背景 有时候,我们需要一次性操作多个 Redis 命令,但是 这样的多个操作不具备原子性,而且 Redis 的事务也不够强大,不支持事务的回滚,还无法实现命令之间的逻辑关系计算.所以,一般在开发中,我们会利用 lua 脚本来实现 Redis 的事务. 2.lua 脚本 Redis 中使用 lua 脚本,我们需要注意的是,从 Redis 2.6.0后才支持 lua 脚本的执行. 使用 lua 脚本的好处: 原子操作:lua脚本是作为一个整体执行的,所以中间不会被其他命令插入. 减少网络开销:可

  • SpringBoot下token短信验证登入登出权限操作(token存放redis,ali短信接口)

    SpringBoot下token短信验证登入登出(token存放redis) 不对SpringBoot进行介绍,具体的可以参考官方文档 介绍:token基本使用,redis基本使用 思路:获取短信(验证并限制发送次数,将code存放redis)-->登入(验证并限制错误次数,将用户信息及权限放token,token放redis)-->查询操作(略),主要将前两点,不足的希望指出,谢谢 步骤: 1.整合Redis需要的依赖,yml自行配置,ali短信接口依赖(使用引入外部包的方式) <de

  • Spring Boot Redis客户端远程操作实现过程解析

    在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("

  • 使用python远程操作linux过程解析

    这篇文章主要介绍了使用python远程操作linux过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在云服务测试中,往往需要我们进入云服务内容进行相关内容的测试.这测试可以使用平台自身的noVNC.外部辅助xshell等工具连接到云服务内部进行测试. 但是在如此反复的测试操作中,就需要用到自动化测试方法去解决这方面的需求. 在python中我们可以通过第三方库paramiko,对linux的云服务器进行操作. 如下命令先行安装 pip

  • spring boot基于DRUID实现数据源监控过程解析

    这篇文章主要介绍了spring boot基于DRUID实现数据源监控过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 随着需求和技术的日益革新,spring boot框架是越来越流行,她也越来越多地出现在我们的项目中,当然最主要的原因还是因为spring boot构建项目实在是太爽了,构建方便,开发简单,而且效率高.今天我们并不是来专门学习spring boot项目的,我们要讲的是数据源的加密和监控,监控到好说,就是不监控也没什么问题,但

  • Spring Boot 2.X快速整合jpa过程解析

    一.JPA介绍 JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. SpringData是Spring的一个子项目.用于简化数据库访问,支持NoSQL和关系数据存储,其主要目标是使数据库的访问变得方便快捷. Spring Data JPA致力于减少数据访问层(DAO)的开发量,开发者唯一要做的就只是声明持久层的接口,其他都交给Spring Data JPA 来帮你完成!

  • spring boot+redis 监听过期Key的操作方法

    前言: 在订单业务中,有时候需要对订单设置有效期,有效期到了后如果还未支付,就需要修改订单状态.对于这种业务的实现,有多种不同的办法,比如: 1.使用querytz,每次生成一个订单,就创建一个定时任务,到期后执行业务代码: 2.rabbitMq中的延迟队列: 3.对Redis的Key进行监控: 1.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring

  • Spring boot+redis实现消息发布与订阅的代码

    一.创建spring boot项目 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId>

  • spring boot+ redis 接口访问频率限制的实现

    生产环境下可以解决的问题: 1.短信验证码请求评率限制(防止抓包短信轰炸) 2.热点数据请求评率限制(防止数据库爆炸) @Component public class BlackInterceper implements HandlerInterceptor { @Autowired private RedisTemplate<String, Object> redisTemplate; private Logger log = LoggerFactory.getLogger(this.get

  • spring boot学习笔记之操作ActiveMQ指南

    目录 前言 ActiveMQ 介绍 队列(Queue) 广播(Topic) 同时支持队列(Queue)和广播(Topic) 总结 前言 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合.异步消息.流量削锋等问题,实现高性能.高可用.可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件. 目前在生产环境中使用较多的消息队列有 ActiveMQ.RabbitMQ.ZeroMQ.Kafka.MetaMQ.RocketMQ 等. 特性 异步性:将耗时的同步操作通过以发送消息的方式进行了异步化

  • Spring Boot整合Elasticsearch实现全文搜索引擎案例解析

    简单说,ElasticSearch(简称 ES)是搜索引擎,是结构化数据的分布式搜索引擎.Elastic Search是一个开源的,分布式,实时搜索和分析引擎.Spring Boot为Elasticsearch及Spring Data Elasticsearch提供的基于它的抽象提供了基本的配置.Spring Boot提供了一个用于聚集依赖的spring-boot-starter-data-elasticsearch 'StarterPOM'. 引入spring-boot-starter-dat

  • python redis 批量设置过期key过程解析

    这篇文章主要介绍了python redis 批量设置过期key过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在使用 Redis.Codis 时,我们经常需要做一些批量操作,通过连接数据库批量对 key 进行操作: 关于未过期: 1.常有大批量的key未设置过期,导致内存一直暴增 2.rd需求 扫描出这些key,rd自己处理过期(一般dba不介入数据的修改) 3.dba 批量设置过期时间,(一般测试可以直接批量设置,线上谨慎操作) 通过

随机推荐