Redis

基于 Flink 和 Drools 的实时日志处理

别等时光非礼了梦想. 提交于 2021-01-06 09:47:27
背景 日志系统接入的日志种类多、格式复杂多样,主流的有以下几种日志: filebeat采集到的文本日志,格式多样 winbeat采集到的操作系统日志 设备上报到logstash的syslog日志 接入到kafka的业务日志 以上通过各种渠道接入的日志,存在2个主要的问题: 格式不统一、不规范、标准化不够 如何从各类日志中提取出用户关心的指标,挖掘更多的业务价值 为了解决上面2个问题,我们基于flink和drools规则引擎做了实时的日志处理服务。 系统架构 架构比较简单,架构图如下: 各类日志都是通过kafka汇总,做日志中转。 flink消费kafka的数据,同时通过API调用拉取drools规则引擎,对日志做解析处理后,将解析后的数据存储到Elasticsearch中,用于日志的搜索和分析等业务。 为了监控日志解析的实时状态,flink会将日志处理的统计数据,如每分钟处理的日志量,每种日志从各个机器IP来的日志量写到Redis中,用于监控统计。 模块介绍 系统项目命名为eagle。 eagle-api:基于springboot,作为drools规则引擎的写入和读取API服务。 eagle-common:通用类模块。 eagle-log:基于flink的日志处理服务。 重点讲一下eagle-log: 对接kafka、ES和Redis 对接kafka和ES都比较简单

【Redis】基本数据类型

一世执手 提交于 2021-01-06 09:44:00
一、概述 二、String(字符串) 三、List(列表) 四、Hash(字典) 五、Set(集合) 六、Sorted Set(有序集合) 一、概述   * Redis目前支持5种数据类型,分别是: String(字符串) List(列表) Hash(字典) Set(集合) Sorted Set(有序集合) 下面就分别介绍这五种数据类型及其相应的操作命令。 二、String(字符串) String 是简单的 key-value 键值对, value 不仅可以是 String ,也可以是 数字 。 String 在 redis 内部存储默认就是一个 字符串 ,被 redisObject 所引用,当遇到 incr,decr 等操作时会转成 数值型 进行计算,此时 redisObject 的 encoding 字段为 int 。 String类型在底层实现其实是SSD,C语言中的结构体 应用场景 : String 是最常用的一种数据类型,普通的 key/value 存储都可以归为此类 常规key-value缓存应用; 常规计数:微博数,粉丝数 等。 redis 127.0.0.1:6379> SET mykey "redis" OK redis 127.0.0.1:6379> GET mykey "redis" 三、List(列表) Redis 列表 是简单的字符串列表,可以类比到C+

【Redis】五大数据类型

自闭症网瘾萝莉.ら 提交于 2021-01-06 09:11:16
Redis五大数据类型 String 设置key 获取key get获取 set设置 getset 先get再set mget mset 同时设置、获取多个值 setnx msetnx 不存在设置 setex 设置过期时间 append 追加 strlen 获取长度 i++ 字符串范围 getrange 获得指定范围字符串 setrange 替换 指定位置开始的字符串 list 插入 lpush 从左边插入,插入到列表头部 rpush 从右边插入 linsert 指定值 前/后插入 rpoplpush 移除列表的最后一个元素 移除 lpop rpop 从头或尾移除 lrem 移除指定的值 ltrim 截取区间内的值 更新 获取值 lrange 获取区间内的值 lindex 通过下标获取值 llen 获取长度 Set(集合) 添加 sadd 添加元素 移除 srem 移除指定元素 spop 随机删除元素 smove 将一个指定的值移到另一个集合 获取 smembers 查看指定set的所有值 sismember 判断一个值是不是在set中 srandmember 随机抽取指定个数的元素 scard 获取set集合中的个数 交并补 hash 设置 hset hmset 同时设置多个值 hsetnx 不存在设置 获取 hget hmget 同时获取多个值 获取键、值 hgetall

没能力非要秀,非要自己撸,酿成重大生产事故!

邮差的信 提交于 2021-01-06 07:24:09
你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 urlify.cn/MVBvmy 推荐:https://www.xttblog.com/?p=5133 基于Redis使用分布式锁在当今已经不是什么新鲜事了。 本篇文章主要是基于我们实际项目中因为redis分布式锁造成的事故分析及解决方案。我们项目中的抢购订单采用的是分布式锁来解决的,有一次,运营做了一个飞天茅台的抢购活动,库存100瓶,但是却超卖了100瓶!要知道,这个地球上飞天茅台的稀缺性啊!!! 事故定为P0级重大事故...只能坦然接受。整个项目组被扣绩效了~~事故发生后,CTO指名点姓让我带头冲锋来处理。 好吧,冲~ # 事故现场 经过一番了解后,得知这个抢购活动接口以前从来没有出现过这种情况,但是这次为什么会超卖呢? 原因在于:之前的抢购商品都不是什么稀缺性商品,而这次活动居然是飞天茅台,通过埋点数据分析,各项数据基本都是成倍增长,活动热烈程度可想而知!话不多说,直接上核心代码,机密部分做了伪代码处理。。。 public SeckillActivityRequestVO seckillHandle(SeckillActivityRequestVO request) { SeckillActivityRequestVO response; String

分布式锁的由来、特点、及Redis分布式锁的实现详解

梦想的初衷 提交于 2021-01-06 04:56:03
什么是分布式锁 要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。 1.线程锁 主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如Synchronized、Lock等。 2.进程锁 为了控制同一操作系统中多个进程访问某个共享资源,因为进程具有独立性,各个进程无法访问其他进程的资源,因此无法通过synchronized等线程锁实现进程锁。 3.分布式锁 当多个进程不在同一个系统中,用分布式锁控制多个进程对资源的访问。 分布式锁的由来 在传统单机部署的情况下,可以使用Java并发处理相关的API(如ReentrantLcok或synchronized)进行互斥控制。 但是在分布式系统后,由于分布式系统多线程、多进程并且分布在不同机器上,这将使原单机并发控制锁策略失效,为了解决这个问题就需要一种跨JVM的互斥机制来控制共享资源的访问,这就是分布式锁的由来。 当多个进程不在同一个系统中,就需要用分布式锁控制多个进程对资源的访问。 分布式锁的特点 首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件: 1、 互斥性 :任意时刻,只能有一个客户端获取锁,不能同时有两个客户端获取到锁。 2、 安全性 :锁只能被持有该锁的客户端删除

kubernetes ConfigMap和Secret:配置应用程序

拈花ヽ惹草 提交于 2021-01-06 01:02:19
7.1.配置容器化应用程序 7.2.向容器传递命令行参数 7.2.1.待Docker中定义命令与参数 1.了解ENTRYPOINT与CMD   ENTRYPOINT定义容器启动时被调用的可以执行程序   CMD指定传递给ENTRYP的参数 dockerfile 内容如下 FROM daocloud.io/centos:latest ADD aaa /usr/local/aaa CMD ["-f","/var/log/aa.log"] ENTRYPOINT ["tail"] 当启动镜像时,容器启动时执行如下命令:tail -f /var/log/aa.log 或者在docker run <images> <arguments> 中指定,arguments会覆盖CMD中内容 7.2.2.在kubernetes中覆盖命令行和参数 在k8s中定义容器时,镜像的ENTRYPOINT和CMD都可以被覆盖,仅需在容器定义中设置熟悉command和args的值 对应参数如下: Docker kubernetes 描述 ENTRYPOINT command 容器中运行的可执行文件 CMD args 传给可执行文件的参数 相关yml代码如下: kind: pod spec: containers: - image: some/image command: ["/bin/command"] args:

Beetlex之tcp/tls服务压测工具

时间秒杀一切 提交于 2021-01-05 21:59:28
在编写tcp服务的时候经常需要对服务的基础性能进行一个压力测试,虽然网上这些工具有很多,但具备使用方便和高强度的测试工具则不多。为了方便这方面的高强度压测所以在beetlex的基础扩展这样一个工具。 安装 可以访问https://github.com/beetlex-io/TCPBenchmarks 下载最新版本工作,工具可以运行在linux和windows系统,安装完成后通过浏览器访问相关服务进行操作。 操作 工具提供的操作很简单,只需要简单地添加服务和发送的消息即可对服务进行一个压力测试。具体操作界面如下: 测试方式 工具提供两种测试方式,分别是:请求响应和间隔两种模式。前者是工具收到响应后马上进行下一次数据发送;后者则是每隔指定时间向服务端发送数据。 本地IP选项主要告诉工具由那个IP发起请求,如果测试的连接太多单个IP的端口数满足不了测试的情况下,请根据连接数量来选择多个IP地址。测试工具占用的端口是10000-60000。 高吞吐压测 如果服务端在局域网想测试高吞吐交互则可以选用请求响应模式,这种模式可以具备高强度的压测效果;注意这种测试模式不适合采用大量在连接,只需要适当的连接数量即可。以下用200连接对2K数据进行一个高吞吐测试。 通过测试结果可以看到测的IO读写量和相应的总带宽数。 高连接数压测 有些情况只观察大量在线的情况,不太关注极限吞吐的能力

windows 系统,PHP安装扩展redis缓存步骤

喜欢而已 提交于 2021-01-05 17:37:42
先安装redis到windows上 下载redis 根据自己系统下载对应版本 下载redis https://github.com/microsoftarchive/redis/releases 安装redis比较简单,直接解压到C盘,重命名为redis,打开cmd 切换到redis目录下输入redis-server.exe redis.windows.conf,看到以下界面说明安装成功,注意这个窗口不能关闭 2配资PHP扩展 1、查看自己PHP的版本 echo phpinfo() 查看自己的版本: VC是 14,系统是 64位的,所以一定要选对版本,因为这个版本我折腾了好久。 2、根据自己的PHP版本、编译器的版本以及cpu 我的是php是 7.0 、VC14、X64。附上我的下载链接redis、igbinary的链接: Redis: http: //windows.php.net/downloads/pecl/releases/redis/ igbinary : http:/ /windows.php.net/downloads /pecl/releases /igbinary/ 可以根据以上两个链接选择自己的版本号,我下载的是这 php_redis- 3.0. 0- 7.0-ts-vc14-x64 和 php_igbinary- 2.0. 6rc1- 7.0-ts-vc14

干货分享】最新 Java 后端面试系列干货,都在这了!

爷,独闯天下 提交于 2021-01-05 16:46:38
本仓库【Java Github 超硬核面试 “备战” 手册】整理过程中更加偏重实战方向,整理中我也会分享一些近些年自己开发和工作过程中的一些感悟、心得和无奈。 本仓库大部分内容来自我近几年的收集和整理,整体文章思路也是围绕着【面试备战计划】来进行整理的,主体内容包含:职业规划篇,跳槽篇,实操篇,一线大厂面试题篇,以及高频面试必备综合篇 等知识内容。 总归一句话:养成一颗奋发的平常心。 目录 程序员职业规划篇 职业分析及定位 职业生涯经验和建议 跳槽篇 跳槽是为了什么?不为什么? 什么时间 / 状态下跳槽最合适? 跳槽的节奏和路线图应该是怎样的? 造成面试不通过的核心原因,有哪些? 良好的心态和体态 实操篇 求职简历应该如何写? 怎么“高效”寻找求职渠道? 面试准备及总结 900份简历模板 BATJ一线大厂面试题篇 百度面试篇 腾讯面试篇 京东面试篇 头条面试篇 美团面试篇 华为面试篇 滴滴面试篇 互联网公司高频面试必备综合篇 并发编程面试题汇总 JVM面试题汇总 Netty常被问到的那些面试题汇总 Tomcat面试题整理汇总 Mysql面试题汇总 Spring源码深度解析 Mybatis常见面试题汇总 Nginx那些面试题汇总 Zookeeper面试题汇总 RabbitMQ常见面试题汇总 Kafka面试题汇总 Redis常见面试题汇总 Dubbo面试题 SpringBoot

高效PHP Redis缓存技术,可参考下步骤

 ̄綄美尐妖づ 提交于 2021-01-05 14:48:16
是否想过PHP使用redis作为缓存时,如何能: 前后台模块共用Model层; 但是,不能每个Model类都进行缓存,这样太浪费Redis资源; 前后台模块可以自由决定从数据库还是从缓存读数据; 没有冗余代码; 使用方便。 这里我们先展示实现的最终效果。 最终的代码和使用说明请移步Github: https:// github.com/yeszao/php-r edis-cache 。 马上安装使用命令: $ composer install yeszao/cache 经过简单配置就可以使用,请参看Github的README说明。 1 最终效果 假设在MVC框架中,model层有一个Book类和一个getById方法,如下: class Book { public function getById($id) { return $id; } } 加入缓存技术之后,原来方法的调用方式和返回的数据结构都不应该改变。 所以,我们希望,最后的效果应该是这样的: 1 ( new Book)->getById( 100 ); // 原始的、不用缓存的调用方式,还是原来的方式,一般是读取数据库的数据。 2 ( new Book)->getByIdCache( 100 ); // 使用缓存的调用方式,缓存键名为:app_models_book:getbyid: + md5(参数列表) 3 ( new