jedis

SpringBoot系列: Redis 共享Session

二次信任 提交于 2020-02-22 05:15:43
Web项目Session管理是一个很重要的话题, 涉及到系统横向扩展, SpringBoot已经为共享Session很好的解决方案, 这篇文章关注使用Redis共享会话, 同时这也是最常用的方法. ============================ pom.xml 增加依赖 ============================ SpringBoot2 已经将Redis底层客户端从Jedis切换为Lettuce库, Lettuce 是基于Netty的实现, 比 Jedis 更加高效, 并且是线程安全的, 能满足多线程环境下并发需求, 同时支持线程池. 使用 Lettuce 客户端(推荐), pom.xml的依赖有: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency> <!-- Session 依赖 --> <dependency> <groupId>org

RocketMQ生产者和消费者

北战南征 提交于 2020-02-18 17:18:08
一.导入依赖 <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.1.0-incubating</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.1</version> </dependency> 二:生产者 import org.apache.rocketmq.client.exception.MQClientException; import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.client.producer.SendResult; import org

spark的运行指标监控

房东的猫 提交于 2020-02-17 01:34:33
sparkUi的4040界面已经有了运行监控指标,为什么我们还要自定义存入redis? 1.结合自己的业务,可以将监控页面集成到自己的数据平台内,方便问题查找,邮件告警 2.可以在sparkUi的基础上,添加一些自己想要指标统计 一、spark的SparkListener sparkListener是一个接口,我们使用时需要自定义监控类实现sparkListener接口中的各种抽象方法,SparkListener 下各个事件对应的函数名非常直白,即如字面所表达意思。 想对哪个阶段的事件做一些自定义的动作,变继承SparkListener实现对应的函数即可,这些方法会帮助我监控spark运行时各个阶段的数据量,从而我们可以获得这些监控指标数据 abstract class SparkListener extends SparkListenerInterface {//stage完成的时调用 override def onStageCompleted(stageCompleted: SparkListenerStageCompleted): Unit = { } //stage提交时调用 override def onStageSubmitted(stageSubmitted: SparkListenerStageSubmitted): Unit = { } override def

Redis常见问题及处理方法

江枫思渺然 提交于 2020-02-13 07:37:16
一、Redis状态检查 唯一标记一个redis实例的是ip和端口,前端是用tcp方式来访问redis的,我们提供给应用访问的是一个ip+63379(一般使用63379) 端口。因此我们执行如下命令检查redis状态: 上面的role这个值一定是master的,只要保证vip在master上我们的Padis cache服务就是没有问题的,如果不通或者role的角色是slave,那就得继续查看是什么问题. 二、两个redis的角色都是slave的问题 当两个主机都挂了或者我们自己不小心将两个redis停了,并且我们用下面的命令检查 /wls/wls81/redis/bin/redis-cli -h {ip} -p {port} -a {password} info replication 发现无论是vip还是另外的两个ip都是role:slave 的角色,这个时候需要对vip所在的主机执行slaveof no one 的操作,将vip 所在的redis变成master,如: /wls/wls81/redis/bin/redis-cli -h {vip} -p {port} -a {password} slaveof no one 三、sentinel的配置参数 我们的sentinel 配置文件里面有两个重要的配置 sentinel monitor pds_jks-core-prd 10

redis(3)redis的基础入门(java)

荒凉一梦 提交于 2020-02-13 07:36:42
1.java连接redis Jedis jedis = new Jedis("192.168.1.102", 6379);//报错,拒绝连接 解决方案: 关闭linux防火墙,redis的配置文件(redis.config)的第79行需要注释掉bind 127.0.0.1(#bind 127.0.0.1),第88行protected-mode yes 默认的yes改为no。 2.api 与linux基本一样; <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> public class jedisTest1 { public static void main(String[] args) { Jedis jedis = new Jedis("192.168.1.102", 6379);//jedis.auth("密码")//redis设置密码 System.out.println(jedis.ping());//ping,默认0号库 jedis.set("k1", "v1");//set System.out.println(jedis.get("k1"));//get jedis.select(2);/

redis之jedis客户端使用shardjedis config

不打扰是莪最后的温柔 提交于 2020-02-13 07:36:22
JedisPoolConfig config = new JedisPoolConfig(); //连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true config.setBlockWhenExhausted( true ); //设置的逐出策略类名, 默认DefaultEvictionPolicy(当连接超过最大空闲时间,或连接数超过最大空闲连接数) config.setEvictionPolicyClassName( "org.apache.commons.pool2.impl.DefaultEvictionPolicy" ); //是否启用pool的jmx管理功能, 默认true config.setJmxEnabled( true ); //MBean ObjectName = new ObjectName("org.apache.commons.pool2:type=GenericObjectPool,name=" + "pool" + i); 默 认为"pool", JMX不熟,具体不知道是干啥的...默认就好. config.setJmxNamePrefix( "pool" ); //是否启用后进先出, 默认true config.setLifo( true ); //最大空闲连接数, 默认8个 config.setMaxIdle( 8 );

Jedis之JedisPoolConfig

谁说胖子不能爱 提交于 2020-02-13 07:31:08
JedisPoolConfig 继承关系 JedisPoolConfig 需要依赖 Apache common pool ,其中 pool 配置依赖 common pool 中的 BaseObjectPoolConfig 类 , 该类中定义了相关属性的缺省值,在 JedisPoolConfig 中定义了相关的属性。属性值如下 参数 值 setTestWhileIdle(); true setMinEvictableIdleTimeMillis(); 60000 setTimeBetweenEvictionRunsMillis(); 30000 setNumTestsPerEvictionRun(); -1                               Jedispoolconfig 继承关系图 JedisPoolConfig 参数一览 参数 说明 setBlockWhenExhausted(boolean blockWhenExhausted) 当池中的资源耗尽时是否进行阻塞 , 设置 false 直接报错 ,true 表示会一直等待,直到有可用资源 setEvictionPolicyClassName(String evictionPolicyClassName) 设置逐出策略 , 默认策略为 "org.apache.commons.pool2.impl.

Java & Jedis:NoSuchElementException: Timeout waiting for idle object

*爱你&永不变心* 提交于 2020-02-12 18:58:13
jedis异常:NoSuchElementException: Timeout waiting for idle object_bbirdsky-CSDN博客 https://blog.csdn.net/bbirdsky/article/details/37602673 连接池资源未释放,导致的内存泄露问题。 这种问题是一个慢性问题,需要时间积累才会发作。 jedis pool - 国内版 Bing https://cn.bing.com/search?q=jedis+pool&qs=n&form=QBRE&sp=-1&pq=jedis+pool&sc=0-10&sk=&cvid=F6863EA05EFB4223A81CBED2035412E5 Jedis使用之JedisPool的使用 - 简书 https://www.jianshu.com/p/8334151cbc10 来源: https://www.cnblogs.com/rgqancy/p/12300192.html

Lua语言模型 与 Redis应用

走远了吗. 提交于 2020-02-12 05:48:08
参考:https://blog.csdn.net/zjf280441589/article/details/52716720 从 2.6版本 起, Redis 开始支持 Lua 脚本 让开发者自己扩展 Redis. 本篇博客主要介绍了 Lua 语言不一样的设计模型(相比于Java/C/C++、JS、PHP), 以及 Redis 对 Lua 的扩展, 最后结合 Lua 与 Redis 实现了一个支持过期时间的分布式锁. 我们希望这篇博客的读者朋友可以在读完这篇文字之后, 体会到 Lua 这门语言不一样的设计哲学 , 以及 更加得心应手的使用/扩展 Redis . 案例-实现访问频率限制: 实现访问者 $ip 在一定的时间 $time 内只能访问 $limit 次. 非脚本实现 private boolean accessLimit(String ip, int limit, int time, Jedis jedis) { boolean result = true; String key = "rate.limit:" + ip; if (jedis.exists(key)) { long afterValue = jedis.incr(key); if (afterValue > limit) { result = false; } } else { Transaction

Lua 与 Redis

江枫思渺然 提交于 2020-02-12 05:38:45
Lua 与 Redis 标签: Java与NoSQL 从 2.6版本 起, Redis 开始支持 Lua 脚本 让开发者自己扩展 Redis … 案例-实现访问频率限制: 实现访问者 $ip 在一定的时间 $time 内只能访问 $limit 次. 非脚本实现 private boolean accessLimit(String ip, int limit, int time, Jedis jedis) { boolean result = true; String key = "rate.limit:" + ip; if (jedis.exists(key)) { long afterValue = jedis.incr(key); if (afterValue > limit) { result = false; } } else { Transaction transaction = jedis.multi(); transaction.incr(key); transaction.expire(key, time); transaction.exec(); } return result; } 以上代码有两点缺陷 可能会出现竞态条件: 解决方法是用 WATCH 监控 rate.limit:$IP 的变动, 但较为麻烦; 以上代码在不使用 pipeline