Redis 在现实世界的 5 个用法

转载 2018年04月02日 00:00:00

Redis是一个强大的内存数据结构存储,包含数据库,缓存和消息代理等多种用途。大多数人经常认为它不过是一个简单的键值存储,但其实它有更多的能力。下面我将会总结一些Redis可以做的事情的真实例子。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

1.全页面缓存

首先是整页缓存。如果你正在使用服务器端呈现的内容,则不需要为每个单独的请求重新渲染每个页面。使用如Redis这样的缓存,你可以缓存经常请求的内容,从而大大减少请求最多的页面的延迟,并且大多数框架针对Redis缓存页面都有hooks。

简单命令

/ Set the page that will last 1 minuteSET key "<html>...</html>" EX 60// Get the pageGET key

2.排行榜

Redis令人耀眼的地方之一就是排行榜。由于Redis在内存中,因此可以非常快速和高效地处理递增和递减。将此与每个请求运行SQL查询比较,性能收益巨大!这与Redis的排序集相结合意味着你可以以毫秒为单位抓取列表中评分最高的项目,而且实现起来非常容易。

简单命令

// Add an item to the sorted setZADD sortedSet 1 "one"// Get all items from the sorted setZRANGE sortedSet 0 -1// Get all items from the sorted set with their score
ZRANGE sortedSet 0 -1 WITHSCORES

3.会话Session存储

我所见的Redis最常见的用途是会话存储。与其他会话存储(如Memcache)不同,Redis可以保留数据,以便在缓存停止的情况下,在重新启动时,所有数据仍然存在。即便不是需要严格持续的任务,此功能仍可以为你的用户省去大量的麻烦。没有人会乐于见到他们的会话被无缘无故随机删掉。

简单命令

// Set session that will last 1 minuteSET randomHash "{userId}" EX 60// Get userIdGET randomHash

4.队列

使用Redis可以做的一个不太常见,但非常有用的事情是排队。无论是电子邮件队列还是其他应用程序使用的数据,你都可以在Redis中创建一个高效的队列。任何熟悉堆栈以及会push和pop项目的开发人员都可以轻松自然地使用此功能。

简单命令

// Add a Message
HSET messages <id> <message>ZADD due <due_timestamp> <id>// Recieving Message
ZRANGEBYSCORE due -inf <current_timestamp> LIMIT 0 1
HGET messages <message_id>// Delete  Message
ZREM due <message_id>HDEL messages <message_id>

5.pub/sub

Redis在真实世界的最终用法即我将在这篇文章中提出的pub / sub。这是Redis内置的最强大的功能之一;得到的可能是无限的。你可以创建一个实时聊天系统,在社交网络上触发好友请求的通知等等。这个功能是Redis提供的最被低估的功能之一,但功能非常强大,而且使用简单。

简单命令

// Add a message to a channelPUBLISH channel message// Recieve messages from a channelSUBSCRIBE channel

结论

我希望你会喜欢这些Redis在真实世界的使用。虽然这篇文章只抓住了Redis能为你做的事情的表面,但是我希望你能从中获得应如何充分利用Redis的启发。

640?wx_fmt=png

数据模型——从现实世界到信息世界——再到物理世界(设计数据库的整体思路)

数据模型是对现实世界数据特征的抽象,说白了就是数据模型是用来描述数据、组织数据、操作数据的。 数据库模型是数据库系统的核心和基础。数据模型分类两类:①概念模型 也称之为信息模型,它是站在用户的角度...
  • m0_37884977
  • m0_37884977
  • 2018-01-02 11:35:53
  • 252

浅谈OOP与现实世界之间关系(面向对象的特征)

面向对象程序设计语言(Object-Oriented Programming ,OOP)是一种用计算机表达现实世界的方式。从现实世界到能用计算机表述过程中抽象无处不在。 对象...
  • wmaoshu
  • wmaoshu
  • 2016-04-09 14:38:21
  • 671

对象——从现实世界的抽象(*)

关键词:   对象    抽象    状态    映射    静态 对象和类 对象一词,我们可能会联想到一个物体。比如一支笔,一本书,等等。他们都可以称为对象。对象其实就是...
  • lingpy
  • lingpy
  • 2018-02-01 22:02:29
  • 70

章节导学第5章 循环结构

日升日落,日复一日,重复是这个世界永恒的主题。现实世界中的许多问题都可以通过“重复”来解决,而C语言中的“循环结构”被用来模拟这一过程中的“重复”。循环是利用计算机解决问题的终极武器,编程实际上就是编...
  • stunt
  • stunt
  • 2012-09-12 12:05:52
  • 929

数据库 数据

(1)数据是人们用各种物理符号,把信息按一定格式记载下来的有意义都得符号的组合。数据包括数据内容和数据形式。 ----《SQL Server 2012数据库原理与应用》鲁宁 主编 2016.06 ...
  • wxl1390
  • wxl1390
  • 2017-11-24 10:27:22
  • 75

如果说这个世界不是真实存在的,只是一段代码,迄今为止你发现了哪些bug?

知乎上有一个这样的帖子,回答都蛮精彩的,不过有一个特别精彩,不明觉厉的赶脚! http://www.zhihu.com/question/20198823 摘贴如下: 刘斯翔,教法语的计算机...
  • Sasoritattoo
  • Sasoritattoo
  • 2013-12-19 12:23:27
  • 2912

虚拟中的多态与现实中多态

在现实世界中,同一事物可以有很多种不同的状态,比如水有固态,气态,和液态;但它们都继承了水的特性,它们的分子结构也是一样的,物理特性和化学特性也是一样的。...
  • m0_37081089
  • m0_37081089
  • 2017-01-16 08:27:52
  • 216

用面向对象的眼光看世界

本文主要是自己的一些见解(不对之处,敬请指正) 1 首先讲类的设计   人们用面向对象的方法设计软件,因为人类也是这样看事物的。    比如: Object类是一切的基类。任何一个东西都应该属于一个对...
  • longronglin
  • longronglin
  • 2007-05-24 22:47:00
  • 964

从现实世界到业务模型

uml通过被称之为概念化的过程来建立适合计算机理解和实现的模型,这个模型称之为分析模型。分析模型介于原始需求和计算机实现之间,是一种过渡模型。分析模型向上映射了原始需求,计算机的可执行代码可以通过分析...
  • huxin1
  • huxin1
  • 2009-09-16 15:25:00
  • 335

《REWORK》摘录及感想----理想世界和现实世界真的无法平衡吗?

转自:http://coolshell.cn/articles/9156.html 作者:陈皓 读了《Rework》这本书好多遍,每次读都有不同的感想。但从来没有把这些感想记录下来,今天把《Rewor...
  • danny__Hello
  • danny__Hello
  • 2017-03-18 21:00:40
  • 250
收藏助手
不良信息举报
您举报文章:Redis 在现实世界的 5 个用法
举报原因:
原因补充:

(最多只允许输入30个字)