Redis

[Logstash]使用详解

本小妞迷上赌 提交于 2020-10-26 11:33:30
  Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的、多样化的日志搜集起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件。   本文针对 官方文档 进行翻译以及实践,希望有更多的有用户了解、使用这款工具。 下载、安装、使用   这款工具是开箱即用的软件, 下载地址戳这里 ,下载自己对应的系统版本即可。   下载后直接解压,就可以了。   通过命令行,进入到logstash/bin目录,执行下面的命令: logstash -e ""   可以看到提示下面信息(这个命令稍后介绍), 输入hello world!    可以看到logstash尾我们自动添加了几个字段,时间戳@timestamp,版本@version,输入的类型type,以及主机名host。 工作原理   Logstash使用 管道方式 进行日志的搜集处理和输出。有点类似*NIX系统的管道命令 xxx | ccc | ddd ,xxx执行完了会执行ccc,然后执行ddd。   在logstash中,包括了三个阶段:   输入input --> 处理filter(不是必须的) --> 输出output   每个阶段都由很多的 插件 配合工作,比如file、elasticsearch、redis等等。   每个阶段也可以指定 多种方式 ,比如输出既可以输出到elasticsearch中

快手Java后台三面,意向已拿,复盘面试官都问了些啥?

非 Y 不嫁゛ 提交于 2020-10-26 10:51:26
快手的面试挺有挑战性的感觉哈哈哈哈,不过我觉得挺有意思的,感觉啥都能问到。(二面是10天前约的面试,差点要忘了)然后是HR面,昨天就收到offer 一面二面啥的我都忘记具体的了,就简单的总结一下 基础 int float short double long char 占字节数? int 范围?float 范围? hashcode 和 equals 的关系 深拷贝、浅拷贝区别 java 异常体系?RuntimeException Exception Error 的区别,举常见的例子 lambda 表达式中使用外部变量,为什么要 final? 集合 集合这块关注一下 1.8 的实现吧,和 1.7 相比变化了很多 Collection 有什么子接口、有哪些具体的实现 简单介绍下 ArrayList 怎么实现,加操作、取值操作,什么时候扩容? 讲一下 hashMap 原理。hashMap 可以并发读么?并发写会有什么问题? 讲一下 concurrentHashMap 原理。头插法还是尾插法?扩容怎么做? 堆是怎么存储的,插入是在哪里? 集合在迭代的过程中,插入或删除数据会怎样? 并发 线程进程和线程的区别?并行和并发的区别?了解协程么?进程间如何通信:进程 A 想读取进程 B 的主存怎么办?线程间通信?线程的生命周期有哪些状态?怎么转换?wait 和 sleep 有什么区别

redis的设计及使用场景

混江龙づ霸主 提交于 2020-10-26 07:25:37
概述 redis是一个完全开源的,高性能的key-value数据库,特点是:支持原子性、持久化、丰富的数据类型。 场景 1、在系统设计的时候,为了提高相应速度,使用各种数据类型来缓存数据 2、在做验证码的时候,redis有个过期时间,刚好符合验证码的倒计时需求 3、在做分布式锁的时候,redis的setnx,加上过期时间,刚好符合需求 4、在做防止接口重复提交的时候,过期时间刚好符合 5、在做session保存的时候,redis的缓存很适合 6、黑白名单、社交列表、ip限制访问等待,用redis再适合不过了 总结 在使用redis的时候,要注意的key设计,这样易于维护,考虑持久化策略,以防在服务异常的时候快速的恢复数据;考虑系统的安全策略,不能使用key *命令查询;要控制好key的生命周期,redis不是垃圾桶;key要设计的合理,不要太长,太长会占用很多内存,比如:sds>39字节,内存得扩大为原来的两倍。 来源: oschina 链接: https://my.oschina.net/u/4334778/blog/4616480

CDH常用端口汇总

走远了吗. 提交于 2020-10-26 05:06:34
参考文章: CDH常用端口汇总 Hadoop: 50070:HDFS WEB UI端口 8020 : 高可用的HDFS RPC端口 9000 : 非高可用的HDFS RPC端口 8088 : Yarn 的WEB UI 接口 8485 : JournalNode 的RPC端口 8019 : ZKFC端口 10020:historyserver端口 Zookeeper: 2181 : 客户端连接zookeeper的端口 2888 : zookeeper集群内通讯使用,Leader监听此端口 3888 : zookeeper端口 用于选举leader Hbase: 60010:Hbase的master的WEB UI端口 60030:Hbase的regionServer的WEB UI 管理端口 Hive: 9083 : metastore服务默认监听端口 10000:Hive 的JDBC端口 Spark: 7077 : spark 的master与worker进行通讯的端口 standalone集群提交Application的端口 8080 : master的WEB UI端口 资源调度 8081 : worker的WEB UI 端口 资源调度 4040 : Driver的WEB UI 端口 任务调度 18080:Spark History Server的WEB UI 端口 Kafka:

缓存面试题

馋奶兔 提交于 2020-10-26 04:29:02
项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果? 如何使用 如何使用是回答用缓存来干嘛了。 回答点:缓存能用来干嘛,项目中的缓冲用来干嘛了。 缓存当然是用来缓冲存储层的数据的和计算后的结果。 在我们项目这使用了以上两种。 xxxx and xxxx 为什么使用 回答这个为什么使用的时候围绕两点:性能和高并发。 缓存了计算后的结果,节省了计算时间,那么自然性能就上来了。 缓存了存储层的数据,后续请求无需再次访问数据库,那么并发自然也就上来了。MySQL的QPS到2000已经是单机的瓶颈了,Redis单机的QPS上限在10w,并发提升50倍。 使用不当的后果,怎么避免 数据不一致问题:比如现在有一个写命令过来。 如果先操作缓存,再操作数据库。当操作完缓存后,OOM了。这个时候数据就不一致了。 数据库和缓存数据不一致 缓存雪崩问题:当缓存集体失效或者缓存服务器宕机时,那么大量的请求会打到存储层,就可能级联导致存储层雪崩。 缓存穿透问题:当出现大量的缓存miss,流量就会打到存储层,也可能引起存储层的崩溃 缓存击穿问题:当某个热点key过期时,也会有大流量打到存储层,也可能引起存储层的崩溃 三个问题 Redis 和 Memcached 有什么区别?Redis 的线程模型是什么?为什么 Redis 单线程却能支撑高并发? 这个问题其实是在问技术选型。

redis源码学习02:跳跃表插入结点

假装没事ソ 提交于 2020-10-26 04:08:40
本文是本人在学习redis源码时的笔记,本文主要是对跳跃表插入结点代码的中文注释,如有错误欢迎指正。 有关跳跃表的原理可以上网搜材料,有很多。 首先看下redis源码里有关跳跃表的相关结构体: typedef struct zskiplistNode { // 跳跃表节点 sds ele; // zset元素 double score; // zset分值 struct zskiplistNode *backward; // 单前level的后一个node struct zskiplistLevel { // 创建节点的函数里会根据level数量申请相应的内存空间,放在结构体后面的作用是只需要一次内存申请操作,而且是连续的内存空间 struct zskiplistNode *forward; unsigned long span; // 该结点在某一层与下一个结点之间的元素个数 } level[]; } zskiplistNode; typedef struct zskiplist { // 跳跃表 struct zskiplistNode *header, *tail; // 头结点和尾结点,创建跳跃表时,tail为null unsigned long length; // level1所有元素个数 int level; // 总层级数 } zskiplist; 创建一个结点:

gopher 协议初探

人走茶凉 提交于 2020-10-26 03:01:01
Gopher 协议初探 最近两天看到了字节脉搏实验室公众号上有一篇《Gopher协议与redis未授权访问》的文章,其中对gopher协议进行了比较详细的介绍,所以打算跟着后面复现学习一下,顺便记录一些身为菜鸡的我所遇到的比较蠢得坑 Gopher协议 gopher 协议是一种信息查找系统,他将 Internet 上的文件组织成某种索引,方便用户从 Internet 的一处带到另一处。在 WWW 出现之前, Gopher 是 Internet 上最主要的信息检索工具,Gopher站点也是最主要的站点,使用 tcp70 端口。但在 WWW 出现后, Gopher 失去了昔日的辉煌。现在它基本过时,人们很少再使用它。 它只支持文本,不支持图像 协议访问学习 我们现在最多看到使用这个协议的时候都是在去 ssrf 打 redis shell 、读 mysql 数据的时候,由于之前对这个协议了解不是很熟,所以这次看到这篇文章后打算借此学习一下他的通信方式 首先最基础的看一下它如何发送 get 请求 复现环境 win10 + kali 2018 + 在 win10 主机使用 nc 监听端口, nc -lvp 192.168.109.1:6666 然后用 kali 使用 curl gopher://192.168.109.1:6666/_abcd 发送 gopher get 请求,可以发现 _

Redis:(三)穿透,击穿,雪崩常用解决方案

*爱你&永不变心* 提交于 2020-10-25 17:28:59
1. 缓存击穿 缓存击穿,就是说某个 key 非常热点,访问非常频繁,处于集中式高并发访问的情况,当这个 key 在失效的瞬间,大量的请求就击穿了缓存,直接请求数据库,就像是在一道屏障上凿开了一个洞 解决方案: 若缓存的数据是基本不会发生更新的,则可尝试将该热点数据设置为永不过期 使用互斥锁(mutex key)(若缓存的数据更新不频繁,且缓存刷新的整个流程耗时较少的情况下) 即,在过期的时候(拿出来的值为空),不立刻去访问数据库查询数据,而是先使用Redis的 setnx 方法去 set 一个mutex key,当操作返回成功时,再去进行数据库操作并回设缓存值 SETNX,是「SET if Not eXists」的缩写,也就是只有不存在的时候才设置,可以利用它来实现锁的效果 若缓存的数据更新频繁或者缓存刷新的流程耗时较长的情况下,可以利用定时线程在缓存过期前主动的重新构建缓存或者延后缓存的过期时间,以保证所有的请求能一直访问到对应的缓存。 2. 缓存穿透 对于系统A,假设一秒 5000 个请求,结果其中 4000 个请求是黑客发出的恶意攻击。 黑客发出的那 4000 个攻击,缓存中查不到,每次你去数据库里查,也查不到。 举个栗子。数据库 id 是从 1 开始的,结果黑客发过来的请求 id 全部都是负数。这样的话,缓存中不会有,请求每次都“视缓存于无物”,直接查询数据库