使用Redis构建消息拉取系统

两个或多个客户端在互相发送和接收消息的时候,通常会使用以下两种方法来传递消息。第一种方法被称为消息推送(push messaging),也就是由发送者来确保所有接收者已经成功接收到了消息。Redis内置了用于进行消息推送的PUBLISH命令和SUBSCRIBE命令。第二种方法被称为消息拉取(pull messaging),这种方法要求接收者自己去获取存储在某种邮箱(mailbox)里面的消息。

尽管消息推送非常有用,但是当客户端因为某些原因而没办法一直保持在线的时候,采用这一消息传递方法的程序......

2017 - 06 - 18

使用Redis构建任务队列

在处理Web客户端发送的命令请求时,某些操作的执行时间可能会比我们预期的更长一些。通过将待执行任务的相关信息放入队列里面,并在之后对队列进行处理,用户可以推迟执行那些需要一段时间才能完成的操作,这种将工作交给任务处理器来执行的做法被称为任务队列(task queue)。现在有很多专门的任务队列软件(如ActiveMQ、RabbitMQ、Gearman、Amazon SQS,等等),另外在缺少专门的任务队列可用的情况下,也有一些临时性的方法可以创建任务队列。比方说使用定期作业来扫描一个数据表,查找......

2017 - 06 - 18

使用Redis构建计数信号量控制并发

计数信号量是一种锁,它可以让用户限制一项资源最多能够同时被多少个进程访问,通常用于限定能够同时使用的资源数量。你可以把我们在前一节创建的锁看作是只能被一个进程访问的信号量。

计数信号量和其他种类的锁一样,都需要被获取和释放。客户端首先需要获取信号量,然后执行操作,最后释放信号量。计数信号量和其他锁的区别在于,当客户端获取锁失败的时候,客户端通常会选择进行等待;而当客户端获取计数信号量失败的时候,客户端通常会选择立即返回失败结果。举个例子,假设我们最多只允许5个进程同时获取信号量,那么当有第6个......

2017 - 06 - 18

使用Redis构建分布式锁

一般来说,在对数据进行“加锁”时,程序首先需要通过获取(acquire)锁来得到对数据进行排他性访问的能力,然后才能对数据执行一系列操作,最后还要将锁释放(release)给其他程序。对于能够被多个线程访问的共享内存数据结构(shared-memory data structure)来说,这种“先获取锁,然后执行操作,最后释放锁”的动作非常常见。Redis使用WATCH命令来代替对数据进行加锁,因为WATCH只会在数据被其他客户端抢先修改了的情况下通知执行了这个命令的客户端,而不会阻止其他客户端......

2017 - 06 - 13

使用Redis构建自动补全程序

在Web领域里面,自动补全(autocomplete)是一种能够让用户在不进行搜索的情况下,快速找到所需东西的技术。自动补全一般会根据用户已输入的字母来查找所有以已输入字母为开头的单词,有些自动补全甚至可以在用户输入句子开头的时候自动补充完整个句子。比如说,Google搜索的自动补全就向我们展示了,Betty White在《周六夜现场》上现身一事在发生数年之后的今天仍然热度不减(因为Betty White是一个话题人物,所以这并不奇怪)。Web浏览器在用户向地址栏中输入信息的时候,也会通过自动补......

2017 - 06 - 13
Pre Page