深入浅出Redis
一、Redis的诞生
Redis创建者,出生于西西里岛的意大利人(antirez)发明的,个人网站,http://invece.org。早年是系统管理员,2004-2006 年做嵌入式方面的工作,之后接触 WEB,2007 年和朋友共同创建了一个网站 LLOOGG.com,并为了解决这个网站的负载问题而在 2009 年发明了 Redis。有关大数据数据仓库问题,请看《传统数据库和数据仓库》
说到这个 LLOOGG.com 网站,我们来看看这个到底是个干嘛的网站,LLOOGG.com网站是一个访客信息追踪网站,网站可以通过 javascript 脚本,将访客的 IP 地址、所属国家、阅览信息、访问页面地址等数据传送给 LLOOGG.com。

三个网站正在向 LLOOGG.com 发送它们的访客浏览记录

这个就是 LLOOGG.com 的用户界面,ps:Google 的 Analytics知道 2011 年才有了实时功能,所以说 LLOOGG.com 的实时反馈想法在当时 2007 年还是很有新意的。
LLOOGG 的运作方式

各个网站发送的浏览记录会分别进入相应的队列

FIFO 机制,当列表的长度超过用户指定的最大长度时,程序每向列表推入一条记录,就需要从列表中弹出一条最旧的记录,图中展示比如用户设置列表最大长度为 5
LLOOGG 怎么引起负载问题的呢?
随着 LLOOGG 的用户越来越多,LLOOGG 要维护的列表数量也越来越多,要执行的推入和弹出操作也越来越多,当时 LLOOGG 当时使用 MYSQL 数据库,而每次 MYSQL执行推入和弹出操作都要进行硬盘写入和读取,程序的性能严重受制于硬盘 I/O,很多操作都堆在那里,然后网站整个就没法运作了。
这个负载问题的根本原因就是这个硬盘 IO,所以 antirez 在不改变硬件的基础上,通过提升列表操作的性能来解决负载问题,决定自己写一个具有列表结构的内存数据库原型。最重要的是数据存储在内存而不是硬盘,所以程序的性能不会受到硬盘 IO 限制,可以以极快的速度执行针对列表的堆入和弹出操作。结果试验,确实解决了 LLOOGG 当时
二、Redis特点
世界上有无数种数据库,为什么要使用 Redis 呢,我们来看看它的优点
2.1独特的键值对模型
我们知道很多数据库只能处理一种数据结构:
SQL数据库----二维表格
文档数据库(CouchDB、MongoDB)----由 JSON/BSON 组成的文档
2.2数据结构丰富
Redis 虽然也是键值对数据库,但是和 Memcached 不同的是,Redis 支持多种类型的数据结构,不仅可以是字符串,同时还提供散列(hashes),列表(lists),集合(sets),有序集合(sorted sets)等数据结构。
通过选用不同的数据结构,用户可以使用 Redis 解决各式各样的问题。
数据库有两种,一种硬盘数据库,一种内存数据库
硬盘是把值储存在硬盘,典型的是 SQL 数据库

在内存里面就存储一下索引,当硬盘数据库想访问硬盘的值时,它先在内存里面找到索引,然后在找值,问题是什么,在读取和写入硬盘的时候,如果读写比较多的时候,它会把硬盘 IO 堵死。
至于内存数据库,它会直接把值放到内存里面,内存数据库就直接把值取到,风一样的感觉,读写数据的时候都不会受到硬盘 IO 速度的限制,所以速度极快。
2.3数据的持久化
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
2.4数据的备份
Redis支持数据的备份,即master-slave模式的数据备份。
深入浅出Redis的更多相关文章
- 10.27-Redis-mz 深入浅出Redis
深入浅出Redis 1.Redis的发展史 Redis[Remote Directory Server]:远程服务器字典 2.下载安装Redis 1>Linux下安装Reids ...
- 深入浅出 Redis client/server交互流程
综述 最近笔者阅读并研究redis源码,在redis客户端与服务器端交互这个内容点上,需要参考网上一些文章,但是遗憾的是发现大部分文章都断断续续的非系统性的,不能给读者此交互流程的整体把握.所以这里我 ...
- 深入浅出—Redis集群的相关详解
前言: 这篇文章主要介绍了Redis集群的相关,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值. 注意!要求使用的都是redis3.0以上的版本,因为3.0以上增加了red ...
- 深入浅出Redis(二)高级特性:事务
第一篇中介绍了Redis是一个强大的键-值仓储,支持五种灵活的数据结构.其实,Redis还支持其他的一些高级特性:事务.公布与订阅.管道.脚本等,本篇我们来看一下事务. 前一篇中我们提到,在Redis ...
- 深入浅出Redis(三)高级特性:管道
Redis是一个响应式的服务,当client发送一个请求后,就处于堵塞状态等待Redis返回结果. 这样一次命令消耗的时间就包含三个部分:请求从client到server的时间.结果从server到c ...
- Redis变慢?深入浅出Redis性能诊断系列文章(一)
(本文首发于"数据库架构师"公号,订阅"数据库架构师"公号,一起学习数据库技术) Redis 作为一款业内使用率最高的内存数据库,其拥有非常高的性能,单节点 ...
- Redis变慢?深入浅出Redis性能诊断系列文章(三)
(本文首发于"数据库架构师"公号,订阅"数据库架构师"公号,一起学习数据库技术,助力职业发展) 本篇为Redis性能问题诊断系列的第三篇,主要从Redis服务层 ...
- Redis变慢?深入浅出Redis性能诊断系列文章(二)
(本文首发于"数据库架构师"公号,订阅"数据库架构师"公号,一起学习数据库技术) 本篇为Redis性能问题诊断系列的第二篇,本文主要从应用发起的典型命令使用上进 ...
- 深入浅出redis缓存应用
0.1.索引 https://blog.waterflow.link/articles/1663169309611 1.只读缓存 只读缓存的流程是这样的: 当查询请求过来时,先从redis中查询数据, ...
随机推荐
- 【Thread】CountdownEvent任务并行[z]
System.Threading.CountdownEvent 是一个同步基元,它在收到一定次数的信号之后,将会解除对其等待线程的锁定. CountdownEvent 专门用于以下情况:您必须使用 ...
- dsPIC30F 细节点问题不定期更新ing
知识点1 TRISD: I/O 引脚 方向控制 寄存器 (1--input, 0--Output)LATD: I/O 引脚 输出锁存器PORTD: 是双向I/O 端口 备注:LATD = 0x000 ...
- js学习之原生js实现懒加载
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- Replace To Make Regular Bracket Sequence
Replace To Make Regular Bracket Sequence You are given string s consists of opening and closing brac ...
- 201771010134杨其菊《面向对象程序设计(java)》第十五周学习
第十五周学习总结 第一部分:理论知识 JAR文件: 应用程序首选项存储: Java Web Start JAR文件: 1.Java程序的打包:程序编译完成后,程序员将.class文件压缩打包为.jar ...
- Workbench利用Python驱动DM执行Js进行建模
Workbench的工作平台下可以利用Python进行一些操作,包括添加system和component等等.DM可以通过执行Jscript脚本进行自动建模,因此,结合这两块的内容,可以利用Pytho ...
- 基于xposed实现android注册系统服务,解决跨进程共享数据问题
昨花了点时间,参考github issues 总算实现了基于xposed的系统服务注入,本文目的是为了“解决应用之间hook后数据共享,任意app ServiceManager.getService就 ...
- UVA 10944 Nuts for nuts..
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=21&p ...
- JS獲取URL的參數
function GetQueryString(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*) ...
- js中的原型对象链
由于原型对象也是一个对象,它也有自己的原型对象并继承对象中的属性,这就是原型对象链:对象继承其原型对象,而原型对象继承它的原型对象,以此类推. 我们创建的每一个函数都有一个prototype(原型)属 ...