Reids 是一个开源的高性能键值对数据库。它通过多种键值数据类型来适应不同场景下的存储需求,并借助许多高层级的接口使其可以胜任如缓存、队列系统等不同的角色。

1.Reids的诞生

Redis到底是在什么情况下诞生的,我们才能知道我们为什么要用它。现在就来简单说说它的历史。

两个时间点2008年和2009年。

2008年一家意大利的创业公司 Merzia的创始人Salvatore Sanfilippo 在推出一款基于 MySQL 的网站实习统计系统 LLOOGG时 发现 MySQL 的性能很让人失望,于是人家就自己亲自为自家产品量身定做了一个数据库就是Redis,并于2009年开发完成并开源发布。没想到其良好的性能吸引了大量的用户来使用 Redis,在一分数据库的使用情况调查表中,显示有近12%的公司在使用Redis。国内如新浪微博、街旁和知乎,国外如 GitHub、Stack Overflow等等都是Redis的用户。

2. 为什么用它(特性)

下面就说一下究竟它的优点是什么,吸引了如此庞大的用户 ???

2.1 存储结构

Redis 是 REmote DIctionary Server (远程字典服务器)的缩写,它以字典结构存储数据,并允许其他应用通过TCP 协议读写字典中的内容。

例如:

dict["key"] = "value"

中dict是一个字典结构变量,字符串"key"是键名,而"value"是键值,在字段中我们可以获取或设置键名对应的键值,也可以删除一个键。

数据类型

到目前为止Redis支持的键值数据类型如下:

  1. 字符串类型
  2. 散列类型
  3. 列表类型
  4. 集合类型
  5. 有序集合类型

这种字典类型的存储结构与常见的 MySQL 等关系数据库的二维表形式的存储结构有很大的差异。

例如:我们需要使用 model 变量 存储一篇文章的数据(包括标题、正文、阅读量和标签):

model["title"] = "language"

model["content"] = "Balabala"

model["view"] = 0

model["tags"] = ["PHP","Ruby","Node.js"]

如果我们需要把这片文章的数据存储到数据库中,并且要求可以通过标签检索出文章。如果使用关系数据库的存储,一般会将标题、正文和阅读量存储在一个表中,而将标签存储在另一个表中,然后再使用第三个表连接接文章和标签表。需要查询时海的将三个表进行连接,不是很直观。

而Redis 字典结构的存储方式和对多种简直数据类型的支持使得开发者可以将程序中的数据直接映射到Redis中。

使用Redis的另一个优势是其对不用的数据类型提供可非常方便的操作方式,如使用集合类型存储文章标签,Redis 可以对标签进行如交集、并集这样的集合运算。

2.2 内存存储与持久化

Redis 数据库中所有数据都存储在内存中。由于内存的读写速度快于硬盘,因此Redis在性能上对比其他基于硬盘存储的数据库有非常明显的优势,在一台普通的笔记本电脑上,Redis可以在一秒内读写超过十万个键值。

将数据存储在内存中也有问题,例如,程序推出后内存中的数据会丢失。不过Redis提供了对持久化的支持,即将可以内存中的数据异步写入到硬盘中,同时不影响继续提供服务。

2.3 功能丰富的多面手

Redis 虽然是作为数据库开发的,但是还有本多人将其用作缓存、队列系统等来使用。

Redis 可以为每个键设置生存时间(TimeToLive, TTL),生存时间到期后会自动被删除。这以功能配合出色的性能让Redis可以作为缓存系统来使用。

作为缓存系统,Redis 还可以限定数据占用的最大内存空间,子啊数据达到空间限制后可以以按照一定的规则自动淘汰不需要的键。

除此之外,Redis 的列表类型键可以用来实现队列,并可支持阻塞式读取,可以很容易得实现一个高性能的优先级对列。同时在更高层面上,Redis海支持"发布/订阅"的消息模式,可以基于此构建聊天室等系统。

2.4 简单稳定

例如: 在关系数据中要获取 model 表中 id为 1的记录title 的字段的值使用SQL语句实现:

SELECT title FROM model WHERE id = 1 LIMIT 1

使用Redis中要读取键名为 model:1 的散列类型键的 title字段的值,可以使用如下命令:

HGET model:1 title

其中HGET就是一个命令。Redis 提供了一百多个命令,但是常用的只有几十个而且非常容易记忆。

Redis提供了几十种不同变成语言的客户端库,这些库都很好的封装了Redis的命令,使得在程序中与 Redis 进行交互变得很容易。

Redis 使用C语言开发,代码量只有3万多行。这降低了用户通过修改 Redis源代码来之更适合自己项目需要的门槛。对与希望“榨干”数据库性能开发者而言,这无疑是一个很大的吸引力。

Reddis的开源使得Redis具有良好的开发分为和严谨的版本发布机制,这让Redis的稳定版本非常可靠。

Redis的优势

总结一下:

  1. 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  2. 丰富的数据类型 – Redis支持二进制的字符串、列表、哈希值、集合和有序集合等数据类型操作。
  3. 丰富的特性 – Redis还支持 发布/订阅, 通知, key 过期等等特性。
  4. 内存存储与持久化,数据可靠不丢失
  5. 简单稳定

Redis 入门之Redis简介的更多相关文章

  1. Redis入门实例(Redis+Sprint+maven创建工程)

    一.>创建一个maven工程应用和相关配置:Redis_study,创建工程应用过程略 1.>配置pom.xml:文件内容如下 <project xmlns="http:/ ...

  2. Redis入门笔记-redis内部数据结构(01)

    redis是一个轻量级的Nodsql数据库,使用kev-value的形式存储数据,在redis的世界里,没有整数.浮点数等概念,大多数情况下数据以字符串形式展现,偶尔会出现Long类型数据的场景. 一 ...

  3. 安装redis入门

    redis官网:redis.io redis版本用的是redis-3.2.2 $ wget http://download.redis.io/releases/redis-3.2.2.tar.gz $ ...

  4. redis入门(一)

    目录 redis入门(一) 前言 特性 速度快 简单稳定 丰富的功能 历史 历史版本 安装与启动 安装 数据类型与内部编码 数据结构 内部编码 常用API与使用场景 常用命令 字符串 列表 哈希 集合 ...

  5. redis入门(二)

    目录 redis入门(二) 前言 持久化 RDB AOF 持久化文件加载 高可用 哨兵 流程 安装部署 配置技巧 集群 原理 集群搭建 参考文档 redis入门(二) 前言 在redis入门(一)简单 ...

  6. redis入门(三)

    目录 redis入门(三) 目录 前言 事务 原理 Lua脚本 安装 脚本命令 集群搭建工具 redis-trib.rb redis官方集群搭建 集群横向扩展 故障转移 redis管理 参考文档 re ...

  7. Redis入门指南之一(简介)

    1. 简介 Redis是一个开源的.高性能的.基于键值对的缓存与存储系统,通过提供多种键值数据类型来适应不同的场景下的缓存与存储需求.同时Redis的诸多高级功能使其可以胜任消息队列.任务队列等不同的 ...

  8. Redis入门很简单之一【简介与环境搭建】

    Redis入门很简单之一[简介与环境搭建] 博客分类: NoSQL/Redis/MongoDB redisnosqlmemcached缓存中间件  [Redis简介] <一>. NoSQL ...

  9. redis从入门到放弃 -> 简介&概念

    一.redis简介 Redis是一款开源的.高性能的键-值存储.它常被称作是一款数据结构服务器. 当值支持的主要数据类型为:字符串(strings)类型,括哈希(hashes).列表(lists).集 ...

随机推荐

  1. 配置Java的jdk环境变量

    1.classpath E:\Java\jdk1..0_20\jre\lib\rt.jar;.;E:\Tomcat\lib; 2.JAVA_HOME E:\Java\jdk1..0_20; 3.Pat ...

  2. H5 readfile 多图片预览

    /** * 多图片前端预览 * @author Tiac */ function preView(_this, offset){ let max_nums = 10;//单位 s let max_si ...

  3. Linux rdate 命令

    rdate命令可以用来查看远程服务器的时间,也可以同步远程服务器的时间到本机 [root@localhost ~]$ yum install -y rdate [root@localhost ~]$ ...

  4. C 环境设置(转自菜鸟教程)

    C 环境设置 本地环境设置 如果您想要设置 C 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C 编译器. 文本编辑器 这将用于输入您的程序.文本编辑器包括 Windows Notep ...

  5. 如何理解精通PHP ?

    「精通 PHP」可以理解为以下三个: 精通「PHP 解析器 精通「PHP 语法.函数(这门语言) 精通「PHP 项目开发 1 精通「PHP 解析器」 可以从这里开始学习: PHP核心:骇客指南 :ht ...

  6. JavaIO简单代码实例

    最近又复习了下JavaIO写了些实例代码都很简单但是能体现大部分方法的用法. IO流实现文件的拷贝   几种不同的方法: package com.wxisme.TestIO; import java. ...

  7. Zabbix漏洞汇总

    一.zabbix: zabbix是监控是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让 ...

  8. 批量远程执行linux服务器程序--基于pxpect(多进程、记日志版)

    #!/usr/bin/python '''Created on 2015-06-09@author: Administrator''' import pexpect import os,sys fro ...

  9. Thinkphp的cookie的怎么玩?

    在使用COOKIE的时候,首先要对COOKIE进行加密,加密方式采用:异位或的方式进行加密: // 异位或加密 1是加密 0 是解密 function encrytion($value,$type=0 ...

  10. centos7.4yum错误

    1. 首先删除redhat原有的yum   rpm -aq | grep yum | xargs rpm -e --nodeps   rpm -aq | grep python-iniparse | ...