Redis Stream 简明使用教程

Redis Stream 特性是Redis 5.0之后才有的。Redis Stream的主要应用就是时间序列的消息流分发。PUB/SUB也可以做消息流分发,但是PUB/SUB不记录历史消息,而Redis Stream可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息...

2019-08-03 22:01:03

阅读数 31

评论数 0

grpc和protocol buffer使用

grpc grpc是Google的rpc开源框架,它使用了protocol buffer(Google的另一个开源工具)作为接口定义语言和消息传递格式。 大概的使用方法是: 使用protocol buffer语言编写接口定义。 使用protocol buffer工具将接口编译成目标语言代码,包括...

2019-05-19 16:20:03

阅读数 65

评论数 0

go 错误处理

Go 语言的错误处理有两种方式:panic和error。 panic适用于严重的,调用方不可预料的错误,比如数组越界,即使告知调用方错误的原因,调用方也不可能在原地恢复程序正常流程。 error就是一般的错误,比如网络中断,调用方可以预料这种错误的发生,并能根据错误做出相应的处理。 有一种错误处理...

2019-03-08 16:57:30

阅读数 19

评论数 0

几个go 并发模式

go 语言中向一个已经关闭的channel发送数据会引起panic,因此go并发中一个基本的原则就是在数据发送端关闭channel。 虽然channel是双向的通道,两个go routine可以通过一个channel进行双向通信,但是在一般的数据流的模式下,我们宁可将channel降级为单向的通道...

2019-02-15 19:55:22

阅读数 281

评论数 0

使用通信来共享内存,而不是通过共享内存来通信

所有go语言的学习者都会看到这样一句话“使用通信来共享内存,而不是通过共享内存来通信”,这是go语言并发编程的座右铭,然而却不那么好理解。 为了搞清楚熟悉的锁模式并发编程和go的channel模式并发编程的区别,先分别看一下这两种模式都是怎么做的: 为了行文简洁,暂时把代码执行单元都称为“线程”...

2019-02-11 17:29:41

阅读数 173

评论数 0

《MySQL实战45讲》学习笔记——索引(二)

普通缩影和唯一索引 普通索引和唯一索引都是二级索引。区别是唯一索引由数据库保证字段的唯一性。 查询过程中,普通索引和唯一索引的性能差不多,普通索引也就是多判断一次而已。 更新过程,普通索引可以使用change buffer优化,唯一索引因为要检查数据的唯一性,必须要将数据读入内存,可能引入磁盘的随...

2018-12-11 11:05:41

阅读数 459

评论数 0

《MySQL实战45讲》学习笔记——事务隔离

SQL标准事务隔离的级别包括: 读未提交,read uncommitted,一个事务还没有提交,它做的变更就能被别的事务看到。 读提交,read commited,一个事务提交之后,它做的变更才会被其他事务看到。 可重复读,repeatable read,一个事务执行的过程中看到的数据,总是跟这...

2018-12-07 10:49:43

阅读数 248

评论数 0

《MySQL实战45讲》学习笔记——锁

全局锁 对整个数据库实例加锁。命令是:Flush tables with read lock。使用这个命令后,数据库编程只读。全局锁的典型使用场景是做全库的逻辑备份。 将整个库锁定有很大缺点: 如果在主库上备份,备份期间所有更新不能执行,业务基本停摆 如果在从库上备份,备份期间不能从主库同步数据...

2018-12-06 10:48:19

阅读数 369

评论数 0

《MySQL实战45讲》学习笔记——索引

任何能够加速搜索的数据结构都可以用来做索引模型,常见的就是哈希索引,有序列表索引和多叉树索引。 哈希索引的特点是插入删除方便,查找更快,缺点是只能进行等值查询,不能查找范围。 有序索引可以使用二分查找,同时也支持范围查找,但是插入和删除效率低,适合静态数据。 多叉树索引索引支持范围查找,平衡了哈...

2018-12-05 19:24:44

阅读数 161

评论数 0

用Redis做分布式锁

获取锁的过程 生成一个128位的UUID,然后给锁的这个键赋值,如果赋值成功(返回1),就获取了锁;如果赋值失败(返回0),就相当于没有获取锁。客户端自己控制重试或者放弃。 释放锁的过程 释放锁就是移除锁键。但是如果在没有获取锁的情况下释放锁(一般是代码BUG),会将其他进程获取到的锁释放,锁就被...

2018-12-04 19:59:49

阅读数 46

评论数 0

Redis 消息发布与订阅

推模式 客户端使用SUBSCRIBE命令订阅一个channel(会被阻塞),其他的客户端可以使用PUBLISH命令向这个channel发送消息,所有订阅者都会收到这个消息。 推模式每一个channel维护一个客户端列表,发送消息的时候遍历列表发送。其余订阅,取消订阅,模式匹配订阅等实现也都很简单 ...

2018-12-04 19:48:07

阅读数 107

评论数 0

《MySQL实战45讲》学习笔记——SQL语句的执行

MySQL 逻辑架构(图片来自MySQL实战45讲文稿): MySQL 的存储引擎是插件式的,这个系列讲座主要讲的是InnoDB存储引擎。 连接器:管理连接,权限验证。 MySQL有一个管理数据库mysql,mysql数据库中有一个表叫做user,user表中保存了4部分内容:用户,权限,安全和...

2018-12-04 11:04:05

阅读数 196

评论数 0

Redis事务

事务用法 Redis事务相关的命令有5个:DISCARD, EXEC, MULTI, UNWATCH, WATCH MULTI开始一个事务,EXEC执行事务,DISCARD取消事务。在MULTI和EXEC之间的命令会得到原子的执行。Redis事务和一般数据库的事务不太相同,更像是一个原子的批处理,...

2018-12-03 19:43:23

阅读数 34

评论数 0

go语言开发工程结构

go语言的工作区是一个目录,下边有3个主要的文件件,src用于保存源码文件,pkg用于保存二进制库文件,bin用于保存二进制可执行文件。GOPATH就是工作区的根目录。 其他语言可能是一个项目使用一个工作区,但是go建议所有项目使用同一个工作区。一个典型的go工作区目录结构: bin/ pkg/ ...

2018-11-06 06:50:00

阅读数 232

评论数 0

Effective Objective-C 2.0 笔记(三)

第37条 理解“块”这一概念 block也是对象,也有引用计数,因此要避免循环引用,一个比较隐蔽的循环引用的例子是: -(void)anInstanceMenthod{ void (^someBlock)() = ^{ _anInstanceVar = @&quot...

2018-10-17 13:44:25

阅读数 28

评论数 0

Effective Objective-C 2.0 笔记 (二)

第15条 用前缀避免命名空间冲突 最好遵循苹果的编程规范,使用 3个字的前缀。 对于全局的变量,常量以及C函数,也应该加上前缀。 第16条 提供“全能初始化方法“ 这种编程模式就是定义一个参数最全的初始化方法,在其中初始化所有的成员变量,其余的初始化方法都调用这个初始化方法。目的是确保所有的成员变...

2018-10-08 13:08:19

阅读数 74

评论数 0

Effective Objective-C 2.0 笔记 (一)

Effective Objective-C 2.0 笔记 (一) 第1条 了解Objective-C语言起源 这一章先是澄清了OC的消息机制和函数调用机制的区别。C++的函数调用机制在涉及到多态的时候也是动态绑定的,而OC只是普通的函数调用也是动态绑定的,也就是运行时查找应该执行的函数指针。 接着...

2018-09-29 10:16:02

阅读数 85

评论数 0

iOS中的搜索

NSUserActivity NSUserActivity主要用于HandOff,简单说就是切换设备能接着做之前的事情,比如在手机浏览网页,打开Mac可以直接打开手机浏览的那个网页并且停留在阅读位置。因此NSUserActivity主要是用来记录应用程序当前状态的。在iOS9以后也支持在Spotl...

2018-09-24 10:57:21

阅读数 270

评论数 0

iOS App后台任务

Background Task 因为iOS程序切换到后台之后,很有可能被系统杀掉,因此切换到后台的时候需要保存重要数据。UIApplication的这个方法能让系统给App一段时间,执行重要任务。 beginBackgroundTaskWithName:expirationHandler: 系统...

2018-09-19 10:36:09

阅读数 477

评论数 0

iOS App Life Circle

一个iOS App有以下五个状态: 需要注意的是Inactive 状态,常常被忽略,App被切换到后台时,并不是直接进入Background状态,而是有一个Inactive状态,同样一个App启动后,也要经过Inactive状态过渡。 系统状态的转换不能通过代码控制,只能通过用户操作由iO...

2018-09-13 15:23:25

阅读数 133

评论数 0

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