BLOG
Enjoy when you can, and endure when you must.
JUL 26, 2016/后端开发与架构
协程在 I/O 密集型场景中的应用

在 I/O 密集型的应用中,CPU 可能总是苦苦等待着 I/O 操作的完成。如果是一个提供 Web 的服务的话,也就意味着一个线程会因为 I/O 阻塞而无法快速的对其他请求进行响应。势必也造成一种资源浪费和效率低下。在这种时候,协程的价值就体现了出来。这里,我延续之前的 APNs 话题,从应用的角度去实实在在的体验一下协程。

JAN 09, 2015/后端开发与架构
DWeixin:微信公众平台开发
微信公众平台开发 2.0 版本,优化了原先的一些功能,新增“事件外部处理”支持等。 Github: https://github.com/manyunkai/DWeixin 包依赖 Pythhon == 2.7.3+,暂时不支持 3.x 版本; django == 1.6.x,该版本基于 1.6.5 开发; MySQL-python == 1.2.3; django-grappelli == 2.5.x,注意不能使用更高或更低版本; lxml == 3.3.6; beautifulsoup4 == 4.3....
Ubuntu12.04安装最新版Redis并作为服务启动
在Ubuntu上安装redis-server最简单的方式莫过于使用apt,不过这样安装的版本是2.2,这不一定能满足我们的需求,因此还是采用手动编译更为靠谱一些。编译这是一个模式,下载 > 解压 > 编译:wget http://download.redis.io/redis-stable.tar.gz tar xvzf redis-stable.tar.gz cd redis-stable make然后可以运行make test命令来检查一下编译是否正确。在编译过后,src/目录下会生成多个可执行文件:redis-server:...
DEC 20, 2013/数据库
Redis整数集合
整数集合(intset)是redis的集合(set)类型的一个encoding方式之一,如果set中值包含整数,并且元素较少的话,redis就会采用intset作为该类型的实现。简单看一下整数集合(intset)的定义:typedef struct intset {     // 保存元素所使用的类型的长度     uint32_t encoding;     // 元素个数   &...
DEC 18, 2013/数据库
Redis压缩列表
压缩列表(ziplist)是由一系列特殊编码的内存块构成的列表,它对于Redis的数据存储优化有着非常重要的作用。 为了更好的理解为什么压缩列表更为高效,我们需要从链表谈起。对于一个典型的双向链表,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。另外还有一个指针指向该节点的字符串。每一个字符串又实际分为三个部分:一个代表该字符串长度的整数,一个代表剩余字节的整数以及以“\0”结尾的字符串本身。以下是一个示例: 忽略其余细节,除字符串本身和空余的字节外,三个指针和两个整数都会占用额外的空间。而压缩列表转为存储上一个结点长度、当前结点长...
DEC 04, 2013/数据库
构建基于Redis的简单社交网络(四)
本文部分翻译自Josiah L Carlson的《Redis in Action》,CHAPTER 8: Building a simple social network。除了关注功能外,另外一个最基本的功能要数发布状态消息,这是用户发布分享的入口。当别人对你的内容感兴趣时,你就会受到关注。之前我们已经阐述了如何创建消息,但仅仅是局限在创建而并未更新用户自己和其粉丝的时间轴内以供展示。这正是我们这一部分重点讨论的内容。更新时间轴的操作取决于一个用户的粉丝数。如果当前用户的粉丝数较少(例如1000以内),则可以对所有相关用户的时间轴进行即时的更新。而如果该用户的粉丝团很庞大,那恐怕一个同步...
DEC 02, 2013/数据库
构建基于Redis的简单社交网络(三)
本文部分翻译自Josiah L Carlson的《Redis in Action》,CHAPTER 8: Building a simple social network。 分享是Twitter这样的社交网站的基本功能。关注则意味着你对对方所发表的内容感兴趣并且希望得到对方的关注。 本节我们将讨论如何管理用户的关注与粉丝列表,以及在进行关注/取消关注后用户首页的时间轴的变化。 在之前实现时间轴时,我们将状态消息的ID和时间戳放在ZSET中,这里同样可以使用该方法,将用户ID作为成员并以关注的时间作为分数。如下图所示: 在进行关注或取消关注的时候,需要更新用...
NOV 29, 2013/数据库
构建基于Redis的简单社交网络(二)
本文部分翻译自Josiah L Carlson的《Redis in Action》,CHAPTER 8: Building a simple social network。 当用户登录到Twitter后,首先映入眼帘的即是一条由自己以及所关注的用户发布的状态消息所组成的时间轴。作为最基本的入口,其中的数据必须能够尽可能快的获取到。 这一部分,我们就来讨论如何存储时间轴数据并能快速的将其拿出来展示。 对于首页时间轴来说,所需的就是一个包含当前用户自己和关注者的状态消息列表。我们将其保存在ZSET中并以消息ID和时间戳分别作为成员和分数,如下图所示: 不过ZS...
NOV 28, 2013/数据库
构建基于Redis的简单社交网络(一)
本文翻译自Josiah L Carlson的《Redis in Action》,CHAPTER 8: Building a simple social network。 本章,我们将阐述实现一个类似Twitter这样的社交网站所需的数据结构和概念。当然,这并不代表阅读完本章,你就能应付一个真正的大型网站,而是通过其中的机制让你能够更好的去理解如何用简单的方法达到我们的目标。 本章将涉及如下内容: 用户与状态消息 时间轴 关注/被关注列表 发布/删除状态更新 Streaming API 1. 用户和状态消息: 当用户与Twitter进行...
NOV 20, 2013/数据库
一个简单的Redis邮件发送队列
Redis一大特色就是拥有多种数据类型,其中的LIST是有序列表,利用其特性可以很方便的模拟一个队列。下面的代码示例展示了一个简单的Redis邮件发送队列:def send_email_via_queue(conn, to_email, content):     data = {         'to_email': to_email,     ...
1 2 >