Java NIO 系列学习 05 - Scatter and Gather

Java NIO 提供了内置的Scatter和Gather支持。Scatter和Gatter是用于读写Channel的概念。

Scatter从一个Channel中读取数据,然后写到多个Buffer中。

Gather从多个Buffer中拿到数据,然后写到一个Channel中。

在我们需要分开处理传输数据的各个部分时很有用。比如,一条消息由头部和正文组成,我们需要单独对头部和正文的内容进行分开处理,就可以把头部和正文单独存储在Buffer中。

……

阅读全文

Java NIO 系列学习 04 - Buffers

Java NIO Buffers 是与 Channels一起组合使用的。

Buffer本质上是一块内存区,我们可以写入数据,然后再读出来。这个内存区被包装为 NIO Buffer 对象, 这个对象提供了一组方法以方便我们操作内存区。

……

阅读全文

PHP XDebug 远程调试

与上一篇联动, 本篇是远程调试, 主要记录一下过程 本地环境: # php -v PHP 7.2.16 (cli) (built: Mar 10 2019 21:22:49) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies with Xdebug v2.8.0-dev, Copyright (c) 2002-2019, by Derick Rethans 环境搭建 // 如果没有安装过需要先行安装 # yum install -y php-devel gcc // 安装xdebug # cd /usr/local/src # git clone https://github.com/xdebug/xdebug.git # cd xdebug # ./rebuild.sh // xdebug配置文件 # vim /etc/php.……

阅读全文

PHP XDebug 本地调试

macOS XDebug 本地调试 很久没写PHP了、同样很很久没有用XDebug了,近期有个简单的场景要用到,简单记录一下关键步骤。 本地环境: $ php -v PHP 7.3.4 (cli) (built: Apr 8 2019 10:21:33) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.4, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.3.4, Copyright (c) 1999-2018, by Zend Technologies with Xdebug v2.7.1, Copyright (c) 2002-2019, by Derick Rethans 环境搭建 // 安装xdebug $ pecl install xdebug // 配置xdebug $ vim /usr/local/etc/php/7.3/conf.d/ext-xdebug.ini [xdebug] zend_extension="xdebug.so" xdebug.……

阅读全文

Java NIO 系列学习 03 - Channels

Java NIO Channels 在很多地方都与 streams 相似,不同点有下面几个:

  • Channels是双向的,可以读和写,而streams是单向的
  • Channels可以进行异步读和写
  • Channels总是读或写buffer

再重复一下,我们从 Channel 读数据到 Buffer,或者从 Buffer 写数据到 Channel。

……

阅读全文

Java NIO 系列学习 02 - 概述

Java NIO 包括了下面几个核心组件

  • Channels
  • Buffers
  • Selectors

Java NIO 有很多的类和组件,但核心的是 Channels, BuffersSelectors
其它的组件,像 PipeFileLock,只是跟上面这三个核心组件组合使用的工具类。
因此我们着重介绍这三个核心组件。

……

阅读全文

Redis 与 Memcache 区别浅析

业务系统中,我们经常使用缓存来提高读接口的性能、减轻DB的压力。 缓存选型中,摆在我们面前的往往有这两个: Redis 和 Memcache,那么我们应该选择哪一个呢? 我们先来分析下两者的显著不同点 存储介质的不同 Memcache 是把数据存储在内存中。如果遇到断电、缓存服务宕机,数据是会丢失的,不可恢复。 Redis 的数据存储在内存和硬盘中(冷数据可放在硬盘),并且在服务宕机后支持从硬盘中恢复数据到内存中,支持持久化。 数据格式的不同 Memcache 仅支持简单的 key:value 类型的数据。 Redis 除支持 kv 类型的数据外,还支持 list set hash hash 等类型的数据,并且支持排序。 结论 业务要求数据不可丢,选 Redis 存储数据格式多样化,对数据有较高的处理要求,选 Redis 定位缓存且数据格式单一,选 Memcache 参考 Redis和Memcache的区别分析 ……

阅读全文

主键、唯一索引、普通索引及约束

1. 唯一索引 (unique) ALTER TABLE `table_name` ADD UNIQUE (`email`); 什么是唯一索引? 唯一索引是这样一种索引,它通过确保表中没有两个数据行具有完全相同的键值来帮助维护数据完整性。 换个说法,有了唯一索引就可以确保数据表不会有相同行数据(组成唯一索引键的列). 唯一索引允许空值的存在,空值将视为。如果由单列组成唯一索引,则此列仅允许一个空值存在;如果由多列组成唯一索引,则值与空值的组合仅允许一个存在。 1.1 唯一键约束 什么是唯一键约束?唯一键约束与唯一索引又有什么区别? 唯一键约束与唯一索引的区别只有一个:唯一键约束不允许空值的存在,而唯一索引是允许空值的存在的。 2. 非唯一索引 (普通索引 index) ALTER TABLE `table_name` ADD INDEX idx_email (`mobile`); # 组合索引 遵循最左前缀原则 ALTER TABLE `table_name` ADD INDEX idx_bid_cid (`business_id`, `customer_id`); 非唯一索引,顾名思义,不约束列的唯一性,仅仅是为加速数据查询速度用的。又叫普通索引,应当为经常出现在查询条件 where 或排序条件 order by的列建立普通索引。 3. 主键索引 (primary key) ALTER TABLE `table_name` ADD PRIMARY KEY (`id`); 主键索引,是一种特殊的唯一索引(不允许有空值)。 数据表通常用一列或多列来唯一标识行数据,这一列或多列就是主键。 Q:主键索引与唯一索引有啥区别呢? A:1. 主键不允许空值存在的;2. 一个表仅有一个主键。 参考 主键和唯一索引的区别 唯一索引和非唯一索引 ……

阅读全文