Redis的一个非常大优点就是能够不用整个转入到这个数据库,而是能够沿用之前的MySQL等数据库,而仅在一些特定的应用场景通过Redis的特性提高效率。本文列出了11个这种Web应用场景,如显示最新的项目列表、删除和过滤、排行榜等相关需求。

【51CTO精选译文】在“怎样让Redis在你的系统中发挥作用”一文中,Salvatore 'antirez’ Sanfilippo告诉我们怎样利用Redis独有的数据结构处理能力来解决一些常见问题。一些Redis原语命令比方LPUSH、LTRIM和LREM等等可以用来帮助开发人员完毕须要的任务——这些任务在传统的数据库存储中很困难或缓慢。这是一篇很实用而且实际的文章。那么要怎样在你的框架中完毕这些任务呢?

以下列出11种Web应用场景,在这些场景下能够充分的利用Redis的特性,大大提高效率。

1.在主页中显示最新的项目列表。

Redis使用的是常驻内存的缓存,速度很快。LPUSH用来插入一个内容ID,作为keyword存储在列表头部。LTRIM用来限制列表中的项目数最多为5000。假设用户须要的检索的数据量超越这个缓存容量,这时才须要把请求发送到数据库。

2.删除和过滤。

假设一篇文章被删除,能够使用LREM从缓存中彻底清除掉。

3.排行榜及相关问题。

排行榜(leader board)依照得分进行排序。ZADD命令能够直接实现这个功能,而ZREVRANGE命令能够用来依照得分来获取前100名的用户,ZRANK能够用来获取用户排名,很直接并且操作easy。

4.依照用户投票和时间排序。

这就像Reddit的排行榜,得分会随着时间变化。LPUSH和LTRIM命令结合运用,把文章加入到一个列表中。一项后台任务用来获取列表,并又一次计算列表的排序,ZADD命令用来依照新的顺序填充生成列表。列表能够实现非常高速的检索,即使是负载非常重的网站。

5.过期项目处理。

使用unix时间作为keyword,用来保持列表可以按时间排序。对current_time和time_to_live进行检索,完毕查找过期项目的艰巨任务。还有一项后台任务使用ZRANGE...WITHSCORES进行查询,删除过期的条目。

6.计数。

进行各种数据统计的用途是非常广泛的,比方想知道什么时候封锁一个IP地址。INCRBY命令让这些变得非常easy,通过原子递增保持计数;GETSET用来重置计数器;过期属性用来确认一个keyword什么时候应该删除。

7.特定时间内的特定项目。

这是特定訪问者的问题,能够通过给每次页面浏览使用SADD命令来解决。SADD不会将已经存在的成员加入到一个集合。

8.实时分析正在发生的情况,用于数据统计与防止垃圾邮件等。

使用Redis原语命令,更easy实施垃圾邮件过滤系统或其它实时跟踪系统。

9.Pub/Sub。

在更新中保持用户对数据的映射是系统中的一个普遍任务。Redis的pub/sub功能使用了SUBSCRIBE、UNSUBSCRIBE和PUBLISH命令,让这个变得更加easy。

10.队列。

在当前的编程中队列随处可见。除了push和pop类型的命令之外,Redis还有堵塞队列的命令,可以让一个程序在运行时被还有一个程序加入到队列。你也可以做些更有趣的事情,比方一个旋转更新的RSS feed队列。

11.缓存。

Redis缓存使用的方式与memcache同样。

网络应用不能无休止地进行模型的战争,看看这些Redis的原语命令,虽然简单但功能强大,把它们加以组合,所能完毕的就更无法想象。当然,你能够专门编写代码来完毕全部这些操作,但Redis实现起来显然更为轻松。

原文:11 Common Web Use Cases Solved In Redis

Redis11种Web应用场景的更多相关文章

  1. Redis 11种Web应用场景举例

    在"怎样让redis在你的系统中发挥作用"一文中,salvatore 'antirez' sanfilippo告诉我们如何利用redis独有的数据结构处理能力来解决一些常见问题.一 ...

  2. Redis能干啥?细看11种Web应用场景

    下面列出11种Web应用场景,在这些场景下可以充分的利用Redis的特性,大大提高效率. 1.在主页中显示最新的项目列表. Redis使用的是常驻内存的缓存,速度非常快.LPUSH用来插入一个内容ID ...

  3. Redis能干啥?细看11种Web应用场景[转]

    下面列出11种Web应用场景,在这些场景下可以充分的利用Redis的特性,大大提高效率. 1.在主页中显示最新的项目列表. Redis使用的是常驻内存的缓存,速度非常快.LPUSH用来插入一个内容ID ...

  4. 几种web字体格式

    目前,文字信息仍是网站最主要的内容,随着CSS3技术的不断成熟,Web字体逐渐成为话题,这项让未来Web更加丰富多彩的技术拥有多种实现方案,其中之一是通过@font-face属性在网页中嵌入自定义字体 ...

  5. 四 主要的几种 Web 服务器

    一 Microsoft IIS 1. 仅支持 Windows 操作系统,用于 .Net 平台网站的部署和运行. 2. IIS 是一种 Web 服务组件,包括括 Web 服务器.FTP 服务器.NNTP ...

  6. 常见的三种Web服务架构

    常见的三种Web服务架构 转自http://www.cnblogs.com/bvbook/archive/2008/12/24/1360942.html 相互竞争的服务架构 The Competing ...

  7. Java中常见的5种WEB服务器介绍

    这篇文章主要介绍了Java中常见的5种WEB服务器介绍,它们分别是Tomcat.Resin.JBoss.WebSphere.WebLogic,需要的朋友可以参考下 Web服务器是运行及发布Web应用的 ...

  8. 【转】浅谈常用的几种web攻击方式

    浅谈常用的几种web攻击方式 一.Dos攻击(Denial of Service attack) 是一种针对服务器的能够让服务器呈现静止状态的攻击方式.有时候也加服务停止攻击或拒绝服务攻击.其原理就是 ...

  9. SSD固态盘应用于Ceph集群的四种典型使用场景

    在虚拟化及云计算技术大规模应用于企业数据中心的科技潮流中,存储性能无疑是企业核心应用是否虚拟化.云化的关键指标之一.传统的做法是升级存储设备,但这没解决根本问题,性能和容量不能兼顾,并且解决不好设备利 ...

随机推荐

  1. JQuery - 点击图片显示大图

    效果: 目录结构: 代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="De ...

  2. Eclipse + PyDev 无法导入模块

    下载后的包,在python IDLE 都可以导入这些模块,但是在Eclipse里面需要我们自己添加路径 需要导入的模块,在那个路径下,就在这里添加路径即可,其他的同理.

  3. Servlet过滤器——日志记录过滤器

    1.概述 在实际的项目开发过程中,经常需要在项目运行时,记录并在控制台中输出运行时的日志信息,便于查看项目的运行状况.本实例将介绍如何应用过滤器实现日志记录.运行本实例,将在控制台中输出项目运行时的日 ...

  4. rac各节点实例需设置为相同的一些参数

    RAC Parameters That Require Identical Settings • ACTIVE_INSTANCE_COUNT • ARCHIVE_LAG_TARGET • COMPAT ...

  5. [置顶] JSP分页,使用Hibernate+mysql

    此代码为博主参考巴巴运动网源码所得,大部分一样,略有修改,在这里分享给大家,也方便自己以后写代码直接copy,看网上很多分页代码JSP里是用JAVA代码,博主原来也是这样,看到源码了解了JSTL,建议 ...

  6. 利用iframe技巧获取訪问者qq

    今天工作时,有个暂时加的好友问我,怎么利用web页面获取訪问者的qq. 曾经没有接触过,感觉到非常好奇,可是工作中脑子非常亢奋,转的快,利用所学的知识迅速想到一条技巧,那就是假想用户在进入我们设定的页 ...

  7. vc 在edit控件中动态插入数据滚动显示

    内存从网上论坛摘抄整理 思路:给控件设置多行属性,设置垂直滚动条,Auto Vscroll设置为true,放入文本后把插入点设置到末尾 pEdit->LineScroll(pEdit->G ...

  8. Android 特殊符号的转码大全

    项目中要在string.xml 中显示特殊符号,如@号冒号等,直接写肯定不行啦..只能考虑使用ASCII码进行显示: @号 @ :号 : 空格   以下为常见的ASCII十进制交换编码: --> ...

  9. ubuntu10.10 tftp安装,配置,测试

    ubuntu10.10 tftp安装,配置,测试 成于坚持,败于止步 虽然ubuntu/centos/redhat都是linux,但是内核其中存在一定的修改,所以对于tftp服务器的安装存在不同的命令 ...

  10. 后缀数组--可重叠的K次最长重复子串(POJ3261)

    题目:Milk Patterns #include <stdio.h> #include <string.h> #define N 1000010 int wa[N],wb[N ...