自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 java8-lambda

java8-lambdaJava 8中的Stream API可以让你写出这样的代码: 声明性——更简洁,更易读4.1 流是什么 71 可复合——更灵活 可并行——性能更好1.方法引用方法引用主要有三类。(1) 指向静态方法的方法引用(例如Integer的parseInt方法,写作Integer::parseInt)。你 的 第 一 个方法引用!(2) 指 向 任 意 类 型...

2019-06-04 10:35:51 175

原创 RabbitMq

RabbitMq 公司有用到rabbitmq,那就先拿mq这个东西开刀把!

2019-05-25 22:48:08 163

原创 Mysql-优化

数据库优化也就是提升数据库的读写能力,我把他分为多个层次来讲1.数据库设计数据库设计存在三范式第一范式就是无重复的域。第二范式就是在第一范式的基础上属性完全依赖于主键。第三范式就是在满足第一范式的基础上,任何非主属性不得传递依赖于主属性设计表时要注意范化和反范化,遵循范式好处就是能够消除或者是减少数据的重复,这样数据就会小可以更好的放入内存,执行操作会快。重复数据少到时更新更少的数据...

2019-05-04 23:47:02 197

原创 Mysql-索引原理

mysql的索引也称为键,是存储引擎用于快速找到数据的数据结构。 良好的索引是大数据量的查询一个关键所在。数据量小且负载小时,不好的索引对性能影响可能看不太出来,但是当大量数据与负载时,性能将会急剧下降。这里介绍InnoDB的索引原理。1.为什么不用hash,平衡树等数据结构。一般avl树的查找平均时间为logN,但是时间复杂度模型是基于每次相同的操作成本来考虑的。但是数据库数据是持久化到硬...

2019-05-02 17:01:08 147

原创 redis(11)-缓存设计

缓存穿透缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层,整个过程分为如下3步:1) 缓存层不命中。2) 存储层不命中, 不将空结果写回缓存。3) 返回空结果。缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的意义。缓存穿透问题可能会使后端存储负载加大, 由于很多后端存储不具备高...

2019-04-29 13:22:35 156

原创 redis(10)-集群

redis集群

2019-04-17 16:28:22 237

原创 redis(9)-哨兵

主从结构宕机后redis提供主从复制模式来提高性能,1.从节点可以负担主节点的读压力。2.可以只在从节点开启aof,减少主节点的由于持久化的性能损耗。3.当主节点宕机时可以把从节点提升为主节点。当发生主节点宕机时,主从结构的redis就需要人工介入来替换主从模式,这就不是高可用的模式了。比如一个一主多从的redis结构。当主节点发生宕机时需要以下人工操作:1.选择一个从节点作为新的主节点,s...

2019-04-17 16:25:41 227

原创 redis(8)-内部编码

Redis针对每种数据类型(type) 可以采用至少两种编码方式来实现。如下如图注意3.2版本之后的redis list类型的数据内部都是通过quicklist实现的。了解编码和类型对应关系之后, 我们不禁疑惑Redis为什么对一种数据结构实现多种编码方式?主要原因是Redis作者想通过不同编码实现效率和空间的平衡。 比如当我们的存储只有10个元素的列表, 当使用双向链表数据结构时, 必然...

2019-04-17 10:25:26 320

原创 redis(7)-内存结构

如何高效利用Redis内存变得非常重要。 高效利用Redis内存首先需要理解Redis内存消耗在哪里, 如何管理内存, 最后才能考虑如何优化内存。 掌握这些知识后能够实现用更少的内存存储更多的数据, 从而降低成本。·内存消耗分析。·管理内存的原理与方法。·内存优化技巧。内存消耗理解Redis内存, 首先需要掌握Redis内存消耗在哪些方面。 有些内存消耗是必不可少的, 而有些可以通过参数...

2019-04-16 11:47:06 1356

原创 redis(6)-阻塞查询

Redis是典型的单线程架构, 所有的读写操作都是在一条主线程中完成的。 当Redis用于高并发场景时, 这条线程就变成了它的生命线。 如果出现阻塞, 哪怕是很短时间, 对于我们的应用来说都是噩梦。 导致阻塞问题的场景大致分为内在原因和外在原因:·内在原因包括: 不合理地使用API或数据结构、 CPU饱和、 持久化阻塞等。·外在原因包括: CPU竞争、 内存交换、 网络问题等。发现阻塞当R...

2019-04-14 14:33:07 865

原创 redis(5)-复制

在分布式系统中为了解决单点问题, 通常会把数据复制多个副本部署到其他机器, 满足故障恢复和负载均衡等需求。 Redis也是如此, 它为我们提供了复制功能, 实现了相同数据的多个Redis副本。 复制功能是高可用Redis的基础, 后面章节的哨兵和集群都是在复制的基础上实现高可用的。 复制也是Redis日常运维的常见维护点。 因此深刻理解复制的工作原理与使用技巧对我们日常开发运维非常有帮助。建立...

2019-04-14 14:04:09 202

原创 redis(4)-持久化

Redis支持RDB和AOF两种持久化机制, 持久化功能有效地避免因进程退出造成的数据丢失问题, 当下次重启时利用之前持久化的文件即可实现数据恢复。 理解掌握持久化机制对于Redis运维非常重要RBDRDB持久化是把当前进程数据生成快照保存到硬盘的过程, 触发RDB持久化过程分为手动触发和自动触发手动触发分别对应save和bgsave命令:·save命令: 阻塞当前Redis服务器, 直到...

2019-04-11 15:36:16 120

原创 redis(3)-jedis&pipline&multi

piplineRedis客户端执行一条命令分为如下四个过程:1) 发送命令2) 命令排队3) 命令执行4) 返回结果其中1) +4) 称为Round Trip Time(RTT, 往返时间)。Redis提供了批量操作命令(例如mget、 mset等) , 有效地节约RTT。 但大部分命令是不支持批量操作的, 例如要执行n次hgetall命令, 并没有mhgetall命令存在, 需要消耗...

2019-04-11 13:55:38 470

原创 redis(2)-api-zset

有序集合相对于哈希、 列表、 集合来说会有一点点陌生, 但既然叫有序集合, 那么它和集合必然有着联系, 它保留了集合不能有重复成员的特性,但不同的是, 有序集合中的元素可以排序。 但是它和列表使用索引下标作为排序依据不同的是, 它给每个元素设置一个分数(score) 作为排序的依据。 如图所示, 该有序集合包含kris、 mike、 frank、 tim、 martin、 tom,它们的分数分别是...

2019-04-10 17:24:07 195

原创 redis(2)-api-set

集合(set) 类型也是用来保存多个的字符串元素, 但和列表类型不一样的是, 集合中不允许有重复元素, 并且集合中的元素是无序的, 不能通过索引下标获取元素。 如图2-22所示, 集合user: 1: follow包含着"it"、 “music”、 “his”、 "sports"四个元素, 一个集合最多可以存储232-1个元素。 Redis除了支持集合内的增删改查, 同时还支持多个集合取交集、 并...

2019-04-10 16:45:58 296

原创 redis(2)-api-list

列表(list) 类型是用来存储多个有序的字符串, 如图2-18所示, a、b、 c、 d、 e五个元素从左到右组成了一个有序的列表, 列表中的每个字符串称为元素(element) , 一个列表最多可以存储232-1个元素。 在Redis中, 可以对列表两端插入(push) 和弹出(pop) , 还可以获取指定范围的元素列表、 获取指定索引下标的元素等(如图2-18和图2-19所示) 。 列表是一...

2019-04-10 16:24:04 280

原创 redis(2)-api-hash

哈希几乎所有的编程语言都提供了哈希(hash) 类型, 它们的叫法可能是哈希、 字典、 关联数组。 在Redis中, 哈希类型是指键值本身又是一个键值对结构, 形如value={{field1, value1}, …{fieldN, valueN}}(1) 设置值hset key field value如果设置成功会返回1, 反之会返回0。 此外Redis提供了hsetnx命令, 它们的关...

2019-04-10 16:04:28 170

原创 redis(2)-api-string

字符串字符串类型是Redis最基础的数据结构。 首先键都是字符串类型, 而且其他几种数据结构都是在字符串类型基础上构建的, 所以字符串类型能为其他四种数据结构的学习奠定基础.字符串类型的值实际可以是字符串(简单的字符串、 复杂的字符串(例如JSON、 XML) ) 、 数字(整数、 浮点数) , 甚至是二进制(图片、 音频、 视频) , 但是值最大不能超过512MB。1.常用命令(1)设置值...

2019-04-10 15:48:25 120

原创 redis(2)-api使用

在正式介绍5种数据结构之前, 了解一下Redis的一些全局命令、 数据结构和内部编码、 单线程命令处理机制是十分有必要的, 它们能为后面内容的学习打下一个好的基础。Redis不是万金油, 有些数据结构和命令必须在特定场景下使用, 一旦使用不当可能对Redis本身或者应用本身造成致命伤害。全局命令1.查看所有的键keys *keys*命令会将所有的键输出。2.键总数dbsizedbsi...

2019-04-10 15:21:38 199

原创 redis(1)-简介

redis简介Redis[1]是一种基于键值对(key-value) 的NoSQL数据库, 与很多键值对数据库不同的是, Redis中的值可以是由string(字符串) 、 hash(哈希) 、list(列表) 、 set(集合) 、 zset(有序集合) 、 Bitmaps(位图) 、HyperLogLog、 GEO(地理信息定位) 等多种数据结构和算法组成, 因此Redis可以满足很多的应用...

2019-04-10 14:45:19 136

原创 同步工具-FutureTask

FutureTask

2019-04-09 16:43:33 427

原创 同步工具-CountDownLatch

我在本币系统用了一个CountDownLatch实现了一个把一个异步接口变成同步接口的用法。http接口调用的方法,主要是在servlet中的service方法中返回对应的response,然而该service方法中调用的一个异步接口的方法,如果不做限制的话直接返回为空。这里其实可以用future接口,但当时我只会CDL所以这篇文章就看看cdl的源码把。 CountDownLatc...

2019-04-09 16:39:41 124

原创 SpringMVC附加功能

SpringMVC附加的功能,以免以后在工作中自己造一些没用,垃圾的轮子1.Converter:Controller入参类型转化,好像只是把所有的都转换了 没有选择空间?蛮鸡肋的。2.Formatter:和上面的一样,不过这个只支持web层转化,也感觉鸡肋。3.Validator: 可以校验Controller入参...

2019-03-29 15:24:16 101

原创 同步工具-ReentrantLock

ReentrantLock  我们主要看ReentrantLock的Lock,unlock这两个公平和非公平的实现 还有Condition的实现。其实我一直都很疑惑,为啥ReentrantLock,CountDownLatch等类都是基于AQS实现的,那么为啥不直接继承AQS而是内部引用一个AQS的实现类呢,这里ReentrantLock给出了答案,它内部提供公平和非公平的实现,而这两个模式则...

2019-03-19 22:20:46 177

原创 同步工具-Synchronizer(3) 共享模式

Synchronzier共享模式.  由于AQS的独占模式release时只能唤醒当前第一个等待的线程,有的时候我们需要通过一次唤醒就能通知多个线程。例如我们常用的CountDownLatch。只要CountDownLatch#countDown方法调用的次数超过了初始化CountDownLatch的次数,那么所有调用CountDownLatch#await的线程将都被唤醒。这是AQS中的独占...

2019-03-17 22:21:24 446

原创 同步工具-Synchronizer(2) 独占模式

Synchronizer.  铺垫了这么多,终于到了我们的Synchronizer了。其实jdk的很多阻塞工具都是基于一个通用的类构建的例如ReentrantLock,FutureTask,Semaphore,CountDownLatch等等,这个就是AbstractQueuedSynchronizer。AQS也是面试当中很容易问到的一环。  ReentrantLock,FutureTask...

2019-03-17 18:15:54 310

原创 同步工具-Synchronizer

1.状态依赖性  在一个单线程环境中,如果调用一个方法之前 没有满足进入该方法的先决条件(比如要去一个空的队列里获取对象),那么这个方法就永远不能进入。因为这个先决条件永远不会改变,所以这个方法就只能返回失败了。该方法依赖对象的状态。  而在多线程的环境中,这个先决条件很有可能被其他线程所改变,例如A线程想要从一个空的连接池中获取一个连接,当然此刻A线程的操作是失败的,但是后续的B线程归还了一...

2019-03-16 17:51:40 353

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除